tdlight/td/telegram/DownloadManager.h

83 lines
3.2 KiB
C
Raw Normal View History

2022-02-23 19:34:09 +01:00
//
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#pragma once
2022-02-25 14:18:23 +01:00
2022-02-23 19:34:09 +01:00
#include "td/telegram/files/FileId.h"
#include "td/telegram/files/FileManager.h"
2022-02-23 19:34:09 +01:00
#include "td/telegram/files/FileSourceId.h"
2022-02-25 13:11:10 +01:00
#include "td/telegram/td_api.h"
2022-02-25 14:18:23 +01:00
#include "td/actor/actor.h"
#include "td/actor/PromiseFuture.h"
2022-02-23 19:34:09 +01:00
#include "td/utils/common.h"
2022-02-25 14:18:23 +01:00
#include "td/utils/Status.h"
2022-02-23 19:34:09 +01:00
namespace td {
2022-02-25 14:18:23 +01:00
class DownloadManager : public Actor {
2022-02-23 19:34:09 +01:00
public:
struct Counters {
int64 total_size{};
int32 total_count{};
int64 downloaded_size{};
2022-02-25 15:57:08 +01:00
2022-02-26 19:55:12 +01:00
bool operator==(const Counters &other) const {
2022-02-26 21:54:01 +01:00
return total_size == other.total_size && total_count == other.total_count &&
downloaded_size == other.downloaded_size;
2022-02-26 19:55:12 +01:00
}
td_api::object_ptr<td_api::updateFileDownloads> get_update_file_downloads_object() const;
2022-02-26 19:55:12 +01:00
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
2022-02-23 19:34:09 +01:00
};
// to make DownloadManager testable all interactions with G() must be hidden in this probably monstrous interface
2022-02-23 19:34:09 +01:00
class Callback {
public:
virtual ~Callback() = default;
virtual void update_counters(Counters counters) = 0;
virtual void update_file_removed(FileId file_id) = 0;
virtual void start_file(FileId file_id, int8 priority, ActorShared<DownloadManager> download_manager) = 0;
2022-02-23 19:34:09 +01:00
virtual void pause_file(FileId file_id) = 0;
virtual void delete_file(FileId file_id) = 0;
virtual FileId dup_file_id(FileId file_id) = 0;
virtual FileView get_file_view(FileId file_id) = 0;
virtual td_api::object_ptr<td_api::fileDownload> get_file_download_object(FileId file_id,
FileSourceId file_source_id,
int32 add_date, int32 complete_date,
bool is_paused) = 0;
2022-02-23 19:34:09 +01:00
};
static unique_ptr<DownloadManager> create(unique_ptr<Callback> callback);
2022-02-23 19:34:09 +01:00
//
// public interface for user
//
2022-02-28 17:09:41 +01:00
virtual Status add_file(FileId file_id, FileSourceId file_source_id, string search_text, int8 priority) = 0;
virtual Status change_search_text(FileId file_id, FileSourceId file_source_id, string search_text) = 0;
2022-02-28 16:25:07 +01:00
virtual Status toggle_is_paused(FileId file_id, bool is_paused) = 0;
2022-02-25 13:11:10 +01:00
virtual Status toggle_all_is_paused(bool is_paused) = 0;
2022-02-28 16:25:07 +01:00
virtual void search(string query, bool only_active, bool only_completed, string offset, int32 limit,
Promise<td_api::object_ptr<td_api::foundFileDownloads>> promise) = 0;
2022-02-25 13:11:10 +01:00
virtual Status remove_file(FileId file_id, FileSourceId file_source_id, bool delete_from_cache) = 0;
virtual Status remove_all_files(bool only_active, bool only_completed, bool delete_from_cache) = 0;
2022-02-23 19:34:09 +01:00
//
// private interface to handle all kinds of updates
//
2022-02-28 16:25:07 +01:00
virtual void update_file_download_state(FileId internal_file_id, int64 download_size, int64 size, bool is_paused) = 0;
virtual void update_file_deleted(FileId internal_file_id) = 0;
2022-02-23 19:34:09 +01:00
};
2022-02-25 14:18:23 +01:00
} // namespace td