This repository has been archived on 2020-05-25. You can view files and clone it, but cannot push or open issues or pull requests.
tdlib-fork/td/telegram/Document.hpp
levlam 46a0b0036d Add Document.hpp.
GitOrigin-RevId: e26a6aa44453c2a5e2216d91782e94f5bda9686d
2019-04-09 18:52:53 +03:00

99 lines
3.1 KiB
C++

//
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2019
//
// 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
#include "td/telegram/Document.h"
#include "td/telegram/AnimationsManager.h"
#include "td/telegram/AudiosManager.h"
#include "td/telegram/DocumentsManager.h"
#include "td/telegram/files/FileId.hpp"
#include "td/telegram/StickersManager.h"
#include "td/telegram/Td.h"
#include "td/telegram/VideosManager.h"
#include "td/telegram/VideoNotesManager.h"
#include "td/telegram/VoiceNotesManager.h"
#include "td/utils/logging.h"
#include "td/utils/tl_helpers.h"
namespace td {
template <class StorerT>
void store(const Document &document, StorerT &storer) {
Td *td = storer.context()->td().get_actor_unsafe();
CHECK(td != nullptr);
store(document.type, storer);
switch (document.type) {
case Document::Type::Animation:
td->animations_manager_->store_animation(document.file_id, storer);
break;
case Document::Type::Audio:
td->audios_manager_->store_audio(document.file_id, storer);
break;
case Document::Type::General:
td->documents_manager_->store_document(document.file_id, storer);
break;
case Document::Type::Sticker:
td->stickers_manager_->store_sticker(document.file_id, false, storer);
break;
case Document::Type::Video:
td->videos_manager_->store_video(document.file_id, storer);
break;
case Document::Type::VideoNote:
td->video_notes_manager_->store_video_note(document.file_id, storer);
break;
case Document::Type::VoiceNote:
td->voice_notes_manager_->store_voice_note(document.file_id, storer);
break;
case Document::Type::Unknown:
default:
UNREACHABLE();
}
}
template <class ParserT>
void parse(Document &document, ParserT &parser) {
Td *td = parser.context()->td().get_actor_unsafe();
CHECK(td != nullptr);
parse(document.type, parser);
switch (document.type) {
case Document::Type::Animation:
document.file_id = td->animations_manager_->parse_animation(parser);
break;
case Document::Type::Audio:
document.file_id = td->audios_manager_->parse_audio(parser);
break;
case Document::Type::General:
document.file_id = td->documents_manager_->parse_document(parser);
break;
case Document::Type::Sticker:
document.file_id = td->stickers_manager_->parse_sticker(false, parser);
break;
case Document::Type::Video:
document.file_id = td->videos_manager_->parse_video(parser);
break;
case Document::Type::VideoNote:
document.file_id = td->video_notes_manager_->parse_video_note(parser);
break;
case Document::Type::VoiceNote:
document.file_id = td->voice_notes_manager_->parse_voice_note(parser);
break;
case Document::Type::Unknown:
default:
UNREACHABLE();
}
if (!document.file_id.is_valid()) {
LOG(ERROR) << "Parse invalid document.file_id";
document = Document();
}
}
} // namespace td