From df900c867c8343efcf3691445e256041bc97203e Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 1 Jun 2018 01:21:35 +0300 Subject: [PATCH] Better merge_choose: prefer new. GitOrigin-RevId: 9d737eeda18ece2cceb98f6e9f1dd95c0bd8294a --- td/telegram/files/FileManager.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/td/telegram/files/FileManager.cpp b/td/telegram/files/FileManager.cpp index f060a2f7..ebb38182 100644 --- a/td/telegram/files/FileManager.cpp +++ b/td/telegram/files/FileManager.cpp @@ -961,6 +961,8 @@ Result FileManager::merge(FileId x_file_id, FileId y_file_id, bool no_sy FileNodePtr nodes[] = {x_node, y_node, x_node}; FileNodeId node_ids[] = {get_file_id_info(x_file_id)->node_id_, get_file_id_info(y_file_id)->node_id_}; + int trusted_by_source = + static_cast(static_cast(x_node->remote_source_) < static_cast(y_node->remote_source_)); int local_i = merge_choose(x_node->local_, y_node->local_); int remote_i = merge_choose(x_node->remote_, static_cast(x_node->remote_source_), y_node->remote_, @@ -989,6 +991,17 @@ 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; + } + } int node_i = std::make_tuple(y_node->pmc_id_ != 0, x_node->pmc_id_, y_node->file_ids_.size(), main_file_id_i == 1) > std::make_tuple(x_node->pmc_id_ != 0, y_node->pmc_id_, x_node->file_ids_.size(), main_file_id_i == 0);