diff --git a/td/telegram/files/FileDownloader.cpp b/td/telegram/files/FileDownloader.cpp index 1df2eac7..ec60d150 100644 --- a/td/telegram/files/FileDownloader.cpp +++ b/td/telegram/files/FileDownloader.cpp @@ -134,7 +134,7 @@ Status FileDownloader::on_ok(int64 size) { TRY_RESULT(perm_path, create_from_temp(path_, dir, name_)); path = std::move(perm_path); } - callback_->on_ok(FullLocalFileLocation(remote_.file_type_, std::move(path), 0), size); + callback_->on_ok(FullLocalFileLocation(remote_.file_type_, std::move(path), 0), size, !only_check_); return Status::OK(); } void FileDownloader::on_error(Status status) { diff --git a/td/telegram/files/FileDownloader.h b/td/telegram/files/FileDownloader.h index 6d3eb9e0..969f959d 100644 --- a/td/telegram/files/FileDownloader.h +++ b/td/telegram/files/FileDownloader.h @@ -29,7 +29,7 @@ class FileDownloader : public FileLoader { public: virtual void on_start_download() = 0; virtual void on_partial_download(const PartialLocalFileLocation &partial_local, int64 ready_size, int64 size) = 0; - virtual void on_ok(const FullLocalFileLocation &full_local, int64 size) = 0; + virtual void on_ok(const FullLocalFileLocation &full_local, int64 size, bool is_new) = 0; virtual void on_error(Status status) = 0; }; diff --git a/td/telegram/files/FileLoadManager.cpp b/td/telegram/files/FileLoadManager.cpp index 4bf3a818..d40af725 100644 --- a/td/telegram/files/FileLoadManager.cpp +++ b/td/telegram/files/FileLoadManager.cpp @@ -220,14 +220,14 @@ void FileLoadManager::on_partial_upload(const PartialRemoteFileLocation &partial } } -void FileLoadManager::on_ok_download(const FullLocalFileLocation &local, int64 size) { +void FileLoadManager::on_ok_download(const FullLocalFileLocation &local, int64 size, bool is_new) { auto node_id = get_link_token(); auto node = nodes_container_.get(node_id); if (node == nullptr) { return; } if (!stop_flag_) { - send_closure(callback_, &Callback::on_download_ok, node->query_id_, local, size); + send_closure(callback_, &Callback::on_download_ok, node->query_id_, local, size, is_new); } close_node(node_id); loop(); diff --git a/td/telegram/files/FileLoadManager.h b/td/telegram/files/FileLoadManager.h index 9ad3346e..142429ec 100644 --- a/td/telegram/files/FileLoadManager.h +++ b/td/telegram/files/FileLoadManager.h @@ -42,7 +42,7 @@ class FileLoadManager final : public Actor { virtual void on_hash(QueryId id, string hash) = 0; virtual void on_upload_ok(QueryId id, FileType file_type, const PartialRemoteFileLocation &remtoe, int64 size) = 0; virtual void on_upload_full_ok(QueryId id, const FullRemoteFileLocation &remote) = 0; - virtual void on_download_ok(QueryId id, const FullLocalFileLocation &local, int64 size) = 0; + virtual void on_download_ok(QueryId id, const FullLocalFileLocation &local, int64 size, bool is_new) = 0; virtual void on_error(QueryId id, Status status) = 0; }; @@ -89,7 +89,7 @@ class FileLoadManager final : public Actor { void on_partial_download(const PartialLocalFileLocation &partial_local, int64 ready_size, int64 size); void on_partial_upload(const PartialRemoteFileLocation &partial_remote, int64 ready_size); void on_hash(string hash); - void on_ok_download(const FullLocalFileLocation &local, int64 size); + void on_ok_download(const FullLocalFileLocation &local, int64 size, bool is_new); void on_ok_upload(FileType file_type, const PartialRemoteFileLocation &remote, int64 size); void on_ok_upload_full(const FullRemoteFileLocation &remote); void on_error(Status status); @@ -109,8 +109,8 @@ class FileLoadManager final : public Actor { void on_partial_download(const PartialLocalFileLocation &partial_local, int64 ready_size, int64 size) override { send_closure(actor_id_, &FileLoadManager::on_partial_download, partial_local, ready_size, size); } - void on_ok(const FullLocalFileLocation &full_local, int64 size) override { - send_closure(std::move(actor_id_), &FileLoadManager::on_ok_download, full_local, size); + void on_ok(const FullLocalFileLocation &full_local, int64 size, bool is_new) override { + send_closure(std::move(actor_id_), &FileLoadManager::on_ok_download, full_local, size, is_new); } void on_error(Status status) override { send_closure(std::move(actor_id_), &FileLoadManager::on_error, std::move(status)); @@ -163,7 +163,7 @@ class FileLoadManager final : public Actor { ActorShared actor_id_; void on_ok(const FullLocalFileLocation &full_local, int64 size) override { - send_closure(std::move(actor_id_), &FileLoadManager::on_ok_download, full_local, size); + send_closure(std::move(actor_id_), &FileLoadManager::on_ok_download, full_local, size, true); } void on_error(Status status) override { send_closure(std::move(actor_id_), &FileLoadManager::on_error, std::move(status)); diff --git a/td/telegram/files/FileManager.cpp b/td/telegram/files/FileManager.cpp index ec50fd6d..cb8a516f 100644 --- a/td/telegram/files/FileManager.cpp +++ b/td/telegram/files/FileManager.cpp @@ -2381,19 +2381,21 @@ void FileManager::on_partial_upload(QueryId query_id, const PartialRemoteFileLoc try_flush_node(file_node, "on_partial_upload"); } -void FileManager::on_download_ok(QueryId query_id, const FullLocalFileLocation &local, int64 size) { +void FileManager::on_download_ok(QueryId query_id, const FullLocalFileLocation &local, int64 size, bool is_new) { if (is_closed_) { return; } auto query = finish_query(query_id).first; auto file_id = query.file_id_; - LOG(INFO) << "ON DOWNLOAD OK file " << file_id << " of size " << size; + LOG(INFO) << "ON DOWNLOAD OK of " << (is_new ? "new" : "checked") << " file " << file_id << " of size " << size; auto r_new_file_id = register_local(local, DialogId(), size); if (r_new_file_id.is_error()) { LOG(ERROR) << "Can't register local file after download: " << r_new_file_id.error(); } else { - context_->on_new_file(size, 1); + if (is_new) { + context_->on_new_file(size, 1); + } LOG_STATUS(merge(r_new_file_id.ok(), file_id)); } } diff --git a/td/telegram/files/FileManager.h b/td/telegram/files/FileManager.h index a7417945..4449b453 100644 --- a/td/telegram/files/FileManager.h +++ b/td/telegram/files/FileManager.h @@ -502,7 +502,7 @@ class FileManager : public FileLoadManager::Callback { int64 size) override; void on_hash(QueryId query_id, string hash) override; void on_partial_upload(QueryId query_id, const PartialRemoteFileLocation &partial_remote, int64 ready_size) override; - void on_download_ok(QueryId query_id, const FullLocalFileLocation &local, int64 size) override; + void on_download_ok(QueryId query_id, const FullLocalFileLocation &local, int64 size, bool is_new) override; void on_upload_ok(QueryId query_id, FileType file_type, const PartialRemoteFileLocation &partial_remote, int64 size) override; void on_upload_full_ok(QueryId query_id, const FullRemoteFileLocation &remote) override;