Add FileReferenceManager::get_file_info.
This commit is contained in:
parent
29f8f79b16
commit
4524ba0380
|
@ -508,6 +508,7 @@ set(TDLIB_SOURCE
|
||||||
td/telegram/Document.h
|
td/telegram/Document.h
|
||||||
td/telegram/DocumentsManager.h
|
td/telegram/DocumentsManager.h
|
||||||
td/telegram/DownloadManager.h
|
td/telegram/DownloadManager.h
|
||||||
|
td/telegram/DownloadsDb.h
|
||||||
td/telegram/DraftMessage.h
|
td/telegram/DraftMessage.h
|
||||||
td/telegram/EncryptedFile.h
|
td/telegram/EncryptedFile.h
|
||||||
td/telegram/FileReferenceManager.h
|
td/telegram/FileReferenceManager.h
|
||||||
|
|
|
@ -6,12 +6,12 @@
|
||||||
//
|
//
|
||||||
#include "td/telegram/DownloadManager.h"
|
#include "td/telegram/DownloadManager.h"
|
||||||
|
|
||||||
#include "td/utils/FlatHashMap.h"
|
|
||||||
|
|
||||||
#include "td/telegram/DownloadsDb.h"
|
#include "td/telegram/DownloadsDb.h"
|
||||||
#include "td/telegram/Global.h"
|
#include "td/telegram/Global.h"
|
||||||
#include "td/telegram/TdDb.h"
|
#include "td/telegram/TdDb.h"
|
||||||
|
|
||||||
|
#include "td/utils/FlatHashMap.h"
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
class DownloadManagerImpl final : public DownloadManager {
|
class DownloadManagerImpl final : public DownloadManager {
|
||||||
|
@ -50,7 +50,7 @@ class DownloadManagerImpl final : public DownloadManager {
|
||||||
return Status::Error("TODO: code and message`");
|
return Status::Error("TODO: code and message`");
|
||||||
}
|
}
|
||||||
for (auto &it : active_files_) {
|
for (auto &it : active_files_) {
|
||||||
toggle_is_paused(it.key(), is_paused);
|
toggle_is_paused(it.first, is_paused);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: update db
|
// TODO: update db
|
||||||
|
@ -132,7 +132,7 @@ class DownloadManagerImpl final : public DownloadManager {
|
||||||
TRY_RESULT_PROMISE(promise, offset_int64, to_integer_safe<int64>(offset));
|
TRY_RESULT_PROMISE(promise, offset_int64, to_integer_safe<int64>(offset));
|
||||||
// TODO: only active, only completed
|
// TODO: only active, only completed
|
||||||
G()->td_db()->get_downloads_db_async()->get_downloads_fts(DownloadsDbFtsQuery{query, offset_int64, limit},
|
G()->td_db()->get_downloads_db_async()->get_downloads_fts(DownloadsDbFtsQuery{query, offset_int64, limit},
|
||||||
[](Result<Unit>) {});
|
[](Result<DownloadsDbFtsResult>) {});
|
||||||
return promise.set_value({});
|
return promise.set_value({});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -247,7 +247,7 @@ class DownloadsDbAsync final : public DownloadsDbAsyncInterface {
|
||||||
promise.set_result(sync_db_->get_downloads_fts(std::move(query)));
|
promise.set_result(sync_db_->get_downloads_fts(std::move(query)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_active_downloads(Promise<> promise) {
|
void get_active_downloads(Promise<GetActiveDownloadsResult> promise) {
|
||||||
add_read_query();
|
add_read_query();
|
||||||
promise.set_result(sync_db_->get_active_downloads());
|
promise.set_result(sync_db_->get_active_downloads());
|
||||||
}
|
}
|
||||||
|
|
|
@ -394,4 +394,16 @@ void FileReferenceManager::reload_photo(PhotoSizeSource source, Promise<Unit> pr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FileReferenceManager::get_file_info(FileSourceId file_source_id, string unique_file_id,
|
||||||
|
Promise<FileSearchInfo> promise) {
|
||||||
|
auto index = static_cast<size_t>(file_source_id.get()) - 1;
|
||||||
|
CHECK(index < file_sources_.size());
|
||||||
|
file_sources_[index].visit(overloaded(
|
||||||
|
[&](const FileSourceMessage &source) {
|
||||||
|
send_closure_later(G()->messages_manager(), &MessagesManager::get_message_file_info, source.full_message_id,
|
||||||
|
std::move(unique_file_id), std::move(promise));
|
||||||
|
},
|
||||||
|
[&](const auto &source) { promise.set_error(Status::Error(500, "Unsupported file source")); }));
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
|
|
@ -32,6 +32,11 @@ class Td;
|
||||||
|
|
||||||
extern int VERBOSITY_NAME(file_references);
|
extern int VERBOSITY_NAME(file_references);
|
||||||
|
|
||||||
|
struct FileSearchInfo {
|
||||||
|
FileId file_id;
|
||||||
|
string search_text;
|
||||||
|
};
|
||||||
|
|
||||||
class FileReferenceManager final : public Actor {
|
class FileReferenceManager final : public Actor {
|
||||||
public:
|
public:
|
||||||
static bool is_file_reference_error(const Status &error);
|
static bool is_file_reference_error(const Status &error);
|
||||||
|
@ -55,6 +60,8 @@ class FileReferenceManager final : public Actor {
|
||||||
using NodeId = FileId;
|
using NodeId = FileId;
|
||||||
void repair_file_reference(NodeId node_id, Promise<> promise);
|
void repair_file_reference(NodeId node_id, Promise<> promise);
|
||||||
|
|
||||||
|
void get_file_info(FileSourceId file_source_id, string unique_file_id, Promise<FileSearchInfo> promise);
|
||||||
|
|
||||||
static void reload_photo(PhotoSizeSource source, Promise<Unit> promise);
|
static void reload_photo(PhotoSizeSource source, Promise<Unit> promise);
|
||||||
|
|
||||||
bool add_file_source(NodeId node_id, FileSourceId file_source_id);
|
bool add_file_source(NodeId node_id, FileSourceId file_source_id);
|
||||||
|
|
|
@ -39816,4 +39816,23 @@ void MessagesManager::add_message_file_to_downloads(FullMessageId full_message_i
|
||||||
promise.set_value(td_->file_manager_->get_file_object(file_id));
|
promise.set_value(td_->file_manager_->get_file_object(file_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MessagesManager::get_message_file_info(FullMessageId full_message_id, string unique_file_id,
|
||||||
|
Promise<FileSearchInfo> promise) {
|
||||||
|
auto m = get_message_force(full_message_id, "add_message_file_to_downloads");
|
||||||
|
if (m == nullptr) {
|
||||||
|
return promise.set_error(Status::Error(200, "Message not found"));
|
||||||
|
}
|
||||||
|
for (auto file_id : get_message_file_ids(m)) {
|
||||||
|
auto file_view = td_->file_manager_->get_file_view(file_id);
|
||||||
|
CHECK(!file_view.empty());
|
||||||
|
if (file_view.get_unique_file_id() == unique_file_id) {
|
||||||
|
FileSearchInfo info;
|
||||||
|
info.file_id = file_id;
|
||||||
|
info.search_text = get_message_search_text(m);
|
||||||
|
return promise.set_value(std::move(info));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return promise.set_error(Status::Error(200, "File not found"));
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
|
|
@ -90,6 +90,7 @@ struct Dependencies;
|
||||||
class DialogActionBar;
|
class DialogActionBar;
|
||||||
class DialogFilter;
|
class DialogFilter;
|
||||||
class DraftMessage;
|
class DraftMessage;
|
||||||
|
struct FileSearchInfo;
|
||||||
struct InputMessageContent;
|
struct InputMessageContent;
|
||||||
class MessageContent;
|
class MessageContent;
|
||||||
struct MessageReactions;
|
struct MessageReactions;
|
||||||
|
@ -983,6 +984,8 @@ class MessagesManager final : public Actor {
|
||||||
void add_message_file_to_downloads(FullMessageId full_message_id, FileId file_id, int32 priority,
|
void add_message_file_to_downloads(FullMessageId full_message_id, FileId file_id, int32 priority,
|
||||||
Promise<td_api::object_ptr<td_api::file>> promise);
|
Promise<td_api::object_ptr<td_api::file>> promise);
|
||||||
|
|
||||||
|
void get_message_file_info(FullMessageId full_message_id, string unique_file_id, Promise<FileSearchInfo> promise);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class PendingPtsUpdate {
|
class PendingPtsUpdate {
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user