// // 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/BackgroundId.h" #include "td/telegram/BackgroundType.h" #include "td/telegram/files/FileId.h" #include "td/telegram/files/FileSourceId.h" #include "td/telegram/Photo.h" #include "td/telegram/td_api.h" #include "td/telegram/telegram_api.h" #include "td/actor/actor.h" #include "td/actor/PromiseFuture.h" #include "td/utils/common.h" #include "td/utils/Status.h" #include namespace td { class Td; class BackgroundManager : public Actor { public: BackgroundManager(Td *td, ActorShared<> parent); void get_backgrounds(Promise &&promise); Result get_background_url(const string &name, td_api::object_ptr background_type) const; void reload_background(BackgroundId background_id, int64 access_hash, Promise &&promise); BackgroundId search_background(const string &name, Promise &&promise); td_api::object_ptr get_background_object(BackgroundId background_id) const; td_api::object_ptr get_backgrounds_object() const; BackgroundId on_get_background(BackgroundId expected_background_id, telegram_api::object_ptr wallpaper); FileSourceId get_background_file_source_id(BackgroundId background_id, int64 access_hash); private: struct Background { BackgroundId id; int64 access_hash = 0; string name; FileId file_id; bool is_creator = false; bool is_default = false; bool is_dark = false; BackgroundType type; FileSourceId file_source_id; }; void tear_down() override; void reload_background_from_server(BackgroundId background_id, telegram_api::object_ptr &&input_wallpaper, Promise &&promise) const; Background *add_background(BackgroundId background_id); Background *get_background_ref(BackgroundId background_id); const Background *get_background(BackgroundId background_id) const; void on_get_backgrounds(Result> result); std::unordered_map backgrounds_; std::unordered_map, BackgroundIdHash> background_id_to_file_source_id_; // id -> [access_hash, file_source_id] std::unordered_map name_to_background_id_; vector installed_backgrounds_; vector> pending_get_backgrounds_queries_; Td *td_; ActorShared<> parent_; }; } // namespace td