diff --git a/td/telegram/files/FileLocation.h b/td/telegram/files/FileLocation.h index d1980befb..7c8a4ea5c 100644 --- a/td/telegram/files/FileLocation.h +++ b/td/telegram/files/FileLocation.h @@ -192,32 +192,17 @@ class FullRemoteFileLocation { if (is_web()) { return LocationType::Web; } - switch (file_type_) { - case FileType::Photo: - case FileType::ProfilePhoto: - case FileType::Thumbnail: - case FileType::EncryptedThumbnail: - case FileType::Wallpaper: + switch (get_file_type_class(file_type_)) { + case FileTypeClass::Photo: return LocationType::Photo; - case FileType::Video: - case FileType::VoiceNote: - case FileType::Document: - case FileType::Sticker: - case FileType::Audio: - case FileType::Animation: - case FileType::Encrypted: - case FileType::VideoNote: - case FileType::SecureRaw: - case FileType::Secure: - case FileType::Background: - case FileType::DocumentAsFile: - case FileType::Ringtone: + case FileTypeClass::Document: + case FileTypeClass::Secure: + case FileTypeClass::Encrypted: return LocationType::Common; - case FileType::None: - case FileType::Size: + case FileTypeClass::Temp: + return LocationType::None; default: UNREACHABLE(); - case FileType::Temp: return LocationType::None; } } diff --git a/td/telegram/files/FileLocation.hpp b/td/telegram/files/FileLocation.hpp index 30b485804..751a6deb1 100644 --- a/td/telegram/files/FileLocation.hpp +++ b/td/telegram/files/FileLocation.hpp @@ -289,37 +289,7 @@ void FullRemoteFileLocation::AsUnique::store(StorerT &storer) const { if (key->is_web()) { return 0; } - switch (key->file_type_) { - case FileType::Photo: - case FileType::ProfilePhoto: - case FileType::Thumbnail: - case FileType::EncryptedThumbnail: - case FileType::Wallpaper: - return 1; - case FileType::Video: - case FileType::VoiceNote: - case FileType::Document: - case FileType::Sticker: - case FileType::Audio: - case FileType::Animation: - case FileType::VideoNote: - case FileType::Background: - case FileType::DocumentAsFile: - case FileType::Ringtone: - return 2; - case FileType::SecureRaw: - case FileType::Secure: - return 3; - case FileType::Encrypted: - return 4; - case FileType::Temp: - return 5; - case FileType::None: - case FileType::Size: - default: - UNREACHABLE(); - return -1; - } + return static_cast(get_file_type_class(key->file_type_)) + 1; }(); store(type, storer); key.variant_.visit([&](auto &&value) { diff --git a/td/telegram/files/FileType.cpp b/td/telegram/files/FileType.cpp index 645e1ebe5..489da1c36 100644 --- a/td/telegram/files/FileType.cpp +++ b/td/telegram/files/FileType.cpp @@ -160,24 +160,44 @@ CSlice get_file_type_name(FileType file_type) { } } -bool is_document_file_type(FileType file_type) { +FileTypeClass get_file_type_class(FileType file_type) { switch (file_type) { - case FileType::Animation: - case FileType::Audio: - case FileType::Background: + case FileType::Photo: + case FileType::ProfilePhoto: + case FileType::Thumbnail: + case FileType::EncryptedThumbnail: + case FileType::Wallpaper: + return FileTypeClass::Photo; + case FileType::Video: + case FileType::VoiceNote: case FileType::Document: + case FileType::Sticker: + case FileType::Audio: + case FileType::Animation: + case FileType::VideoNote: + case FileType::Background: case FileType::DocumentAsFile: case FileType::Ringtone: - case FileType::Sticker: - case FileType::Video: - case FileType::VideoNote: - case FileType::VoiceNote: - return true; + return FileTypeClass::Document; + case FileType::SecureRaw: + case FileType::Secure: + return FileTypeClass::Secure; + case FileType::Encrypted: + return FileTypeClass::Encrypted; + case FileType::Temp: + return FileTypeClass::Temp; + case FileType::None: + case FileType::Size: default: - return false; + UNREACHABLE(); + return FileTypeClass::Temp; } } +bool is_document_file_type(FileType file_type) { + return get_file_type_class(file_type) == FileTypeClass::Document; +} + StringBuilder &operator<<(StringBuilder &string_builder, FileType file_type) { return string_builder << get_file_type_name(file_type); } diff --git a/td/telegram/files/FileType.h b/td/telegram/files/FileType.h index 5177ded43..6107e5c90 100644 --- a/td/telegram/files/FileType.h +++ b/td/telegram/files/FileType.h @@ -50,6 +50,10 @@ FileType get_main_file_type(FileType file_type); CSlice get_file_type_name(FileType file_type); +enum class FileTypeClass : int32 { Photo, Document, Secure, Encrypted, Temp }; + +FileTypeClass get_file_type_class(FileType file_type); + bool is_document_file_type(FileType file_type); StringBuilder &operator<<(StringBuilder &string_builder, FileType file_type);