Don't resave loaded active stories to database if they didn't change.

This commit is contained in:
levlam 2023-07-16 16:36:35 +03:00
parent 956e31810a
commit 7624311ac6
2 changed files with 19 additions and 15 deletions

View File

@ -1252,7 +1252,7 @@ StoryManager::ActiveStories *StoryManager::on_get_active_stories_from_database(D
}
on_update_active_stories(owner_dialog_id, saved_active_stories.max_read_story_id_, std::move(story_ids),
Promise<Unit>());
Promise<Unit>(), true);
return get_active_stories_editable(owner_dialog_id);
}
@ -2682,17 +2682,19 @@ DialogId StoryManager::on_get_user_stories(DialogId owner_dialog_id,
}
void StoryManager::on_update_active_stories(DialogId owner_dialog_id, StoryId max_read_story_id,
vector<StoryId> &&story_ids, Promise<Unit> &&promise) {
td::remove_if(story_ids, [&](StoryId story_id) {
if (!story_id.is_server()) {
return true;
}
if (!is_active_story(get_story({owner_dialog_id, story_id}))) {
LOG(INFO) << "Receive expired " << story_id << " in " << owner_dialog_id;
return true;
}
return false;
});
vector<StoryId> &&story_ids, Promise<Unit> &&promise, bool from_database) {
if (td::remove_if(story_ids, [&](StoryId story_id) {
if (!story_id.is_server()) {
return true;
}
if (!is_active_story(get_story({owner_dialog_id, story_id}))) {
LOG(INFO) << "Receive expired " << story_id << " in " << owner_dialog_id;
return true;
}
return false;
})) {
from_database = false;
}
if (story_ids.empty() || max_read_story_id.get() < story_ids[0].get()) {
max_read_story_id = StoryId();
}
@ -2712,7 +2714,9 @@ void StoryManager::on_update_active_stories(DialogId owner_dialog_id, StoryId ma
update_story_list_sent_total_count(active_stories->story_list_id_);
}
active_stories_.erase(owner_dialog_id);
save_active_stories(owner_dialog_id, nullptr, std::move(promise));
if (!from_database) {
save_active_stories(owner_dialog_id, nullptr, std::move(promise));
}
send_update_chat_active_stories(owner_dialog_id, nullptr);
} else {
max_read_story_ids_.erase(owner_dialog_id);
@ -2753,7 +2757,7 @@ void StoryManager::on_update_active_stories(DialogId owner_dialog_id, StoryId ma
} else if (update_active_stories_order(owner_dialog_id, active_stories.get(), &need_save_to_database)) {
send_update_chat_active_stories(owner_dialog_id, active_stories.get());
}
if (need_save_to_database) {
if (need_save_to_database && !from_database) {
save_active_stories(owner_dialog_id, active_stories.get(), std::move(promise));
} else {
promise.set_value(Unit());

View File

@ -440,7 +440,7 @@ class StoryManager final : public Actor {
void on_toggle_story_is_pinned(StoryId story_id, bool is_pinned, Promise<Unit> &&promise);
void on_update_active_stories(DialogId owner_dialog_id, StoryId max_read_story_id, vector<StoryId> &&story_ids,
Promise<Unit> &&promise);
Promise<Unit> &&promise, bool from_database = false);
bool update_active_stories_order(DialogId owner_dialog_id, ActiveStories *active_stories,
bool *need_save_to_database);