From b676810b50fa8c1b5bd0090e8e5663b48d03deb6 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 20 Feb 2018 02:29:19 +0300 Subject: [PATCH] Use get_url_file_name whenever appropriate. GitOrigin-RevId: 4a1f408424883c56d2017f4239cae01987bd39c0 --- td/telegram/InlineQueriesManager.cpp | 4 +--- td/telegram/MessagesManager.cpp | 13 ++++++----- td/telegram/files/FileManager.cpp | 32 +++++++++++++--------------- td/telegram/files/FileManager.h | 4 ++-- tdutils/td/utils/HttpUrl.cpp | 11 ++++++++++ tdutils/td/utils/HttpUrl.h | 2 ++ tdutils/test/misc.cpp | 6 +++++- 7 files changed, 42 insertions(+), 30 deletions(-) diff --git a/td/telegram/InlineQueriesManager.cpp b/td/telegram/InlineQueriesManager.cpp index 403e33b8..3beef74c 100644 --- a/td/telegram/InlineQueriesManager.cpp +++ b/td/telegram/InlineQueriesManager.cpp @@ -1463,9 +1463,7 @@ void InlineQueriesManager::on_get_inline_query_results(UserId bot_user_id, uint6 continue; } auto file_id = r_file_id.move_as_ok(); - - auto url_path = http_url.query_.substr(0, http_url.query_.find_first_of("?#")); - auto file_name = PathView(url_path).file_name().str(); + auto file_name = get_url_query_file_name(http_url.query_); PhotoSize thumbnail; if (result->thumb_url_.find('.') != string::npos) { diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index ef361283..07597703 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -14242,12 +14242,10 @@ tl_object_ptr MessagesManager::get_input_web_doc auto file_view = td_->file_manager_->get_file_view(size.file_id); CHECK(file_view.has_url()); - // TODO right MIME type - // auto url_path = http_url.query_.substr(0, http_url.query_.find_first_of("?#")); - // auto file_name = PathView(url_path).file_name().str(); - - return make_tl_object(file_view.url(), size.size, "image/jpeg", - std::move(attributes)); + auto file_name = get_url_file_name(file_view.url()); + return make_tl_object( + file_view.url(), size.size, MimeType::from_extension(PathView(file_name).extension(), "image/jpeg"), + std::move(attributes)); } tl_object_ptr MessagesManager::get_input_media_invoice( @@ -15334,7 +15332,8 @@ Result MessagesManager::process_input_mess file_id = r_file_id.ok(); CHECK(file_id.is_valid()); file_view = td_->file_manager_->get_file_view(file_id); - const PathView path_view(file_view.suggested_name()); + auto suggested_name = file_view.suggested_name(); + const PathView path_view(suggested_name); file_name = path_view.file_name().str(); mime_type = MimeType::from_extension(path_view.extension()); } diff --git a/td/telegram/files/FileManager.cpp b/td/telegram/files/FileManager.cpp index f0be80f8..ba0adb3a 100644 --- a/td/telegram/files/FileManager.cpp +++ b/td/telegram/files/FileManager.cpp @@ -232,24 +232,22 @@ void FileNode::on_info_flushed() { info_changed_flag_ = false; } -CSlice FileNode::suggested_name() const { +string FileNode::suggested_name() const { if (!remote_name_.empty()) { return remote_name_; } - CSlice local_name(local_.file_name()); - if (!local_name.empty()) { - return local_name; - } if (!url_.empty()) { - return url_; - } - if (generate_ != nullptr) { - CSlice generate_name(generate_->original_path_); - if (!generate_name.empty()) { - return generate_name; + auto file_name = get_url_file_name(url_); + if (!file_name.empty()) { + return file_name; } } - return CSlice(); + if (generate_ != nullptr) { + if (!generate_->original_path_.empty()) { + return generate_->original_path_; + } + } + return local_.file_name().str(); } /*** FileView ***/ @@ -360,7 +358,7 @@ const string &FileView::remote_name() const { return node_->remote_name_; } -CSlice FileView::suggested_name() const { +string FileView::suggested_name() const { return node_->suggested_name(); } @@ -1302,7 +1300,7 @@ bool FileManager::set_content(FileId file_id, BufferSlice bytes) { node->download_id_ = id; node->is_download_started_ = true; send_closure(file_load_manager_, &FileLoadManager::from_bytes, id, node->remote_.full().file_type_, std::move(bytes), - node->suggested_name().str()); + node->suggested_name()); return true; } @@ -1452,7 +1450,7 @@ void FileManager::run_download(FileNodePtr node) { node->download_id_ = id; node->is_download_started_ = false; send_closure(file_load_manager_, &FileLoadManager::download, id, node->remote_.full(), node->local_, node->size_, - node->suggested_name().str(), node->encryption_key_, priority); + node->suggested_name(), node->encryption_key_, priority); } void FileManager::resume_upload(FileId file_id, std::vector bad_parts, std::shared_ptr callback, @@ -1595,7 +1593,7 @@ void FileManager::run_generate(FileNodePtr node) { QueryId id = queries_container_.create(Query{file_id, Query::Generate}); node->generate_id_ = id; send_closure(file_generate_manager_, &FileGenerateManager::generate_file, id, *node->generate_, node->local_, - node->suggested_name().str(), [file_manager = this, id] { + node->suggested_name(), [file_manager = this, id] { class Callback : public FileGenerateCallback { ActorId actor_; uint64 query_id_; @@ -2082,7 +2080,7 @@ void FileManager::on_upload_ok(QueryId query_id, FileType file_type, const Parti file_info->download_priority_ = 0; FileView file_view(file_node); - string file_name = get_file_name(file_type, file_view.has_local_location() ? file_view.local_location().path_ : ""); + string file_name = get_file_name(file_type, file_view.suggested_name()); if (file_view.is_encrypted()) { tl_object_ptr input_file; diff --git a/td/telegram/files/FileManager.h b/td/telegram/files/FileManager.h index 3466d918..4caf995d 100644 --- a/td/telegram/files/FileManager.h +++ b/td/telegram/files/FileManager.h @@ -73,7 +73,7 @@ class FileNode { void on_pmc_flushed(); void on_info_flushed(); - CSlice suggested_name() const; + string suggested_name() const; private: friend class FileView; @@ -183,7 +183,7 @@ class FileView { const string &remote_name() const; - CSlice suggested_name() const; + string suggested_name() const; DialogId owner_dialog_id() const; diff --git a/tdutils/td/utils/HttpUrl.cpp b/tdutils/td/utils/HttpUrl.cpp index 7e3c3ba4..55b66f7b 100644 --- a/tdutils/td/utils/HttpUrl.cpp +++ b/tdutils/td/utils/HttpUrl.cpp @@ -175,4 +175,15 @@ string get_url_query_file_name(const string &query) { return query_slice.str(); } +string get_url_file_name(const string &url) { + // TODO remove copy + string url_copy = url; + auto r_http_url = parse_url(url_copy); + if (r_http_url.is_error()) { + LOG(WARNING) << "Receive wrong URL \"" << url << '"'; + return string(); + } + return get_url_query_file_name(r_http_url.ok().query_); +} + } // namespace td diff --git a/tdutils/td/utils/HttpUrl.h b/tdutils/td/utils/HttpUrl.h index 39851867..f7d1e4aa 100644 --- a/tdutils/td/utils/HttpUrl.h +++ b/tdutils/td/utils/HttpUrl.h @@ -34,4 +34,6 @@ StringBuilder &operator<<(StringBuilder &sb, const HttpUrl &url); string get_url_query_file_name(const string &query); +string get_url_file_name(const string &url); + } // namespace td diff --git a/tdutils/test/misc.cpp b/tdutils/test/misc.cpp index 20f7e96d..dd1f1ec4 100644 --- a/tdutils/test/misc.cpp +++ b/tdutils/test/misc.cpp @@ -243,7 +243,11 @@ TEST(Misc, to_double) { } static void test_get_url_query_file_name_one(const char *prefix, const char *suffix, const char *file_name) { - ASSERT_STREQ(file_name, get_url_query_file_name(string(prefix) + string(file_name) + string(suffix))); + auto path = string(prefix) + string(file_name) + string(suffix); + ASSERT_STREQ(file_name, get_url_query_file_name(path)); + ASSERT_STREQ(file_name, get_url_file_name("http://telegram.org" + path)); + ASSERT_STREQ(file_name, get_url_file_name("http://telegram.org:80" + path)); + ASSERT_STREQ(file_name, get_url_file_name("telegram.org" + path)); } TEST(Misc, get_url_query_file_name) {