diff options
| author | levlam <levlam@telegram.org> | 2024-02-02 00:06:59 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2024-02-02 00:06:59 +0300 |
| commit | 56e37a87a2ece773542137ae037cf11bf979c77e (patch) | |
| tree | 91949b0eddc5d618f473b907736fdda431d67383 /td/telegram/ReactionManager.cpp | |
| parent | 32eba3c7d1d8560e49f52158009be0f4b8f078bf (diff) | |
Save Saved Messages tags to database.
Diffstat (limited to 'td/telegram/ReactionManager.cpp')
| -rw-r--r-- | td/telegram/ReactionManager.cpp | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/td/telegram/ReactionManager.cpp b/td/telegram/ReactionManager.cpp index 378015aba..0cca44c13 100644 --- a/td/telegram/ReactionManager.cpp +++ b/td/telegram/ReactionManager.cpp @@ -15,12 +15,15 @@ #include "td/telegram/misc.h" #include "td/telegram/OptionManager.h" #include "td/telegram/ReactionManager.hpp" +#include "td/telegram/ReactionType.hpp" #include "td/telegram/StickerFormat.h" #include "td/telegram/StickersManager.h" #include "td/telegram/Td.h" #include "td/telegram/TdDb.h" #include "td/telegram/telegram_api.h" +#include "td/db/SqliteKeyValueAsync.h" + #include "td/utils/algorithm.h" #include "td/utils/buffer.h" #include "td/utils/FlatHashSet.h" @@ -254,6 +257,41 @@ td_api::object_ptr<td_api::savedMessagesTag> ReactionManager::SavedReactionTag:: return td_api::make_object<td_api::savedMessagesTag>(reaction_type_.get_reaction_type_object(), title_, count_); } +template <class StorerT> +void ReactionManager::SavedReactionTag::store(StorerT &storer) const { + bool has_title = !title_.empty(); + bool has_count = count_ != 0; + BEGIN_STORE_FLAGS(); + STORE_FLAG(has_title); + STORE_FLAG(has_count); + END_STORE_FLAGS(); + td::store(reaction_type_, storer); + if (has_title) { + td::store(title_, storer); + } + if (has_count) { + td::store(count_, storer); + } +} + +template <class ParserT> +void ReactionManager::SavedReactionTag::parse(ParserT &parser) { + bool has_title; + bool has_count; + BEGIN_PARSE_FLAGS(); + PARSE_FLAG(has_title); + PARSE_FLAG(has_count); + END_PARSE_FLAGS(); + td::parse(reaction_type_, parser); + hash_ = reaction_type_.get_hash(); + if (has_title) { + td::parse(title_, parser); + } + if (has_count) { + td::parse(count_, parser); + } +} + bool operator==(const ReactionManager::SavedReactionTag &lhs, const ReactionManager::SavedReactionTag &rhs) { return lhs.reaction_type_ == rhs.reaction_type_ && lhs.title_ == rhs.title_ && lhs.count_ == rhs.count_; } @@ -362,6 +400,23 @@ int64 ReactionManager::SavedReactionTags::calc_hash() const { return get_vector_hash(numbers); } +template <class StorerT> +void ReactionManager::SavedReactionTags::store(StorerT &storer) const { + CHECK(is_inited_); + BEGIN_STORE_FLAGS(); + END_STORE_FLAGS(); + td::store(tags_, storer); +} + +template <class ParserT> +void ReactionManager::SavedReactionTags::parse(ParserT &parser) { + BEGIN_PARSE_FLAGS(); + END_PARSE_FLAGS(); + td::parse(tags_, parser); + hash_ = calc_hash(); + is_inited_ = true; +} + ReactionManager::ReactionManager(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) { } @@ -1002,6 +1057,10 @@ void ReactionManager::on_get_saved_messages_tags( } } +string ReactionManager::get_saved_messages_tags_database_key(SavedMessagesTopicId saved_messages_topic_id) { + return PSTRING() << "saved_messages_tags" << saved_messages_topic_id.get_unique_id(); +} + td_api::object_ptr<td_api::updateSavedMessagesTags> ReactionManager::get_update_saved_messages_tags_object( SavedMessagesTopicId saved_messages_topic_id, const SavedReactionTags *tags) const { CHECK(tags != nullptr); @@ -1010,8 +1069,12 @@ td_api::object_ptr<td_api::updateSavedMessagesTags> ReactionManager::get_update_ } void ReactionManager::send_update_saved_messages_tags(SavedMessagesTopicId saved_messages_topic_id, - const SavedReactionTags *tags) { + const SavedReactionTags *tags, bool from_database) { send_closure(G()->td(), &Td::send_update, get_update_saved_messages_tags_object(saved_messages_topic_id, tags)); + if (!from_database && G()->use_message_database()) { + G()->td_db()->get_sqlite_pmc()->set(get_saved_messages_tags_database_key(saved_messages_topic_id), + log_event_store(*tags).as_slice().str(), Promise<Unit>()); + } } void ReactionManager::on_update_saved_reaction_tags(Promise<Unit> &&promise) { |
