diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 69c9d04e5..63551ac3c 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -25267,7 +25267,7 @@ void MessagesManager::on_get_channel_dialog(DialogId dialog_id, MessageId last_m // There are many ways of handling a gap in a channel: // 1) Delete all known messages in the chat, begin from scratch. It is easy to implement, but suddenly disappearing // messages looks awful for the user. - // 2) Save all messages loaded in the memory until application restart, but delete all messages from database. + // 2) Save all messages loaded in the memory until application restart, but delete all messages from the database. // Messages left in the memory must be lazily updated using calls to getHistory. It looks much smoothly for the // user, he will need to redownload messages only after client restart. Unsynchronized messages left in the // memory shouldn't be saved to database, results of getHistory and getMessage must be used to update state of diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index 5fb715e06..0ed96fa3f 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -1272,11 +1272,13 @@ std::pair StickersManager::on_get_sticker_document( return {}; } + bool is_animated = document->mime_type_ == "application/x-tgsticker"; int64 document_id = document->id_; - FileId sticker_id = td_->file_manager_->register_remote( - FullRemoteFileLocation(FileType::Sticker, document_id, document->access_hash_, dc_id, - document->file_reference_.as_slice().str()), - FileLocationSource::FromServer, DialogId(), document->size_, 0, PSTRING() << document_id << ".webp"); + FileId sticker_id = + td_->file_manager_->register_remote(FullRemoteFileLocation(FileType::Sticker, document_id, document->access_hash_, + dc_id, document->file_reference_.as_slice().str()), + FileLocationSource::FromServer, DialogId(), document->size_, 0, + PSTRING() << document_id << (is_animated ? ".tgs" : ".webp")); PhotoSize thumbnail; for (auto &thumb : document->thumbs_) { @@ -1291,8 +1293,7 @@ std::pair StickersManager::on_get_sticker_document( } } - create_sticker(sticker_id, std::move(thumbnail), dimensions, std::move(sticker), - document->mime_type_ == "application/x-tgsticker", nullptr); + create_sticker(sticker_id, std::move(thumbnail), dimensions, std::move(sticker), is_animated, nullptr); return {document_id, sticker_id}; } diff --git a/td/telegram/files/FileManager.cpp b/td/telegram/files/FileManager.cpp index fbeb4117a..673d514a9 100644 --- a/td/telegram/files/FileManager.cpp +++ b/td/telegram/files/FileManager.cpp @@ -1343,16 +1343,16 @@ Result FileManager::merge(FileId x_file_id, FileId y_file_id, bool no_sy return Status::Error("Can't merge files. Different encryption keys"); } } - if (trusted_by_source == 0) { // if new is more trusted - if (remote_name_i == 2) { - remote_name_i = 0; - } - if (url_i == 2) { - url_i = 0; - } - if (expected_size_i == 2) { - expected_size_i = 0; - } + + // prefer more trusted source + if (remote_name_i == 2) { + remote_name_i = trusted_by_source; + } + if (url_i == 2) { + url_i = trusted_by_source; + } + if (expected_size_i == 2) { + expected_size_i = trusted_by_source; } int node_i =