From f70498898bc5e046686c052fe89cbbbef819a75b Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 8 Oct 2021 13:41:22 +0300 Subject: [PATCH] Add fileSourceAppConfig. --- td/telegram/FileReferenceManager.cpp | 10 ++++++++++ td/telegram/FileReferenceManager.h | 6 +++++- td/telegram/FileReferenceManager.hpp | 5 ++++- td/telegram/StickersManager.cpp | 16 ++++++++++++++++ td/telegram/StickersManager.h | 4 ++++ 5 files changed, 39 insertions(+), 2 deletions(-) diff --git a/td/telegram/FileReferenceManager.cpp b/td/telegram/FileReferenceManager.cpp index a5382f3bf..51ea1394d 100644 --- a/td/telegram/FileReferenceManager.cpp +++ b/td/telegram/FileReferenceManager.cpp @@ -8,6 +8,7 @@ #include "td/telegram/AnimationsManager.h" #include "td/telegram/BackgroundManager.h" +#include "td/telegram/ConfigManager.h" #include "td/telegram/ContactsManager.h" #include "td/telegram/files/FileManager.h" #include "td/telegram/Global.h" @@ -58,6 +59,7 @@ fileSourceFavoriteStickers = FileSource; // repa fileSourceBackground background_id:int64 access_hash:int64 = FileSource; // repaired with account.getWallPaper fileSourceBasicGroupFull basic_group_id:int32 = FileSource; // repaired with messages.getFullChat fileSourceSupergroupFull supergroup_id:int32 = FileSource; // repaired with messages.getFullChannel +fileSourceAppConfig = FileSource; // repaired with help.getAppConfig, not reliable */ FileSourceId FileReferenceManager::get_current_file_source_id() const { @@ -117,6 +119,11 @@ FileSourceId FileReferenceManager::create_channel_full_file_source(ChannelId cha return add_file_source_id(source, PSLICE() << "full " << channel_id); } +FileSourceId FileReferenceManager::create_app_config_file_source() { + FileSourceAppConfig source; + return add_file_source_id(source, "app config"); +} + bool FileReferenceManager::add_file_source(NodeId node_id, FileSourceId file_source_id) { bool is_added = nodes_[node_id].file_source_ids.add(file_source_id); VLOG(file_references) << "Add " << (is_added ? "new" : "old") << ' ' << file_source_id << " for file " << node_id; @@ -290,6 +297,9 @@ void FileReferenceManager::send_query(Destination dest, FileSourceId file_source [&](const FileSourceChannelFull &source) { send_closure_later(G()->contacts_manager(), &ContactsManager::reload_channel_full, source.channel_id, std::move(promise), "repair file reference"); + }, + [&](const FileSourceAppConfig &source) { + send_closure_later(G()->config_manager(), &ConfigManager::reget_app_config, std::move(promise)); })); } diff --git a/td/telegram/FileReferenceManager.h b/td/telegram/FileReferenceManager.h index dc9234966..980df045d 100644 --- a/td/telegram/FileReferenceManager.h +++ b/td/telegram/FileReferenceManager.h @@ -51,6 +51,7 @@ class FileReferenceManager final : public Actor { FileSourceId create_background_file_source(BackgroundId background_id, int64 access_hash); FileSourceId create_chat_full_file_source(ChatId chat_id); FileSourceId create_channel_full_file_source(ChannelId channel_id); + FileSourceId create_app_config_file_source(); using NodeId = FileId; void repair_file_reference(NodeId node_id, Promise<> promise); @@ -132,12 +133,15 @@ class FileReferenceManager final : public Actor { struct FileSourceChannelFull { ChannelId channel_id; }; + struct FileSourceAppConfig { + // empty + }; // append only using FileSource = Variant; + FileSourceBackground, FileSourceChatFull, FileSourceChannelFull, FileSourceAppConfig>; vector file_sources_; int64 query_generation_{0}; diff --git a/td/telegram/FileReferenceManager.hpp b/td/telegram/FileReferenceManager.hpp index 7923f7439..516d73d73 100644 --- a/td/telegram/FileReferenceManager.hpp +++ b/td/telegram/FileReferenceManager.hpp @@ -49,7 +49,8 @@ void FileReferenceManager::store_file_source(FileSourceId file_source_id, Storer td::store(source.access_hash, storer); }, [&](const FileSourceChatFull &source) { td::store(source.chat_id, storer); }, - [&](const FileSourceChannelFull &source) { td::store(source.channel_id, storer); })); + [&](const FileSourceChannelFull &source) { td::store(source.channel_id, storer); }, + [&](const FileSourceAppConfig &source) {})); } template @@ -111,6 +112,8 @@ FileSourceId FileReferenceManager::parse_file_source(Td *td, ParserT &parser) { td::parse(channel_id, parser); return td->contacts_manager_->get_channel_full_file_source_id(channel_id); } + case 12: + return td->stickers_manager_->get_app_config_file_source_id(); default: parser.set_error("Invalid type in FileSource"); return FileSourceId(); diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index 8c8ca210e..0d6f72ef2 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -4096,7 +4096,13 @@ void StickersManager::on_update_emoji_sounds() { LOG(INFO) << "Change emoji sounds to " << emoji_sounds_str; emoji_sounds_str_ = std::move(emoji_sounds_str); + vector old_file_ids; + for (auto &emoji_sound : emoji_sounds_) { + old_file_ids.push_back(emoji_sound.second); + } emoji_sounds_.clear(); + + vector new_file_ids; auto sounds = full_split(Slice(emoji_sounds_str_), ','); CHECK(sounds.size() % 2 == 0); for (size_t i = 0; i < sounds.size(); i += 2) { @@ -4114,7 +4120,10 @@ void StickersManager::on_update_emoji_sounds() { FileLocationSource::FromServer, DialogId(), 0, expected_size, std::move(suggested_file_name)); CHECK(file_id.is_valid()); emoji_sounds_.emplace(remove_fitzpatrick_modifier(sounds[i]).str(), file_id); + new_file_ids.push_back(file_id); } + td_->file_manager_->change_files_source(get_app_config_file_source_id(), old_file_ids, new_file_ids); + try_update_animated_emoji_messages(); } @@ -6610,6 +6619,13 @@ int64 StickersManager::get_favorite_stickers_hash() const { return get_recent_stickers_hash(favorite_sticker_ids_); } +FileSourceId StickersManager::get_app_config_file_source_id() { + if (!app_config_file_source_id_.is_valid()) { + app_config_file_source_id_ = td_->file_reference_manager_->create_app_config_file_source(); + } + return app_config_file_source_id_; +} + FileSourceId StickersManager::get_favorite_stickers_file_source_id() { if (!favorite_stickers_file_source_id_.is_valid()) { favorite_stickers_file_source_id_ = td_->file_reference_manager_->create_favorite_stickers_file_source(); diff --git a/td/telegram/StickersManager.h b/td/telegram/StickersManager.h index 387591b62..d732aaea5 100644 --- a/td/telegram/StickersManager.h +++ b/td/telegram/StickersManager.h @@ -241,6 +241,8 @@ class StickersManager final : public Actor { void on_get_favorite_stickers_failed(bool is_repair, Status error); + FileSourceId get_app_config_file_source_id(); + FileSourceId get_favorite_stickers_file_source_id(); vector get_favorite_stickers(Promise &&promise); @@ -747,6 +749,8 @@ class StickersManager final : public Actor { vector favorite_sticker_file_ids_; FileSourceId favorite_stickers_file_source_id_; + FileSourceId app_config_file_source_id_; + vector archived_sticker_set_ids_[2]; int32 total_archived_sticker_set_count_[2] = {-1, -1};