From 5ef3562533d5416734b7bd2f54119ac76b03f841 Mon Sep 17 00:00:00 2001 From: levlam Date: Sat, 24 Feb 2024 03:28:55 +0300 Subject: [PATCH] Add QuickReplyShortcutId::is_server(). --- td/telegram/QuickReplyManager.cpp | 15 +++++++++++++-- td/telegram/QuickReplyManager.h | 2 ++ td/telegram/QuickReplyShortcutId.h | 6 ++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/td/telegram/QuickReplyManager.cpp b/td/telegram/QuickReplyManager.cpp index d9c7480e6..54f53817d 100644 --- a/td/telegram/QuickReplyManager.cpp +++ b/td/telegram/QuickReplyManager.cpp @@ -564,7 +564,7 @@ void QuickReplyManager::on_reload_quick_reply_shortcuts( vector deleted_shortcut_ids; for (auto &quick_reply : shortcuts->quick_replies_) { auto shortcut_id = QuickReplyShortcutId(quick_reply->shortcut_id_); - if (!shortcut_id.is_valid() || quick_reply->shortcut_.empty() || quick_reply->count_ <= 0 || + if (!shortcut_id.is_server() || quick_reply->shortcut_.empty() || quick_reply->count_ <= 0 || quick_reply->top_message_ <= 0) { LOG(ERROR) << "Receive " << to_string(quick_reply); continue; @@ -691,8 +691,19 @@ void QuickReplyManager::delete_quick_reply_shortcut(const string &name, Promise< auto shortcut_id = s->shortcut_id_; td::remove_if(shortcuts_.shortcuts_, [shortcut_id](const unique_ptr &shortcut) { return shortcut->shortcut_id_ == shortcut_id; }); - deleted_shortcut_ids_.insert(shortcut_id); + if (!shortcut_id.is_server()) { + return promise.set_value(Unit()); + } + + delete_quick_reply_shortcut_from_server(shortcut_id, std::move(promise)); +} + +void QuickReplyManager::delete_quick_reply_shortcut_from_server(QuickReplyShortcutId shortcut_id, + Promise &&promise) { + CHECK(shortcut_id.is_server()); + + deleted_shortcut_ids_.insert(shortcut_id); td_->create_handler(std::move(promise))->send(shortcut_id); } diff --git a/td/telegram/QuickReplyManager.h b/td/telegram/QuickReplyManager.h index 47f24ef59..296634c37 100644 --- a/td/telegram/QuickReplyManager.h +++ b/td/telegram/QuickReplyManager.h @@ -197,6 +197,8 @@ class QuickReplyManager final : public Actor { void send_update_quick_reply_shortcuts(); + void delete_quick_reply_shortcut_from_server(QuickReplyShortcutId shortcut_id, Promise &&promise); + Shortcuts shortcuts_; FlatHashSet deleted_shortcut_ids_; diff --git a/td/telegram/QuickReplyShortcutId.h b/td/telegram/QuickReplyShortcutId.h index 59314c3c3..03ac9bd5a 100644 --- a/td/telegram/QuickReplyShortcutId.h +++ b/td/telegram/QuickReplyShortcutId.h @@ -18,6 +18,8 @@ class QuickReplyShortcutId { int32 id = 0; public: + static constexpr int32 MAX_SERVER_SHORTCUT_ID = 1999999999; + QuickReplyShortcutId() = default; explicit constexpr QuickReplyShortcutId(int32 quick_reply_shortcut_id) : id(quick_reply_shortcut_id) { @@ -41,6 +43,10 @@ class QuickReplyShortcutId { return id > 0; } + bool is_server() const { + return id > 0 && id <= MAX_SERVER_SHORTCUT_ID; + } + template void store(StorerT &storer) const { storer.store_int(id);