From 196128b2f14ce3f5bd2420f812e5ce5421366d50 Mon Sep 17 00:00:00 2001 From: levlam Date: Sun, 12 Sep 2021 22:29:40 +0300 Subject: [PATCH] Update chat theme cache after receiving telegram_api::updateTheme. --- td/telegram/ThemeManager.cpp | 20 ++++++++++++++++++++ td/telegram/ThemeManager.h | 4 ++++ td/telegram/UpdatesManager.cpp | 7 ++++--- td/telegram/UpdatesManager.h | 4 ++-- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/td/telegram/ThemeManager.cpp b/td/telegram/ThemeManager.cpp index e2de4ec03..d6342d97a 100644 --- a/td/telegram/ThemeManager.cpp +++ b/td/telegram/ThemeManager.cpp @@ -73,6 +73,24 @@ void ThemeManager::get_chat_themes(Promise &&theme, Promise &&promise) { + CHECK(theme != nullptr); + for (auto &chat_theme : chat_themes_.themes) { + if (chat_theme.light_id == theme->id_ || chat_theme.dark_id == theme->id_) { + chat_themes_.hash = 0; + chat_themes_.next_reload_time = Time::now(); + auto theme_settings = get_chat_theme_settings(std::move(theme->settings_)); + if (chat_theme.light_id == theme->id_) { + chat_theme.light_theme = theme_settings; + } + if (chat_theme.dark_id == theme->id_) { + chat_theme.dark_theme = theme_settings; + } + } + } + promise.set_value(Unit()); +} + td_api::object_ptr ThemeManager::get_theme_settings_object(const ThemeSettings &settings) const { auto fill = [colors = settings.message_colors]() mutable -> td_api::object_ptr { if (colors.size() >= 3) { @@ -134,6 +152,8 @@ void ThemeManager::on_get_chat_themes(Resultemoticon_); + theme.light_id = chat_theme->theme_->id_; + theme.dark_id = chat_theme->dark_theme_->id_; theme.light_theme = get_chat_theme_settings(std::move(chat_theme->theme_->settings_)); theme.dark_theme = get_chat_theme_settings(std::move(chat_theme->dark_theme_->settings_)); chat_themes_.themes.push_back(std::move(theme)); diff --git a/td/telegram/ThemeManager.h b/td/telegram/ThemeManager.h index f3a4dbc3a..ec9432eae 100644 --- a/td/telegram/ThemeManager.h +++ b/td/telegram/ThemeManager.h @@ -27,6 +27,8 @@ class ThemeManager final : public Actor { void get_chat_themes(Promise> &&promise); + void on_update_theme(telegram_api::object_ptr &&theme, Promise &&promise); + private: enum class BaseTheme : int32 { Classic, Day, Night, Tinted, Arctic }; @@ -43,6 +45,8 @@ class ThemeManager final : public Actor { struct ChatTheme { string emoji; + int64 light_id = 0; + int64 dark_id = 0; ThemeSettings light_theme; ThemeSettings dark_theme; }; diff --git a/td/telegram/UpdatesManager.cpp b/td/telegram/UpdatesManager.cpp index 0739e4219..0ba36bbe7 100644 --- a/td/telegram/UpdatesManager.cpp +++ b/td/telegram/UpdatesManager.cpp @@ -47,6 +47,7 @@ #include "td/telegram/StickersManager.h" #include "td/telegram/Td.h" #include "td/telegram/TdDb.h" +#include "td/telegram/ThemeManager.h" #include "td/telegram/WebPagesManager.h" #include "td/actor/MultiPromise.h" @@ -3206,10 +3207,10 @@ void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { - promise.set_value(Unit()); + td_->theme_manager_->on_update_theme(std::move(update->theme_), std::move(promise)); } +// unsupported updates + } // namespace td diff --git a/td/telegram/UpdatesManager.h b/td/telegram/UpdatesManager.h index 86df374c7..7a3ef1312 100644 --- a/td/telegram/UpdatesManager.h +++ b/td/telegram/UpdatesManager.h @@ -486,9 +486,9 @@ class UpdatesManager final : public Actor { void on_update(tl_object_ptr update, Promise &&promise); void on_update(tl_object_ptr update, Promise &&promise); - // unsupported updates - void on_update(tl_object_ptr update, Promise &&promise); + + // unsupported updates }; } // namespace td