Add FileCounters to download manager updates.
This commit is contained in:
parent
5f8f41b7d6
commit
89c6b72c8b
@ -3954,16 +3954,17 @@ updateFileGenerationStop generation_id:int64 = Update;
|
||||
//@downloaded_size Total downloaded size of files in the file download list, in bytes
|
||||
updateFileDownloads total_size:int53 total_count:int32 downloaded_size:int53 = Update;
|
||||
|
||||
//@description A file was added to the file download list. This update is sent only after file download list is loaded for the first time @file_download The added file download
|
||||
updateFileAddedToDownloads file_download:fileDownload = Update;
|
||||
//@description A file was added to the file download list. This update is sent only after file download list is loaded for the first time @file_download The added file download @counts New number of being downloaded and recently downloaded files found
|
||||
updateFileAddedToDownloads file_download:fileDownload counts:downloadedFileCounts = Update;
|
||||
|
||||
//@description A file download was changed. This update is sent only after file download list is loaded for the first time @file_id File identifier
|
||||
//@complete_date Point in time (Unix timestamp) when the file downloading was completed; 0 if the file downloading isn't completed
|
||||
//@is_paused True, if downloading of the file is paused
|
||||
updateFileDownload file_id:int32 complete_date:int32 is_paused:Bool = Update;
|
||||
//@counts New number of being downloaded and recently downloaded files found
|
||||
updateFileDownload file_id:int32 complete_date:int32 is_paused:Bool counts:downloadedFileCounts = Update;
|
||||
|
||||
//@description A file was removed from the file download list. This update is sent only after file download list is loaded for the first time @file_id File identifier
|
||||
updateFileRemovedFromDownloads file_id:int32 = Update;
|
||||
//@description A file was removed from the file download list. This update is sent only after file download list is loaded for the first time @file_id File identifier @counts New number of being downloaded and recently downloaded files found
|
||||
updateFileRemovedFromDownloads file_id:int32 counts:downloadedFileCounts = Update;
|
||||
|
||||
//@description New call was created or information about a call was updated @call New data about a call
|
||||
updateCall call:call = Update;
|
||||
|
@ -118,7 +118,7 @@ class DownloadManagerImpl final : public DownloadManager {
|
||||
remove_from_database(file_info);
|
||||
files_.erase(download_id);
|
||||
if (is_search_inited_) {
|
||||
callback_->update_file_removed(file_id);
|
||||
callback_->update_file_removed(file_id, file_counters_);
|
||||
}
|
||||
|
||||
update_counters();
|
||||
@ -299,6 +299,7 @@ class DownloadManagerImpl final : public DownloadManager {
|
||||
return;
|
||||
}
|
||||
|
||||
bool need_update = false;
|
||||
with_file_info(file_info, [&](FileInfo &file_info) {
|
||||
file_info.size = size;
|
||||
file_info.expected_size = expected_size;
|
||||
@ -306,12 +307,12 @@ class DownloadManagerImpl final : public DownloadManager {
|
||||
if (is_paused && file_info.is_paused != is_paused) {
|
||||
file_info.is_paused = is_paused;
|
||||
file_info.need_save_to_database = true;
|
||||
|
||||
if (is_search_inited_) {
|
||||
callback_->update_file_changed(file_info.file_id, file_info.completed_at, file_info.is_paused);
|
||||
}
|
||||
need_update = true;
|
||||
}
|
||||
});
|
||||
if (is_search_inited_ && need_update) {
|
||||
callback_->update_file_changed(file_info.file_id, file_info.completed_at, file_info.is_paused, file_counters_);
|
||||
}
|
||||
}
|
||||
|
||||
void update_file_deleted(FileId internal_file_id) final {
|
||||
@ -369,6 +370,7 @@ class DownloadManagerImpl final : public DownloadManager {
|
||||
|
||||
Counters counters_;
|
||||
Counters sent_counters_;
|
||||
FileCounters file_counters_;
|
||||
bool is_inited_{false};
|
||||
bool is_database_loaded_{false};
|
||||
bool is_search_inited_{false};
|
||||
@ -576,7 +578,7 @@ class DownloadManagerImpl final : public DownloadManager {
|
||||
}
|
||||
if (is_search_inited_) {
|
||||
callback_->update_file_added(it->second->file_id, it->second->file_source_id, it->second->created_at,
|
||||
it->second->completed_at, it->second->is_paused);
|
||||
it->second->completed_at, it->second->is_paused, file_counters_);
|
||||
}
|
||||
}
|
||||
|
||||
@ -623,7 +625,7 @@ class DownloadManagerImpl final : public DownloadManager {
|
||||
callback_->start_file(file_info.internal_file_id, file_info.priority, actor_shared(this, file_info.link_token));
|
||||
}
|
||||
if (is_search_inited_) {
|
||||
callback_->update_file_changed(file_info.file_id, file_info.completed_at, file_info.is_paused);
|
||||
callback_->update_file_changed(file_info.file_id, file_info.completed_at, file_info.is_paused, file_counters_);
|
||||
}
|
||||
}
|
||||
|
||||
@ -689,11 +691,23 @@ class DownloadManagerImpl final : public DownloadManager {
|
||||
counters_.total_size -= get_file_size(file_info);
|
||||
counters_.total_count--;
|
||||
}
|
||||
if (is_completed(file_info)) {
|
||||
file_counters_.completed_count--;
|
||||
CHECK(file_counters_.completed_count >= 0);
|
||||
} else {
|
||||
if (file_info.is_paused) {
|
||||
file_counters_.paused_count--;
|
||||
CHECK(file_counters_.paused_count >= 0);
|
||||
}
|
||||
file_counters_.active_count--;
|
||||
CHECK(file_counters_.active_count >= file_counters_.paused_count);
|
||||
}
|
||||
}
|
||||
|
||||
void register_file_info(FileInfo &file_info) {
|
||||
CHECK(!file_info.is_registered);
|
||||
file_info.is_registered = true;
|
||||
bool need_update = false;
|
||||
if (!is_completed(file_info) && file_info.size != 0 && file_info.downloaded_size == file_info.size) {
|
||||
LOG(INFO) << "Register file " << file_info.file_id;
|
||||
file_info.is_paused = false;
|
||||
@ -706,15 +720,24 @@ class DownloadManagerImpl final : public DownloadManager {
|
||||
unviewed_completed_download_ids_.insert(file_info.download_id);
|
||||
}
|
||||
|
||||
if (is_search_inited_) {
|
||||
callback_->update_file_changed(file_info.file_id, file_info.completed_at, file_info.is_paused);
|
||||
}
|
||||
need_update = true;
|
||||
}
|
||||
if (file_info.is_counted && (is_completed(file_info) || !file_info.is_paused)) {
|
||||
counters_.downloaded_size += file_info.downloaded_size;
|
||||
counters_.total_size += get_file_size(file_info);
|
||||
counters_.total_count++;
|
||||
}
|
||||
if (is_completed(file_info)) {
|
||||
file_counters_.completed_count++;
|
||||
} else {
|
||||
if (file_info.is_paused) {
|
||||
file_counters_.paused_count++;
|
||||
}
|
||||
file_counters_.active_count++;
|
||||
}
|
||||
if (is_search_inited_ && need_update) {
|
||||
callback_->update_file_changed(file_info.file_id, file_info.completed_at, file_info.is_paused, file_counters_);
|
||||
}
|
||||
sync_with_database(file_info);
|
||||
update_counters();
|
||||
CHECK(file_info.is_registered);
|
||||
|
@ -65,9 +65,9 @@ class DownloadManager : public Actor {
|
||||
virtual ~Callback() = default;
|
||||
virtual void update_counters(Counters counters) = 0;
|
||||
virtual void update_file_added(FileId file_id, FileSourceId file_source_id, int32 add_date, int32 complete_date,
|
||||
bool is_paused) = 0;
|
||||
virtual void update_file_changed(FileId file_id, int32 complete_date, bool is_paused) = 0;
|
||||
virtual void update_file_removed(FileId file_id) = 0;
|
||||
bool is_paused, FileCounters counters) = 0;
|
||||
virtual void update_file_changed(FileId file_id, int32 complete_date, bool is_paused, FileCounters counters) = 0;
|
||||
virtual void update_file_removed(FileId file_id, FileCounters counters) = 0;
|
||||
virtual void start_file(FileId file_id, int8 priority, ActorShared<DownloadManager> download_manager) = 0;
|
||||
virtual void pause_file(FileId file_id) = 0;
|
||||
virtual void delete_file(FileId file_id) = 0;
|
||||
|
@ -23,20 +23,25 @@ void DownloadManagerCallback::update_counters(DownloadManager::Counters counters
|
||||
}
|
||||
|
||||
void DownloadManagerCallback::update_file_added(FileId file_id, FileSourceId file_source_id, int32 add_date,
|
||||
int32 complete_date, bool is_paused) {
|
||||
int32 complete_date, bool is_paused,
|
||||
DownloadManager::FileCounters counters) {
|
||||
send_closure(td_->actor_id(td_), &Td::send_update,
|
||||
td_api::make_object<td_api::updateFileAddedToDownloads>(
|
||||
get_file_download_object(file_id, file_source_id, add_date, complete_date, is_paused)));
|
||||
get_file_download_object(file_id, file_source_id, add_date, complete_date, is_paused),
|
||||
counters.get_downloaded_file_counts_object()));
|
||||
}
|
||||
|
||||
void DownloadManagerCallback::update_file_changed(FileId file_id, int32 complete_date, bool is_paused) {
|
||||
void DownloadManagerCallback::update_file_changed(FileId file_id, int32 complete_date, bool is_paused,
|
||||
DownloadManager::FileCounters counters) {
|
||||
send_closure(td_->actor_id(td_), &Td::send_update,
|
||||
td_api::make_object<td_api::updateFileDownload>(file_id.get(), complete_date, is_paused));
|
||||
td_api::make_object<td_api::updateFileDownload>(file_id.get(), complete_date, is_paused,
|
||||
counters.get_downloaded_file_counts_object()));
|
||||
}
|
||||
|
||||
void DownloadManagerCallback::update_file_removed(FileId file_id) {
|
||||
void DownloadManagerCallback::update_file_removed(FileId file_id, DownloadManager::FileCounters counters) {
|
||||
send_closure(td_->actor_id(td_), &Td::send_update,
|
||||
td_api::make_object<td_api::updateFileRemovedFromDownloads>(file_id.get()));
|
||||
td_api::make_object<td_api::updateFileRemovedFromDownloads>(
|
||||
file_id.get(), counters.get_downloaded_file_counts_object()));
|
||||
}
|
||||
|
||||
void DownloadManagerCallback::start_file(FileId file_id, int8 priority, ActorShared<DownloadManager> download_manager) {
|
||||
|
@ -27,11 +27,12 @@ class DownloadManagerCallback final : public DownloadManager::Callback {
|
||||
void update_counters(DownloadManager::Counters counters) final;
|
||||
|
||||
void update_file_added(FileId file_id, FileSourceId file_source_id, int32 add_date, int32 complete_date,
|
||||
bool is_paused) final;
|
||||
bool is_paused, DownloadManager::FileCounters counters) final;
|
||||
|
||||
void update_file_changed(FileId file_id, int32 complete_date, bool is_paused) final;
|
||||
void update_file_changed(FileId file_id, int32 complete_date, bool is_paused,
|
||||
DownloadManager::FileCounters counters) final;
|
||||
|
||||
void update_file_removed(FileId file_id) final;
|
||||
void update_file_removed(FileId file_id, DownloadManager::FileCounters counters) final;
|
||||
|
||||
void start_file(FileId file_id, int8 priority, ActorShared<DownloadManager> download_manager) final;
|
||||
|
||||
|
@ -4064,9 +4064,9 @@ void Td::send_update(tl_object_ptr<td_api::Update> &&object) {
|
||||
case td_api::updateChatAction::ID / 2:
|
||||
case td_api::updateChatFilters::ID / 2:
|
||||
case td_api::updateChatPosition::ID / 2:
|
||||
case td_api::updateFileAddedToDownloads::ID:
|
||||
case td_api::updateFileDownload::ID:
|
||||
case td_api::updateFileRemovedFromDownloads::ID:
|
||||
case td_api::updateFileAddedToDownloads::ID / 2:
|
||||
case td_api::updateFileDownload::ID / 2:
|
||||
case td_api::updateFileRemovedFromDownloads::ID / 2:
|
||||
LOG(ERROR) << "Sending update: " << oneline(to_string(object));
|
||||
break;
|
||||
default:
|
||||
|
Loading…
Reference in New Issue
Block a user