From 894038a881f401b1d104a22978b19e6e9ad4daba Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 27 Dec 2018 18:37:57 +0300 Subject: [PATCH] Fix local_ready_size in om_partial_generate. GitOrigin-RevId: 614351cac5508589bd86ddf6be2c34b7e6c98585 --- td/telegram/files/FileManager.cpp | 15 +++++++++++---- td/telegram/files/FileManager.h | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/td/telegram/files/FileManager.cpp b/td/telegram/files/FileManager.cpp index d0413e99e..35dd9ab85 100644 --- a/td/telegram/files/FileManager.cpp +++ b/td/telegram/files/FileManager.cpp @@ -409,6 +409,8 @@ int64 FileView::local_total_size() const { case LocalFileLocation::Type::Full: return node_->size_; case LocalFileLocation::Type::Partial: + VLOG(update_file) << "Have local_ready_prefix_size = " << node_->local_ready_prefix_size_ + << " and local_ready_size = " << node_->local_ready_size_; return max(node_->local_ready_prefix_size_, node_->local_ready_size_); default: UNREACHABLE(); @@ -425,9 +427,12 @@ int64 FileView::remote_size() const { case RemoteFileLocation::Type::Full: return node_->size_; case RemoteFileLocation::Type::Partial: { - auto res = - max(static_cast(node_->remote_.partial().part_size_) * node_->remote_.partial().ready_part_count_, - node_->remote_ready_size_); + auto part_size = static_cast(node_->remote_.partial().part_size_); + auto ready_part_count = node_->remote_.partial().ready_part_count_; + auto remote_ready_size = node_->remote_ready_size_; + VLOG(update_file) << "Have part_size = " << part_size << ", remote_ready_part_count = " << ready_part_count + << ", remote_ready_size = " << remote_ready_size << ", size = " << size(); + auto res = max(part_size * ready_part_count, remote_ready_size); if (size() != 0 && size() < res) { res = size(); } @@ -2478,7 +2483,9 @@ void FileManager::on_partial_generate(QueryId query_id, const PartialLocalFileLo if (file_node->generate_id_ != query_id) { return; } - file_node->set_local_location(LocalFileLocation(partial_local), 0, -1, -1 /* TODO */); + auto ready_size = Bitmask(Bitmask::Decode{}, partial_local.ready_bitmask_) + .get_total_size(partial_local.part_size_, file_node->size_); + file_node->set_local_location(LocalFileLocation(partial_local), ready_size, -1, -1 /* TODO */); // TODO check for size and local_size, abort generation if needed if (expected_size > 0) { file_node->set_expected_size(expected_size); diff --git a/td/telegram/files/FileManager.h b/td/telegram/files/FileManager.h index 176541830..cb9fb5675 100644 --- a/td/telegram/files/FileManager.h +++ b/td/telegram/files/FileManager.h @@ -94,8 +94,8 @@ class FileNode { LocalFileLocation local_; FileLoadManager::QueryId upload_id_ = 0; - int64 local_ready_size_ = 0; int64 download_offset_ = 0; + int64 local_ready_size_ = 0; // PartialLocal only int64 local_ready_prefix_size_ = 0; // PartialLocal only RemoteFileLocation remote_;