// // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // 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) // #include "td/telegram/Document.h" #include "td/telegram/AnimationsManager.h" #include "td/telegram/AudiosManager.h" #include "td/telegram/DocumentsManager.h" #include "td/telegram/StickersManager.h" #include "td/telegram/Td.h" #include "td/telegram/VideoNotesManager.h" #include "td/telegram/VideosManager.h" #include "td/utils/algorithm.h" namespace td { vector<FileId> Document::get_file_ids(const Td *td) const { vector<FileId> result; append_file_ids(td, result); return result; } void Document::append_file_ids(const Td *td, vector<FileId> &file_ids) const { if (!file_id.is_valid() || empty()) { return; } if (type == Type::Sticker) { append(file_ids, td->stickers_manager_->get_sticker_file_ids(file_id)); return; } file_ids.push_back(file_id); FileId thumbnail_file_id = [&] { switch (type) { case Type::Animation: return td->animations_manager_->get_animation_thumbnail_file_id(file_id); case Type::Audio: return td->audios_manager_->get_audio_thumbnail_file_id(file_id); case Type::General: return td->documents_manager_->get_document_thumbnail_file_id(file_id); case Type::Video: return td->videos_manager_->get_video_thumbnail_file_id(file_id); case Type::VideoNote: return td->video_notes_manager_->get_video_note_thumbnail_file_id(file_id); default: return FileId(); } }(); if (thumbnail_file_id.is_valid()) { file_ids.push_back(thumbnail_file_id); } FileId animated_thumbnail_file_id = [&] { switch (type) { case Type::Animation: return td->animations_manager_->get_animation_animated_thumbnail_file_id(file_id); case Type::Video: return td->videos_manager_->get_video_animated_thumbnail_file_id(file_id); default: return FileId(); } }(); if (animated_thumbnail_file_id.is_valid()) { file_ids.push_back(animated_thumbnail_file_id); } if (type == Type::Audio) { td->audios_manager_->append_audio_album_cover_file_ids(file_id, file_ids); } } bool operator==(const Document &lhs, const Document &rhs) { return lhs.type == rhs.type && lhs.file_id == rhs.file_id; } bool operator!=(const Document &lhs, const Document &rhs) { return !(lhs == rhs); } StringBuilder &operator<<(StringBuilder &string_builder, const Document::Type &document_type) { switch (document_type) { case Document::Type::Unknown: return string_builder << "Unknown"; case Document::Type::Animation: return string_builder << "Animation"; case Document::Type::Audio: return string_builder << "Audio"; case Document::Type::General: return string_builder << "Document"; case Document::Type::Sticker: return string_builder << "Sticker"; case Document::Type::Video: return string_builder << "Video"; case Document::Type::VideoNote: return string_builder << "VideoNote"; case Document::Type::VoiceNote: return string_builder << "VoiceNote"; default: return string_builder << "Unreachable"; } } StringBuilder &operator<<(StringBuilder &string_builder, const Document &document) { return string_builder << '[' << document.type << ' ' << document.file_id << ']'; } } // namespace td