From dd7fe47db83f49e27d8e4807cd816003be5500ac Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 24 May 2023 15:28:40 +0300 Subject: [PATCH] Add FileManager::copy_file_id. --- td/telegram/MessageContent.cpp | 6 +----- td/telegram/NotificationSettingsManager.cpp | 8 ++------ td/telegram/SecureManager.cpp | 7 +------ td/telegram/files/FileManager.cpp | 17 ++++++++++++++--- td/telegram/files/FileManager.h | 2 ++ 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/td/telegram/MessageContent.cpp b/td/telegram/MessageContent.cpp index e6bbd1bc3..c56f5a411 100644 --- a/td/telegram/MessageContent.cpp +++ b/td/telegram/MessageContent.cpp @@ -4806,11 +4806,7 @@ unique_ptr dup_message_content(Td *td, DialogId dialog_id, const auto fix_file_id = [dialog_id, to_secret, file_manager = td->file_manager_.get()](FileId file_id) { auto file_view = file_manager->get_file_view(file_id); if (to_secret && !file_view.is_encrypted_secret()) { - auto download_file_id = file_manager->dup_file_id(file_id, "dup_message_content to secret"); - file_id = file_manager - ->register_generate(FileType::Encrypted, FileLocationSource::FromServer, file_view.suggested_path(), - PSTRING() << "#file_id#" << download_file_id.get(), dialog_id, file_view.size()) - .ok(); + file_id = file_manager->copy_file_id(file_id, FileType::Encrypted, dialog_id, "copy message content to secret"); } return file_manager->dup_file_id(file_id, "dup_message_content"); }; diff --git a/td/telegram/NotificationSettingsManager.cpp b/td/telegram/NotificationSettingsManager.cpp index 7d413b177..cf887acaa 100644 --- a/td/telegram/NotificationSettingsManager.cpp +++ b/td/telegram/NotificationSettingsManager.cpp @@ -949,13 +949,9 @@ void NotificationSettingsManager::add_saved_ringtone(td_api::object_ptrfile_manager_->dup_file_id(file_id, "add_saved_ringtone"); - file_id = td_->file_manager_ - ->register_generate(FileType::Ringtone, FileLocationSource::FromServer, file_view.suggested_path(), - PSTRING() << "#file_id#" << download_file_id.get(), DialogId(), file_view.size()) - .ok(); + file_id = td_->file_manager_->copy_file_id(file_id, FileType::Ringtone, DialogId(), "add_saved_ringtone"); - upload_ringtone(file_id, false, std::move(promise)); + upload_ringtone(td_->file_manager_->dup_file_id(file_id, "add_saved_ringtone"), false, std::move(promise)); } void NotificationSettingsManager::upload_ringtone(FileId file_id, bool is_reupload, diff --git a/td/telegram/SecureManager.cpp b/td/telegram/SecureManager.cpp index 594a41f08..69dae9aaa 100644 --- a/td/telegram/SecureManager.cpp +++ b/td/telegram/SecureManager.cpp @@ -546,12 +546,7 @@ void SetSecureValue::start_upload(FileManager *file_manager, FileId &file_id, Se bool force = false; if (info.file_id.empty()) { if (!file_view.is_encrypted_secure()) { - auto download_file_id = file_manager->dup_file_id(file_id, "SetSecureValue"); - file_id = - file_manager - ->register_generate(FileType::SecureEncrypted, FileLocationSource::FromServer, file_view.suggested_path(), - PSTRING() << "#file_id#" << download_file_id.get(), DialogId(), file_view.size()) - .ok(); + file_id = file_manager->copy_file_id(file_id, FileType::SecureEncrypted, DialogId(), "SetSecureValue"); } info.file_id = file_manager->dup_file_id(file_id, "SetSecureValue"); diff --git a/td/telegram/files/FileManager.cpp b/td/telegram/files/FileManager.cpp index dded35b19..a91677174 100644 --- a/td/telegram/files/FileManager.cpp +++ b/td/telegram/files/FileManager.cpp @@ -1102,9 +1102,20 @@ FileId FileManager::dup_file_id(FileId file_id, const char *source) { if (!file_node) { return FileId(); } - auto result = FileId(create_file_id(file_node_id, file_node).get(), file_id.get_remote()); - LOG(INFO) << "Dup file " << file_id << " to " << result << " from " << source; - return result; + auto result_file_id = FileId(create_file_id(file_node_id, file_node).get(), file_id.get_remote()); + LOG(INFO) << "Dup file " << file_id << " to " << result_file_id << " from " << source; + return result_file_id; +} + +FileId FileManager::copy_file_id(FileId file_id, FileType file_type, DialogId owner_dialog_id, const char *source) { + auto file_view = get_file_view(file_id); + auto download_file_id = dup_file_id(file_id, source); + auto result_file_id = + register_generate(file_type, FileLocationSource::FromServer, file_view.suggested_path(), + PSTRING() << "#file_id#" << download_file_id.get(), owner_dialog_id, file_view.size()) + .ok(); + LOG(INFO) << "Copy file " << file_id << " to " << result_file_id << " from " << source; + return result_file_id; } FileId FileManager::create_file_id(int32 file_node_id, FileNode *file_node) { diff --git a/td/telegram/files/FileManager.h b/td/telegram/files/FileManager.h index 0898f11f2..8a73da915 100644 --- a/td/telegram/files/FileManager.h +++ b/td/telegram/files/FileManager.h @@ -425,6 +425,8 @@ class FileManager final : public FileLoadManager::Callback { FileId dup_file_id(FileId file_id, const char *source); + FileId copy_file_id(FileId file_id, FileType file_type, DialogId owner_dialog_id, const char *source); + void on_file_unlink(const FullLocalFileLocation &location); FileId register_empty(FileType type);