From b196d38a6873e625a55d71ba958648d996328562 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 26 Dec 2023 13:11:22 +0300 Subject: [PATCH] Get channel difference if needed before processing story views list. --- td/telegram/StoryManager.cpp | 28 +++++++++++++++++++++++++++- td/telegram/StoryManager.h | 4 ++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/td/telegram/StoryManager.cpp b/td/telegram/StoryManager.cpp index f2da0e570..d6af34e0c 100644 --- a/td/telegram/StoryManager.cpp +++ b/td/telegram/StoryManager.cpp @@ -377,7 +377,9 @@ class GetStoryViewsListQuery final : public Td::ResultHandler { return on_error(result_ptr.move_as_error()); } - promise_.set_value(result_ptr.move_as_ok()); + auto result = result_ptr.move_as_ok(); + LOG(DEBUG) << "Receive result for GetStoryViewsListQuery: " << to_string(result); + td_->story_manager_->get_channel_differences_if_needed(std::move(result), std::move(promise_)); } void on_error(Status status) final { @@ -2793,6 +2795,30 @@ bool StoryManager::has_unexpired_viewers(StoryFullId story_full_id, const Story G()->unix_time() < get_story_viewers_expire_date(story); } +void StoryManager::get_channel_differences_if_needed( + telegram_api::object_ptr &&story_views, + Promise> promise) { + vector *> messages; + for (const auto &view : story_views->views_) { + CHECK(view != nullptr); + if (view->get_id() != telegram_api::storyViewPublicForward::ID) { + continue; + } + messages.push_back(&static_cast(view.get())->message_); + } + td_->messages_manager_->get_channel_differences_if_needed( + messages, + PromiseCreator::lambda([actor_id = actor_id(this), story_views = std::move(story_views), + promise = std::move(promise)](Result &&result) mutable { + if (result.is_error()) { + promise.set_error(result.move_as_error()); + } else { + promise.set_value(std::move(story_views)); + } + }), + "stories_storyViewsList"); +} + void StoryManager::get_story_interactions(StoryId story_id, const string &query, bool only_contacts, bool prefer_with_reaction, const string &offset, int32 limit, Promise> &&promise) { diff --git a/td/telegram/StoryManager.h b/td/telegram/StoryManager.h index aba6b21b0..993be4ee7 100644 --- a/td/telegram/StoryManager.h +++ b/td/telegram/StoryManager.h @@ -267,6 +267,10 @@ class StoryManager final : public Actor { const string &offset, int32 limit, Promise> &&promise); + void get_channel_differences_if_needed( + telegram_api::object_ptr &&story_views, + Promise> promise); + void report_story(StoryFullId story_full_id, ReportReason &&reason, Promise &&promise); void activate_stealth_mode(Promise &&promise);