From 7624311ac6892879981bfa8df35c9243b5592f41 Mon Sep 17 00:00:00 2001 From: levlam Date: Sun, 16 Jul 2023 16:36:35 +0300 Subject: [PATCH] Don't resave loaded active stories to database if they didn't change. --- td/telegram/StoryManager.cpp | 32 ++++++++++++++++++-------------- td/telegram/StoryManager.h | 2 +- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/td/telegram/StoryManager.cpp b/td/telegram/StoryManager.cpp index 9458ad1c7..6838a2760 100644 --- a/td/telegram/StoryManager.cpp +++ b/td/telegram/StoryManager.cpp @@ -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()); + Promise(), 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 &&story_ids, Promise &&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 &&story_ids, Promise &&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()); diff --git a/td/telegram/StoryManager.h b/td/telegram/StoryManager.h index 2a386c747..5297fb5d6 100644 --- a/td/telegram/StoryManager.h +++ b/td/telegram/StoryManager.h @@ -440,7 +440,7 @@ class StoryManager final : public Actor { void on_toggle_story_is_pinned(StoryId story_id, bool is_pinned, Promise &&promise); void on_update_active_stories(DialogId owner_dialog_id, StoryId max_read_story_id, vector &&story_ids, - Promise &&promise); + Promise &&promise, bool from_database = false); bool update_active_stories_order(DialogId owner_dialog_id, ActiveStories *active_stories, bool *need_save_to_database);