diff --git a/td/telegram/StoryManager.cpp b/td/telegram/StoryManager.cpp index eb8604f89..8c8ba0360 100644 --- a/td/telegram/StoryManager.cpp +++ b/td/telegram/StoryManager.cpp @@ -535,6 +535,31 @@ void StoryManager::change_story_files(StoryFullId story_full_id, const Story *st } } +void StoryManager::on_get_story(DialogId owner_dialog_id, + telegram_api::object_ptr &&story_item_ptr) { + if (!owner_dialog_id.is_valid()) { + LOG(ERROR) << "Receive a story in " << owner_dialog_id; + return; + } + CHECK(story_item_ptr != nullptr); + switch (story_item_ptr->get_id()) { + case telegram_api::storyItemDeleted::ID: { + auto story_item = telegram_api::move_object_as(story_item_ptr); + on_delete_story(owner_dialog_id, StoryId(story_item->id_)); + break; + } + case telegram_api::storyItemSkipped::ID: + LOG(ERROR) << "Receive storyItemSkipped"; + break; + case telegram_api::storyItem::ID: { + on_get_story(owner_dialog_id, telegram_api::move_object_as(story_item_ptr)); + break; + } + default: + UNREACHABLE(); + } +} + StoryId StoryManager::on_get_story(DialogId owner_dialog_id, telegram_api::object_ptr &&story_item) { CHECK(story_item != nullptr); @@ -602,6 +627,16 @@ StoryId StoryManager::on_get_story(DialogId owner_dialog_id, return story_id; } +void StoryManager::on_delete_story(DialogId owner_dialog_id, StoryId story_id) { + if (!story_id.is_server()) { + LOG(ERROR) << "Receive deleted " << story_id << " in " << owner_dialog_id; + return; + } + + StoryFullId story_full_id{owner_dialog_id, story_id}; + stories_.erase(story_full_id); +} + void StoryManager::on_story_changed(StoryFullId story_full_id, const Story *story, bool is_changed, bool need_save_to_database) { if (is_changed || need_save_to_database) { diff --git a/td/telegram/StoryManager.h b/td/telegram/StoryManager.h index 267ae8982..f18ccd4f8 100644 --- a/td/telegram/StoryManager.h +++ b/td/telegram/StoryManager.h @@ -93,7 +93,7 @@ class StoryManager final : public Actor { void get_dialog_expiring_stories(DialogId owner_dialog_id, Promise> &&promise); - StoryId on_get_story(DialogId owner_dialog_id, telegram_api::object_ptr &&story_item); + void on_get_story(DialogId owner_dialog_id, telegram_api::object_ptr &&story_item_ptr); std::pair> on_get_stories(DialogId owner_dialog_id, telegram_api::object_ptr &&stories); @@ -125,6 +125,10 @@ class StoryManager final : public Actor { td_api::object_ptr get_story_object(StoryFullId story_full_id, const Story *story) const; + StoryId on_get_story(DialogId owner_dialog_id, telegram_api::object_ptr &&story_item); + + void on_delete_story(DialogId owner_dialog_id, StoryId story_id); + vector on_get_stories(DialogId owner_dialog_id, vector> &&stories); diff --git a/td/telegram/UpdatesManager.cpp b/td/telegram/UpdatesManager.cpp index c3e5e2b9f..4ea318088 100644 --- a/td/telegram/UpdatesManager.cpp +++ b/td/telegram/UpdatesManager.cpp @@ -54,6 +54,7 @@ #include "td/telegram/StickerSetId.h" #include "td/telegram/StickersManager.h" #include "td/telegram/StickerType.h" +#include "td/telegram/StoryManager.h" #include "td/telegram/Td.h" #include "td/telegram/td_api.h" #include "td/telegram/TdDb.h" @@ -4189,12 +4190,13 @@ void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { + td_->story_manager_->on_get_story(DialogId(UserId(update->user_id_)), std::move(update->story_)); promise.set_value(Unit()); } +// unsupported updates + void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { promise.set_value(Unit()); } diff --git a/td/telegram/UpdatesManager.h b/td/telegram/UpdatesManager.h index 016727c29..1efd73040 100644 --- a/td/telegram/UpdatesManager.h +++ b/td/telegram/UpdatesManager.h @@ -613,10 +613,10 @@ class UpdatesManager final : public Actor { void on_update(tl_object_ptr update, Promise &&promise); - // unsupported updates - void on_update(tl_object_ptr update, Promise &&promise); + // unsupported updates + void on_update(tl_object_ptr update, Promise &&promise); void on_update(tl_object_ptr update, Promise &&promise);