From 5a39bb4952171a9f78535bb6edd03aa67f64f497 Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 9 Feb 2023 18:31:02 +0300 Subject: [PATCH] Use error code returned by get_input_file_id. --- td/telegram/AnimationsManager.cpp | 15 +++---- td/telegram/BackgroundManager.cpp | 6 +-- td/telegram/CallActor.cpp | 7 +--- td/telegram/ContactsManager.cpp | 8 +--- td/telegram/InlineQueriesManager.cpp | 8 +--- td/telegram/MessageContent.cpp | 5 +-- td/telegram/MessagesManager.cpp | 25 ++++-------- td/telegram/NotificationSettingsManager.cpp | 8 +--- td/telegram/StickersManager.cpp | 44 ++++++--------------- td/telegram/Td.cpp | 2 +- td/telegram/files/FileManager.cpp | 18 ++++----- 11 files changed, 45 insertions(+), 101 deletions(-) diff --git a/td/telegram/AnimationsManager.cpp b/td/telegram/AnimationsManager.cpp index aef22c8c5..27aaf3b85 100644 --- a/td/telegram/AnimationsManager.cpp +++ b/td/telegram/AnimationsManager.cpp @@ -673,12 +673,10 @@ void AnimationsManager::add_saved_animation(const tl_object_ptrfile_manager_->get_input_file_id(FileType::Animation, input_file, DialogId(), false, false); - if (r_file_id.is_error()) { - return promise.set_error(Status::Error(400, r_file_id.error().message())); // TODO do not drop error code - } + TRY_RESULT_PROMISE(promise, file_id, + td_->file_manager_->get_input_file_id(FileType::Animation, input_file, DialogId(), false, false)); - add_saved_animation_impl(r_file_id.ok(), true, std::move(promise)); + add_saved_animation_impl(file_id, true, std::move(promise)); } void AnimationsManager::send_save_gif_query(FileId animation_id, bool unsave, Promise &&promise) { @@ -787,12 +785,9 @@ void AnimationsManager::remove_saved_animation(const tl_object_ptrfile_manager_->get_input_file_id(FileType::Animation, input_file, DialogId(), false, false); - if (r_file_id.is_error()) { - return promise.set_error(Status::Error(400, r_file_id.error().message())); // TODO do not drop error code - } + TRY_RESULT_PROMISE(promise, file_id, + td_->file_manager_->get_input_file_id(FileType::Animation, input_file, DialogId(), false, false)); - FileId file_id = r_file_id.ok(); auto is_equal = [animation_id = file_id](FileId file_id) { return file_id == animation_id || (file_id.get_remote() == animation_id.get_remote() && animation_id.get_remote() != 0); diff --git a/td/telegram/BackgroundManager.cpp b/td/telegram/BackgroundManager.cpp index dd510ee7a..48ed9c632 100644 --- a/td/telegram/BackgroundManager.cpp +++ b/td/telegram/BackgroundManager.cpp @@ -564,11 +564,7 @@ void BackgroundManager::send_update_selected_background(bool for_dark_theme) con } Result BackgroundManager::prepare_input_file(const tl_object_ptr &input_file) { - auto r_file_id = td_->file_manager_->get_input_file_id(FileType::Background, input_file, {}, false, false); - if (r_file_id.is_error()) { - return Status::Error(400, r_file_id.error().message()); - } - auto file_id = r_file_id.move_as_ok(); + TRY_RESULT(file_id, td_->file_manager_->get_input_file_id(FileType::Background, input_file, {}, false, false)); FileView file_view = td_->file_manager_->get_file_view(file_id); if (file_view.is_encrypted()) { diff --git a/td/telegram/CallActor.cpp b/td/telegram/CallActor.cpp index aba33be8e..9e330f54d 100644 --- a/td/telegram/CallActor.cpp +++ b/td/telegram/CallActor.cpp @@ -358,11 +358,8 @@ void CallActor::send_call_log(td_api::object_ptr log_file, Pr } auto *file_manager = G()->td().get_actor_unsafe()->file_manager_.get(); - auto r_file_id = file_manager->get_input_file_id(FileType::CallLog, log_file, DialogId(), false, false); - if (r_file_id.is_error()) { - return promise.set_error(Status::Error(400, r_file_id.error().message())); - } - auto file_id = r_file_id.move_as_ok(); + TRY_RESULT_PROMISE(promise, file_id, + file_manager->get_input_file_id(FileType::CallLog, log_file, DialogId(), false, false)); FileView file_view = file_manager->get_file_view(file_id); if (file_view.is_encrypted()) { diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index 38fd4dbdf..591c8b335 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -7158,12 +7158,8 @@ void ContactsManager::set_profile_photo_impl(UserId user_id, } auto file_type = is_animation ? FileType::Animation : FileType::Photo; - auto r_file_id = td_->file_manager_->get_input_file_id(file_type, *input_file, DialogId(user_id), false, false); - if (r_file_id.is_error()) { - // TODO promise.set_error(std::move(status)); - return promise.set_error(Status::Error(400, r_file_id.error().message())); - } - FileId file_id = r_file_id.ok(); + TRY_RESULT_PROMISE(promise, file_id, + td_->file_manager_->get_input_file_id(file_type, *input_file, DialogId(user_id), false, false)); CHECK(file_id.is_valid()); upload_profile_photo(user_id, td_->file_manager_->dup_file_id(file_id, "set_profile_photo_impl"), is_fallback, diff --git a/td/telegram/InlineQueriesManager.cpp b/td/telegram/InlineQueriesManager.cpp index ec487cc5b..0d0352499 100644 --- a/td/telegram/InlineQueriesManager.cpp +++ b/td/telegram/InlineQueriesManager.cpp @@ -861,12 +861,8 @@ Result> InlineQueriesManager:: } if (file_type != FileType::Temp && content_url.find('.') == string::npos) { - auto r_file_id = td_->file_manager_->get_input_file_id( - file_type, make_tl_object(content_url), DialogId(), false, false); - if (r_file_id.is_error()) { - return Status::Error(400, r_file_id.error().message()); - } - auto file_id = r_file_id.ok(); + TRY_RESULT(file_id, td_->file_manager_->get_input_file_id( + file_type, make_tl_object(content_url), DialogId(), false, false)); FileView file_view = td_->file_manager_->get_file_view(file_id); CHECK(file_view.has_remote_location()); if (file_view.is_encrypted()) { diff --git a/td/telegram/MessageContent.cpp b/td/telegram/MessageContent.cpp index c1cc1c1a5..660dab2ea 100644 --- a/td/telegram/MessageContent.cpp +++ b/td/telegram/MessageContent.cpp @@ -2298,10 +2298,7 @@ Result get_input_message_content( FileId file_id; if (have_file) { - if (r_file_id.is_error()) { - return Status::Error(400, r_file_id.error().message()); - } - file_id = r_file_id.ok(); + TRY_RESULT_ASSIGN(file_id, std::move(r_file_id)); CHECK(file_id.is_valid()); } diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index ef99ec750..837722a81 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -30108,12 +30108,8 @@ void MessagesManager::import_messages(DialogId dialog_id, const td_api::object_p Promise &&promise) { TRY_STATUS_PROMISE(promise, can_import_messages(dialog_id)); - auto r_file_id = td_->file_manager_->get_input_file_id(FileType::Document, message_file, dialog_id, false, false); - if (r_file_id.is_error()) { - // TODO TRY_RESULT_PROMISE(promise, ...); - return promise.set_error(Status::Error(400, r_file_id.error().message())); - } - FileId file_id = r_file_id.ok(); + TRY_RESULT_PROMISE(promise, file_id, + td_->file_manager_->get_input_file_id(FileType::Document, message_file, dialog_id, false, false)); vector attached_file_ids; attached_file_ids.reserve(attached_files.size()); @@ -30125,12 +30121,9 @@ void MessagesManager::import_messages(DialogId dialog_id, const td_api::object_p LOG(INFO) << "Skip attached file of type " << file_type; continue; } - auto r_attached_file_id = td_->file_manager_->get_input_file_id(file_type, attached_file, dialog_id, false, false); - if (r_attached_file_id.is_error()) { - // TODO TRY_RESULT_PROMISE(promise, ...); - return promise.set_error(Status::Error(400, r_attached_file_id.error().message())); - } - attached_file_ids.push_back(r_attached_file_id.ok()); + TRY_RESULT_PROMISE(promise, attached_file_id, + td_->file_manager_->get_input_file_id(file_type, attached_file, dialog_id, false, false)); + attached_file_ids.push_back(attached_file_id); } upload_imported_messages(dialog_id, td_->file_manager_->dup_file_id(file_id, "import_messages"), @@ -34681,12 +34674,8 @@ void MessagesManager::set_dialog_photo(DialogId dialog_id, const tl_object_ptrfile_manager_->get_input_file_id(file_type, *input_file, dialog_id, true, false); - if (r_file_id.is_error()) { - // TODO promise.set_error(std::move(status)); - return promise.set_error(Status::Error(400, r_file_id.error().message())); - } - FileId file_id = r_file_id.ok(); + TRY_RESULT_PROMISE(promise, file_id, + td_->file_manager_->get_input_file_id(file_type, *input_file, dialog_id, true, false)); if (!file_id.is_valid()) { send_edit_dialog_photo_query(dialog_id, FileId(), make_tl_object(), std::move(promise)); diff --git a/td/telegram/NotificationSettingsManager.cpp b/td/telegram/NotificationSettingsManager.cpp index 8b9948641..2ecbcde3f 100644 --- a/td/telegram/NotificationSettingsManager.cpp +++ b/td/telegram/NotificationSettingsManager.cpp @@ -885,12 +885,8 @@ void NotificationSettingsManager::add_saved_ringtone(td_api::object_ptrfile_manager_->get_input_file_id(FileType::Ringtone, input_file, DialogId(), false, false); - if (r_file_id.is_error()) { - // TODO promise.set_error(r_file_id.move_as_error()); - return promise.set_error(Status::Error(400, r_file_id.error().message())); - } - FileId file_id = r_file_id.ok(); + TRY_RESULT_PROMISE(promise, file_id, + td_->file_manager_->get_input_file_id(FileType::Ringtone, input_file, DialogId(), false, false)); auto file_view = td_->file_manager_->get_file_view(file_id); CHECK(!file_view.empty()); if (file_view.size() > td_->option_manager_->get_option_integer("notification_sound_size_max")) { diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index 42529651c..38d58c699 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -7902,11 +7902,7 @@ Result> StickersManager::prepare_i Result> StickersManager::prepare_input_file( const tl_object_ptr &input_file, StickerFormat format, StickerType type, bool for_thumbnail) { auto file_type = format == StickerFormat::Tgs ? FileType::Sticker : FileType::Document; - auto r_file_id = td_->file_manager_->get_input_file_id(file_type, input_file, DialogId(), for_thumbnail, false); - if (r_file_id.is_error()) { - return Status::Error(400, r_file_id.error().message()); - } - auto file_id = r_file_id.move_as_ok(); + TRY_RESULT(file_id, td_->file_manager_->get_input_file_id(file_type, input_file, DialogId(), for_thumbnail, false)); if (file_id.empty()) { return std::make_tuple(FileId(), false, false, StickerFormat::Unknown); } @@ -8518,12 +8514,8 @@ void StickersManager::on_sticker_set_thumbnail_uploaded(int64 random_id, Result< Result StickersManager::get_sticker_input_document( const tl_object_ptr &sticker) const { - auto r_file_id = td_->file_manager_->get_input_file_id(FileType::Sticker, sticker, DialogId(), false, false); - if (r_file_id.is_error()) { - return Status::Error(400, r_file_id.error().message()); // TODO do not drop error code - } + TRY_RESULT(file_id, td_->file_manager_->get_input_file_id(FileType::Sticker, sticker, DialogId(), false, false)); - auto file_id = r_file_id.move_as_ok(); auto file_view = td_->file_manager_->get_file_view(file_id); if (!file_view.has_remote_location() || !file_view.main_remote_location().is_document() || file_view.main_remote_location().is_web()) { @@ -8911,12 +8903,10 @@ void StickersManager::add_recent_sticker(bool is_attached, const tl_object_ptrfile_manager_->get_input_file_id(FileType::Sticker, input_file, DialogId(), false, false); - if (r_file_id.is_error()) { - return promise.set_error(Status::Error(400, r_file_id.error().message())); // TODO do not drop error code - } + TRY_RESULT_PROMISE(promise, file_id, + td_->file_manager_->get_input_file_id(FileType::Sticker, input_file, DialogId(), false, false)); - add_recent_sticker_impl(is_attached, r_file_id.ok(), true, std::move(promise)); + add_recent_sticker_impl(is_attached, file_id, true, std::move(promise)); } void StickersManager::send_save_recent_sticker_query(bool is_attached, FileId sticker_id, bool unsave, @@ -9018,13 +9008,10 @@ void StickersManager::remove_recent_sticker(bool is_attached, const tl_object_pt return; } - auto r_file_id = td_->file_manager_->get_input_file_id(FileType::Sticker, input_file, DialogId(), false, false); - if (r_file_id.is_error()) { - return promise.set_error(Status::Error(400, r_file_id.error().message())); // TODO do not drop error code - } + TRY_RESULT_PROMISE(promise, file_id, + td_->file_manager_->get_input_file_id(FileType::Sticker, input_file, DialogId(), false, false)); vector &sticker_ids = recent_sticker_ids_[is_attached]; - FileId file_id = r_file_id.ok(); if (!td::remove(sticker_ids, file_id)) { return promise.set_value(Unit()); } @@ -9305,12 +9292,10 @@ void StickersManager::add_favorite_sticker(const tl_object_ptrfile_manager_->get_input_file_id(FileType::Sticker, input_file, DialogId(), false, false); - if (r_file_id.is_error()) { - return promise.set_error(Status::Error(400, r_file_id.error().message())); // TODO do not drop error code - } + TRY_RESULT_PROMISE(promise, file_id, + td_->file_manager_->get_input_file_id(FileType::Sticker, input_file, DialogId(), false, false)); - add_favorite_sticker_impl(r_file_id.ok(), true, std::move(promise)); + add_favorite_sticker_impl(file_id, true, std::move(promise)); } void StickersManager::send_fave_sticker_query(FileId sticker_id, bool unsave, Promise &&promise) { @@ -9408,12 +9393,9 @@ void StickersManager::remove_favorite_sticker(const tl_object_ptrfile_manager_->get_input_file_id(FileType::Sticker, input_file, DialogId(), false, false); - if (r_file_id.is_error()) { - return promise.set_error(Status::Error(400, r_file_id.error().message())); // TODO do not drop error code - } + TRY_RESULT_PROMISE(promise, file_id, + td_->file_manager_->get_input_file_id(FileType::Sticker, input_file, DialogId(), false, false)); - FileId file_id = r_file_id.ok(); auto is_equal = [sticker_id = file_id](FileId file_id) { return file_id == sticker_id || (file_id.get_remote() == sticker_id.get_remote() && sticker_id.get_remote() != 0); }; @@ -9469,7 +9451,7 @@ vector StickersManager::get_sticker_emojis(const tl_object_ptr &&promise) { auto r_file_id = td_->file_manager_->get_input_file_id(FileType::Sticker, input_file, DialogId(), false, false); if (r_file_id.is_error()) { - promise.set_error(Status::Error(400, r_file_id.error().message())); // TODO do not drop error code + promise.set_error(r_file_id.move_as_error()); return {}; } diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 15e6486f4..a6fc59bfc 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -6686,7 +6686,7 @@ void Td::on_request(uint64 id, td_api::preliminaryUploadFile &request) { auto r_file_id = file_manager_->get_input_file_id(file_type, request.file_, DialogId(), false, is_secret, !is_secure && !is_secret, is_secure); if (r_file_id.is_error()) { - return send_error_raw(id, 400, r_file_id.error().message()); + return send_error_raw(id, r_file_id.error().code(), r_file_id.error().message()); } auto file_id = r_file_id.ok(); auto upload_file_id = file_manager_->dup_file_id(file_id, "preliminaryUploadFile"); diff --git a/td/telegram/files/FileManager.cpp b/td/telegram/files/FileManager.cpp index 71531de0c..1b7d96c44 100644 --- a/td/telegram/files/FileManager.cpp +++ b/td/telegram/files/FileManager.cpp @@ -1529,12 +1529,12 @@ void FileManager::do_cancel_generate(FileNodePtr node) { Status FileManager::merge(FileId x_file_id, FileId y_file_id, bool no_sync) { if (!x_file_id.is_valid()) { - return Status::Error("First file_id is invalid"); + return Status::Error(400, "First file_id is invalid"); } FileNodePtr x_node = no_sync ? get_file_node(x_file_id) : get_sync_file_node(x_file_id); if (!x_node) { - return Status::Error(PSLICE() << "Can't merge files. First identifier is invalid: " << x_file_id << " and " - << y_file_id); + return Status::Error( + 400, PSLICE() << "Can't merge files. First identifier is invalid: " << x_file_id << " and " << y_file_id); } if (!y_file_id.is_valid()) { @@ -1543,8 +1543,8 @@ Status FileManager::merge(FileId x_file_id, FileId y_file_id, bool no_sync) { } FileNodePtr y_node = get_file_node(y_file_id); if (!y_node) { - return Status::Error(PSLICE() << "Can't merge files. Second identifier is invalid: " << x_file_id << " and " - << y_file_id); + return Status::Error( + 400, PSLICE() << "Can't merge files. Second identifier is invalid: " << x_file_id << " and " << y_file_id); } if (x_file_id == x_node->upload_pause_) { @@ -1608,8 +1608,8 @@ Status FileManager::merge(FileId x_file_id, FileId y_file_id, bool no_sync) { if (size_i == -1) { try_flush_node_info(x_node, "merge 2"); try_flush_node_info(y_node, "merge 3"); - return Status::Error(PSLICE() << "Can't merge files. Different size: " << x_node->size_ << " and " - << y_node->size_); + return Status::Error( + 400, PSLICE() << "Can't merge files. Different size: " << x_node->size_ << " and " << y_node->size_); } if (encryption_key_i == -1) { if (nodes[remote_i]->remote_.full && nodes[local_i]->local_.type() != LocalFileLocation::Type::Partial) { @@ -1618,7 +1618,7 @@ Status FileManager::merge(FileId x_file_id, FileId y_file_id, bool no_sync) { } else { try_flush_node_info(x_node, "merge 4"); try_flush_node_info(y_node, "merge 5"); - return Status::Error("Can't merge files. Different encryption keys"); + return Status::Error(400, "Can't merge files. Different encryption keys"); } } @@ -3337,7 +3337,7 @@ Result FileManager::get_input_file_id(FileType type, const tl_object_ptr } default: UNREACHABLE(); - return Status::Error(500, "Unreachable"); + return FileId(); } }();