Make FileManager::Query::Type enum class.

GitOrigin-RevId: 031229295e1d6e41e0569363d0262e7ce83832c4
This commit is contained in:
levlam 2019-12-23 17:32:03 +03:00
parent a2cf11ddc9
commit 1a9fe6a40d
2 changed files with 42 additions and 13 deletions

View File

@ -50,6 +50,8 @@ namespace {
constexpr int64 MAX_FILE_SIZE = 1500 * (1 << 20) /* 1500MB */; constexpr int64 MAX_FILE_SIZE = 1500 * (1 << 20) /* 1500MB */;
} // namespace } // namespace
int VERBOSITY_NAME(update_file) = VERBOSITY_NAME(INFO);
StringBuilder &operator<<(StringBuilder &string_builder, FileLocationSource source) { StringBuilder &operator<<(StringBuilder &string_builder, FileLocationSource source) {
switch (source) { switch (source) {
case FileLocationSource::None: case FileLocationSource::None:
@ -68,6 +70,30 @@ StringBuilder &operator<<(StringBuilder &string_builder, FileLocationSource sour
} }
} }
StringBuilder &operator<<(StringBuilder &string_builder, FileManager::Query::Type type) {
switch (type) {
case FileManager::Query::Type::UploadByHash:
return string_builder << "UploadByHash";
case FileManager::Query::Type::UploadWaitFileReference:
return string_builder << "UploadWaitFileReference";
case FileManager::Query::Type::Upload:
return string_builder << "Upload";
case FileManager::Query::Type::DownloadWaitFileReferece:
return string_builder << "DownloadWaitFileReferece";
case FileManager::Query::Type::DownloadReloadDialog:
return string_builder << "DownloadReloadDialog";
case FileManager::Query::Type::Download:
return string_builder << "Download";
case FileManager::Query::Type::SetContent:
return string_builder << "SetContent";
case FileManager::Query::Type::Generate:
return string_builder << "Generate";
default:
UNREACHABLE();
return string_builder << "Unknown";
}
}
NewRemoteFileLocation::NewRemoteFileLocation(RemoteFileLocation remote, FileLocationSource source) { NewRemoteFileLocation::NewRemoteFileLocation(RemoteFileLocation remote, FileLocationSource source) {
switch (remote.type()) { switch (remote.type()) {
case RemoteFileLocation::Type::Empty: case RemoteFileLocation::Type::Empty:
@ -92,8 +118,6 @@ RemoteFileLocation NewRemoteFileLocation::partial_or_empty() const {
return {}; return {};
} }
int VERBOSITY_NAME(update_file) = VERBOSITY_NAME(INFO);
FileNode *FileNodePtr::operator->() const { FileNode *FileNodePtr::operator->() const {
return get(); return get();
} }
@ -1859,7 +1883,7 @@ bool FileManager::set_content(FileId file_id, BufferSlice bytes) {
node->set_download_priority(FROM_BYTES_PRIORITY); node->set_download_priority(FROM_BYTES_PRIORITY);
QueryId id = queries_container_.create(Query{file_id, Query::SetContent}); QueryId id = queries_container_.create(Query{file_id, Query::Type::SetContent});
node->download_id_ = id; node->download_id_ = id;
node->is_download_started_ = true; node->is_download_started_ = true;
send_closure(file_load_manager_, &FileLoadManager::from_bytes, id, node->remote_.full.value().file_type_, send_closure(file_load_manager_, &FileLoadManager::from_bytes, id, node->remote_.full.value().file_type_,
@ -2125,7 +2149,7 @@ void FileManager::run_download(FileNodePtr node) {
if (node->need_reload_photo_ && file_view.may_reload_photo()) { if (node->need_reload_photo_ && file_view.may_reload_photo()) {
LOG(INFO) << "Reload photo from file " << node->main_file_id_; LOG(INFO) << "Reload photo from file " << node->main_file_id_;
QueryId id = queries_container_.create(Query{file_id, Query::DownloadReloadDialog}); QueryId id = queries_container_.create(Query{file_id, Query::Type::DownloadReloadDialog});
node->download_id_ = id; node->download_id_ = id;
context_->reload_photo(file_view.remote_location().get_source(), context_->reload_photo(file_view.remote_location().get_source(),
PromiseCreator::lambda([id, actor_id = actor_id(this), file_id](Result<Unit> res) { PromiseCreator::lambda([id, actor_id = actor_id(this), file_id](Result<Unit> res) {
@ -2146,7 +2170,7 @@ void FileManager::run_download(FileNodePtr node) {
// If file reference is needed // If file reference is needed
if (!file_view.has_active_download_remote_location()) { if (!file_view.has_active_download_remote_location()) {
VLOG(file_references) << "Do not have valid file_reference for file " << file_id; VLOG(file_references) << "Do not have valid file_reference for file " << file_id;
QueryId id = queries_container_.create(Query{file_id, Query::DownloadWaitFileReferece}); QueryId id = queries_container_.create(Query{file_id, Query::Type::DownloadWaitFileReferece});
node->download_id_ = id; node->download_id_ = id;
if (node->download_was_update_file_reference_) { if (node->download_was_update_file_reference_) {
on_error(id, Status::Error("Can't download file: have no valid file reference")); on_error(id, Status::Error("Can't download file: have no valid file reference"));
@ -2168,7 +2192,7 @@ void FileManager::run_download(FileNodePtr node) {
return; return;
} }
QueryId id = queries_container_.create(Query{file_id, Query::Download}); QueryId id = queries_container_.create(Query{file_id, Query::Type::Download});
node->download_id_ = id; node->download_id_ = id;
node->is_download_started_ = false; node->is_download_started_ = false;
LOG(INFO) << "Run download of file " << file_id << " of size " << node->size_ << " from " LOG(INFO) << "Run download of file " << file_id << " of size " << node->size_ << " from "
@ -2511,7 +2535,7 @@ void FileManager::run_generate(FileNodePtr node) {
return; return;
} }
QueryId id = queries_container_.create(Query{file_id, Query::Generate}); QueryId id = queries_container_.create(Query{file_id, Query::Type::Generate});
node->generate_id_ = id; node->generate_id_ = id;
send_closure(file_generate_manager_, &FileGenerateManager::generate_file, id, *node->generate_, node->local_, send_closure(file_generate_manager_, &FileGenerateManager::generate_file, id, *node->generate_, node->local_,
node->suggested_name(), [file_manager = this, id] { node->suggested_name(), [file_manager = this, id] {
@ -2612,7 +2636,7 @@ void FileManager::run_upload(FileNodePtr node, std::vector<int> bad_parts) {
if (file_view.has_alive_remote_location() && !file_view.has_active_upload_remote_location() && if (file_view.has_alive_remote_location() && !file_view.has_active_upload_remote_location() &&
file_view.get_type() != FileType::Thumbnail && file_view.get_type() != FileType::EncryptedThumbnail && file_view.get_type() != FileType::Thumbnail && file_view.get_type() != FileType::EncryptedThumbnail &&
file_view.get_type() != FileType::Background) { file_view.get_type() != FileType::Background) {
QueryId id = queries_container_.create(Query{file_id, Query::UploadWaitFileReference}); QueryId id = queries_container_.create(Query{file_id, Query::Type::UploadWaitFileReference});
node->upload_id_ = id; node->upload_id_ = id;
if (node->upload_was_update_file_reference_) { if (node->upload_was_update_file_reference_) {
on_error(id, Status::Error("Can't upload file: have no valid file reference")); on_error(id, Status::Error("Can't upload file: have no valid file reference"));
@ -2629,7 +2653,7 @@ void FileManager::run_upload(FileNodePtr node, std::vector<int> bad_parts) {
if (!node->remote_.partial && node->get_by_hash_) { if (!node->remote_.partial && node->get_by_hash_) {
LOG(INFO) << "Get file " << node->main_file_id_ << " by hash"; LOG(INFO) << "Get file " << node->main_file_id_ << " by hash";
QueryId id = queries_container_.create(Query{file_id, Query::UploadByHash}); QueryId id = queries_container_.create(Query{file_id, Query::Type::UploadByHash});
node->upload_id_ = id; node->upload_id_ = id;
send_closure(file_load_manager_, &FileLoadManager::upload_by_hash, id, node->local_.full(), node->size_, send_closure(file_load_manager_, &FileLoadManager::upload_by_hash, id, node->local_.full(), node->size_,
@ -2640,7 +2664,7 @@ void FileManager::run_upload(FileNodePtr node, std::vector<int> bad_parts) {
auto new_priority = narrow_cast<int8>(bad_parts.empty() ? -priority : priority); auto new_priority = narrow_cast<int8>(bad_parts.empty() ? -priority : priority);
td::remove_if(bad_parts, [](auto part_id) { return part_id < 0; }); td::remove_if(bad_parts, [](auto part_id) { return part_id < 0; });
QueryId id = queries_container_.create(Query{file_id, Query::Upload}); QueryId id = queries_container_.create(Query{file_id, Query::Type::Upload});
node->upload_id_ = id; node->upload_id_ = id;
send_closure(file_load_manager_, &FileLoadManager::upload, id, node->local_, node->remote_.partial_or_empty(), send_closure(file_load_manager_, &FileLoadManager::upload, id, node->local_, node->remote_.partial_or_empty(),
file_view.expected_size(true), node->encryption_key_, new_priority, std::move(bad_parts)); file_view.expected_size(true), node->encryption_key_, new_priority, std::move(bad_parts));
@ -3427,7 +3451,7 @@ void FileManager::on_error(QueryId query_id, Status status) {
return; return;
} }
if (query.type_ == Query::UploadByHash && !G()->close_flag()) { if (query.type_ == Query::Type::UploadByHash && !G()->close_flag()) {
LOG(INFO) << "Upload By Hash failed: " << status << ", restart upload"; LOG(INFO) << "Upload By Hash failed: " << status << ", restart upload";
node->get_by_hash_ = false; node->get_by_hash_ = false;
run_upload(node, {}); run_upload(node, {});
@ -3436,7 +3460,7 @@ void FileManager::on_error(QueryId query_id, Status status) {
on_error_impl(node, query.type_, was_active, std::move(status)); on_error_impl(node, query.type_, was_active, std::move(status));
} }
void FileManager::on_error_impl(FileNodePtr node, FileManager::Query::Type type, bool was_active, Status status) { void FileManager::on_error_impl(FileNodePtr node, Query::Type type, bool was_active, Status status) {
SCOPE_EXIT { SCOPE_EXIT {
try_flush_node(node, "on_error"); try_flush_node(node, "on_error");
}; };

View File

@ -485,12 +485,14 @@ class FileManager : public FileLoadManager::Callback {
bool force); bool force);
static constexpr int8 FROM_BYTES_PRIORITY = 10; static constexpr int8 FROM_BYTES_PRIORITY = 10;
using FileNodeId = int32; using FileNodeId = int32;
using QueryId = FileLoadManager::QueryId; using QueryId = FileLoadManager::QueryId;
class Query { class Query {
public: public:
FileId file_id_; FileId file_id_;
enum Type : int32 { enum class Type : int32 {
UploadByHash, UploadByHash,
UploadWaitFileReference, UploadWaitFileReference,
Upload, Upload,
@ -501,6 +503,9 @@ class FileManager : public FileLoadManager::Callback {
Generate Generate
} type_; } type_;
}; };
friend StringBuilder &operator<<(StringBuilder &string_builder, Query::Type type);
struct FileIdInfo { struct FileIdInfo {
FileNodeId node_id_{0}; FileNodeId node_id_{0};
bool send_updates_flag_{false}; bool send_updates_flag_{false};