From 8ac921b8e725f85f40e95d9226694f2ec5800014 Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 21 Jan 2019 20:19:02 +0300 Subject: [PATCH] Add FileManager::get_file_ids_object. GitOrigin-RevId: a7e76f5e28514e2ccd99ce2316d5e4043836062f --- td/telegram/AnimationsManager.cpp | 2 +- td/telegram/StickersManager.cpp | 7 +++---- td/telegram/files/FileManager.cpp | 24 ++++++++++++++++++------ td/telegram/files/FileManager.h | 5 +++-- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/td/telegram/AnimationsManager.cpp b/td/telegram/AnimationsManager.cpp index c3a4570c1..f8f3bb423 100644 --- a/td/telegram/AnimationsManager.cpp +++ b/td/telegram/AnimationsManager.cpp @@ -709,7 +709,7 @@ void AnimationsManager::remove_saved_animation(const tl_object_ptr AnimationsManager::get_update_saved_animations_object() const { return td_api::make_object( - transform(saved_animation_ids_, [](FileId animation_id) { return animation_id.get(); })); + td_->file_manager_->get_file_ids_object(saved_animation_ids_)); } void AnimationsManager::send_update_saved_animations(bool from_database) { diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index b4605d3bb..f06ac6b57 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -3857,8 +3857,7 @@ void StickersManager::clear_recent_stickers(bool is_attached, Promise &&pr td_api::object_ptr StickersManager::get_update_recent_stickers_object( int is_attached) const { return td_api::make_object( - is_attached != 0, - transform(recent_sticker_ids_[is_attached], [](FileId sticker_id) { return sticker_id.get(); })); + is_attached != 0, td_->file_manager_->get_file_ids_object(recent_sticker_ids_[is_attached])); } void StickersManager::send_update_recent_stickers(bool from_database) { @@ -4177,8 +4176,8 @@ void StickersManager::remove_favorite_sticker(const tl_object_ptr StickersManager::get_update_favorite_stickers_object() const { - return make_tl_object( - transform(favorite_sticker_ids_, [](FileId sticker_id) { return sticker_id.get(); })); + return td_api::make_object( + td_->file_manager_->get_file_ids_object(favorite_sticker_ids_)); } void StickersManager::send_update_favorite_stickers(bool from_database) { diff --git a/td/telegram/files/FileManager.cpp b/td/telegram/files/FileManager.cpp index 66d07b4fe..e49ad44ac 100644 --- a/td/telegram/files/FileManager.cpp +++ b/td/telegram/files/FileManager.cpp @@ -758,9 +758,10 @@ FileId FileManager::create_file_id(int32 file_node_id, FileNode *file_node) { file_node->file_ids_.push_back(file_id); return file_id; } + void FileManager::try_forget_file_id(FileId file_id) { auto *info = get_file_id_info(file_id); - if (info->send_updates_flag_ || info->pin_flag_) { + if (info->send_updates_flag_ || info->pin_flag_ || info->sent_file_id_flag_) { return; } auto file_node = get_file_node(file_id); @@ -2216,7 +2217,7 @@ FileView FileManager::get_sync_file_view(FileId file_id) { return FileView(file_node); } -tl_object_ptr FileManager::get_file_object(FileId file_id, bool with_main_file_id) { +td_api::object_ptr FileManager::get_file_object(FileId file_id, bool with_main_file_id) { auto file_view = get_sync_file_view(file_id); if (file_view.empty()) { @@ -2265,10 +2266,21 @@ tl_object_ptr FileManager::get_file_object(FileId file_id, bool wi is_uploading_completed, remote_size)); } -vector> FileManager::get_files_object(const vector &file_ids, - bool with_main_file_id) { - return transform(file_ids, - [this, with_main_file_id](FileId file_id) { return get_file_object(file_id, with_main_file_id); }); +vector FileManager::get_file_ids_object(const vector &file_ids, bool with_main_file_id) { + return transform(file_ids, [this, with_main_file_id](FileId file_id) { + auto file_view = get_sync_file_view(file_id); + auto result_file_id = file_id; + auto *file_info = get_file_id_info(result_file_id); + if (with_main_file_id) { + if (!file_info->sent_file_id_flag_ && !file_info->send_updates_flag_) { + result_file_id = file_view.file_id(); + } + file_info = get_file_id_info(file_view.file_id()); + } + file_info->sent_file_id_flag_ = true; + + return result_file_id.get(); + }); } Result FileManager::check_input_file_id(FileType type, Result result, bool is_encrypted, diff --git a/td/telegram/files/FileManager.h b/td/telegram/files/FileManager.h index 363eaa768..42c6d5418 100644 --- a/td/telegram/files/FileManager.h +++ b/td/telegram/files/FileManager.h @@ -379,8 +379,8 @@ class FileManager : public FileLoadManager::Callback { Result from_persistent_id(CSlice persistent_id, FileType file_type) TD_WARN_UNUSED_RESULT; FileView get_file_view(FileId file_id) const; FileView get_sync_file_view(FileId file_id); - tl_object_ptr get_file_object(FileId file_id, bool with_main_file_id = true); - vector> get_files_object(const vector &file_ids, bool with_main_file_id = true); + td_api::object_ptr get_file_object(FileId file_id, bool with_main_file_id = true); + vector get_file_ids_object(const vector &file_ids, bool with_main_file_id = true); Result get_input_thumbnail_file_id(const tl_object_ptr &thumb_input_file, DialogId owner_dialog_id, bool is_encrypted) TD_WARN_UNUSED_RESULT; @@ -428,6 +428,7 @@ class FileManager : public FileLoadManager::Callback { FileNodeId node_id_{0}; bool send_updates_flag_{false}; bool pin_flag_{false}; + bool sent_file_id_flag_{false}; int8 download_priority_{0}; int8 upload_priority_{0};