Proxy some updates about file to DownloadManger.
This commit is contained in:
parent
da436915c1
commit
d4a4f5fb5d
@ -3972,11 +3972,10 @@ void Td::init_managers() {
|
|||||||
country_info_manager_actor_ = register_actor("CountryInfoManager", country_info_manager_.get());
|
country_info_manager_actor_ = register_actor("CountryInfoManager", country_info_manager_.get());
|
||||||
download_manager_ = DownloadManager::create();
|
download_manager_ = DownloadManager::create();
|
||||||
download_manager_actor_ = register_actor("DownloadManager", download_manager_.get());
|
download_manager_actor_ = register_actor("DownloadManager", download_manager_.get());
|
||||||
// TODO: move this callback somewhere else
|
|
||||||
class DownloadManagerCallback final : public DownloadManager::Callback {
|
class DownloadManagerCallback final : public DownloadManager::Callback {
|
||||||
public:
|
public:
|
||||||
DownloadManagerCallback(ActorShared<> parent, std::shared_ptr<DownloadFileCallback> download_file_callback)
|
DownloadManagerCallback(ActorShared<> parent, ActorId<DownloadManager> download_manager)
|
||||||
: parent_(std::move(parent)), download_file_callback_(std::move(download_file_callback)) {
|
: parent_(std::move(parent)), download_manager_(download_manager) {
|
||||||
}
|
}
|
||||||
void update_counters(DownloadManager::Counters counters) final {
|
void update_counters(DownloadManager::Counters counters) final {
|
||||||
send_closure(G()->td(), &Td::send_update, counters.to_td_api());
|
send_closure(G()->td(), &Td::send_update, counters.to_td_api());
|
||||||
@ -4005,10 +4004,37 @@ void Td::init_managers() {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
ActorShared<> parent_;
|
ActorShared<> parent_;
|
||||||
std::shared_ptr<DownloadFileCallback> download_file_callback_;
|
ActorId<DownloadManager> download_manager_;
|
||||||
|
std::shared_ptr<FileManager::DownloadCallback> download_file_callback_;
|
||||||
|
std::shared_ptr<FileManager::DownloadCallback> make_download_file_callback() {
|
||||||
|
if (!download_file_callback_) {
|
||||||
|
class Impl : public FileManager::DownloadCallback {
|
||||||
|
public:
|
||||||
|
Impl(ActorId<DownloadManager> download_manager) : download_manager_(download_manager_) {
|
||||||
|
}
|
||||||
|
void on_progress(FileId file_id) final {
|
||||||
|
auto view = G()->file_manager().get_actor_unsafe()->get_file_view(file_id);
|
||||||
|
send_closure(download_manager_, &DownloadManager::update_file_download_state, file_id,
|
||||||
|
view.local_total_size(), view.size(), !view.is_downloading());
|
||||||
|
// TODO: handle deleted state?
|
||||||
|
}
|
||||||
|
void on_download_ok(FileId file_id) final {
|
||||||
|
on_progress(file_id);
|
||||||
|
}
|
||||||
|
void on_download_error(FileId file_id, Status error) {
|
||||||
|
on_progress(file_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
ActorId<DownloadManager> download_manager_;
|
||||||
|
};
|
||||||
|
download_file_callback_ = std::make_shared<Impl>(download_manager_);
|
||||||
|
}
|
||||||
|
return download_file_callback_;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
send_closure_later(download_manager_actor_, &DownloadManager::set_callback,
|
send_closure_later(download_manager_actor_, &DownloadManager::set_callback,
|
||||||
td::make_unique<DownloadManagerCallback>(create_reference(), download_file_callback_));
|
td::make_unique<DownloadManagerCallback>(create_reference(), download_manager_actor_.get()));
|
||||||
|
|
||||||
game_manager_ = make_unique<GameManager>(this, create_reference());
|
game_manager_ = make_unique<GameManager>(this, create_reference());
|
||||||
game_manager_actor_ = register_actor("GameManager", game_manager_.get());
|
game_manager_actor_ = register_actor("GameManager", game_manager_.get());
|
||||||
|
@ -1809,6 +1809,10 @@ void FileManager::try_flush_node_info(FileNodePtr node, const char *source) {
|
|||||||
VLOG(update_file) << "Send UpdateFile about file " << file_id << " from " << source;
|
VLOG(update_file) << "Send UpdateFile about file " << file_id << " from " << source;
|
||||||
context_->on_file_updated(file_id);
|
context_->on_file_updated(file_id);
|
||||||
}
|
}
|
||||||
|
if (info->download_callback_) {
|
||||||
|
// For DownloadManger. For everybody else it is just an empty function call (I hope).
|
||||||
|
info->download_callback_->on_progress(file_id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
node->on_info_flushed();
|
node->on_info_flushed();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user