From dc4114e235e3daf4086ae611db5b1a8ae4a11b76 Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 7 Aug 2023 00:02:30 +0300 Subject: [PATCH] Decrease server_total_count when load expired active stories from database. --- td/telegram/StoryManager.cpp | 24 ++++++++++++++++++++---- td/telegram/StoryManager.h | 5 +++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/td/telegram/StoryManager.cpp b/td/telegram/StoryManager.cpp index b3382cd1a..d27a01435 100644 --- a/td/telegram/StoryManager.cpp +++ b/td/telegram/StoryManager.cpp @@ -1280,10 +1280,11 @@ StoryManager::ActiveStories *StoryManager::get_active_stories_force(DialogId own failed_to_load_active_stories_.insert(owner_dialog_id); return nullptr; } - return on_get_active_stories_from_database(owner_dialog_id, r_value.ok(), source); + return on_get_active_stories_from_database(StoryListId(), owner_dialog_id, r_value.ok(), source); } -StoryManager::ActiveStories *StoryManager::on_get_active_stories_from_database(DialogId owner_dialog_id, +StoryManager::ActiveStories *StoryManager::on_get_active_stories_from_database(StoryListId story_list_id, + DialogId owner_dialog_id, const BufferSlice &value, const char *source) { auto active_stories = get_active_stories_editable(owner_dialog_id); @@ -1314,7 +1315,21 @@ 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(), "on_get_active_stories_from_database", true); - return get_active_stories_editable(owner_dialog_id); + active_stories = get_active_stories_editable(owner_dialog_id); + if (active_stories == nullptr) { + if (!story_list_id.is_valid()) { + story_list_id = get_dialog_story_list_id(owner_dialog_id); + } + if (story_list_id.is_valid()) { + auto &story_list = get_story_list(story_list_id); + if (!story_list.is_reloaded_server_total_count_ && story_list.server_total_count_ > 0) { + story_list.server_total_count_--; + update_story_list_sent_total_count(story_list_id, story_list); + save_story_list(story_list_id, story_list.state_, story_list.server_total_count_, story_list.server_has_more_); + } + } + } + return active_stories; } void StoryManager::add_story_dependencies(Dependencies &dependencies, const Story *story) { @@ -1402,7 +1417,7 @@ void StoryManager::on_load_active_stories_from_database(StoryListId story_list_i story_list.database_has_more_ = false; } else { for (auto &active_stories_it : active_story_list.active_stories_) { - on_get_active_stories_from_database(active_stories_it.first, active_stories_it.second, + on_get_active_stories_from_database(story_list_id, active_stories_it.first, active_stories_it.second, "on_load_active_stories_from_database"); } DialogDate max_story_date(active_story_list.next_order_, active_story_list.next_dialog_id_); @@ -1484,6 +1499,7 @@ void StoryManager::on_load_active_stories_from_server( story_list.state_ = std::move(stories->state_); } story_list.server_total_count_ = max(stories->count_, 0); + story_list.is_reloaded_server_total_count_ = true; if (!stories->has_more_ || stories->user_stories_.empty()) { story_list.server_has_more_ = false; } diff --git a/td/telegram/StoryManager.h b/td/telegram/StoryManager.h index 2cceff0d8..609c0b4ca 100644 --- a/td/telegram/StoryManager.h +++ b/td/telegram/StoryManager.h @@ -160,6 +160,7 @@ class StoryManager final : public Actor { int32 sent_total_count_ = -1; string state_; + bool is_reloaded_server_total_count_ = false; bool server_has_more_ = true; bool database_has_more_ = false; @@ -359,8 +360,8 @@ class StoryManager final : public Actor { ActiveStories *get_active_stories_force(DialogId owner_dialog_id, const char *source); - ActiveStories *on_get_active_stories_from_database(DialogId owner_dialog_id, const BufferSlice &value, - const char *source); + ActiveStories *on_get_active_stories_from_database(StoryListId story_list_id, DialogId owner_dialog_id, + const BufferSlice &value, const char *source); void on_story_changed(StoryFullId story_full_id, const Story *story, bool is_changed, bool need_save_to_database, bool from_database = false);