// // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 // // 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/td_api.h" #include "td/actor/actor.h" #include "td/utils/common.h" #include "td/utils/Promise.h" #include "td/utils/Slice.h" #include namespace td { class KeyValueSyncInterface; class Td; class TsSeqKeyValue; class OptionManager final : public Actor { public: OptionManager(Td *td, ActorShared<> parent); OptionManager(const OptionManager &) = delete; OptionManager &operator=(const OptionManager &) = delete; OptionManager(OptionManager &&) = delete; OptionManager &operator=(OptionManager &&) = delete; ~OptionManager() final; void set_option_boolean(Slice name, bool value); void set_option_empty(Slice name); void set_option_integer(Slice name, int64 value); void set_option_string(Slice name, Slice value); bool have_option(Slice name) const; bool get_option_boolean(Slice name, bool default_value = false) const; int64 get_option_integer(Slice name, int64 default_value = 0) const; string get_option_string(Slice name, string default_value = "") const; void on_update_server_time_difference(); void get_option(const string &name, Promise> &&promise); void set_option(const string &name, td_api::object_ptr &&value, Promise &&promise); void clear_options(); static bool is_synchronous_option(Slice name); static td_api::object_ptr get_option_synchronously(Slice name); static void get_common_state(vector> &updates); void get_current_state(vector> &updates) const; private: void tear_down() final; void set_option(Slice name, Slice value); void on_option_updated(Slice name); string get_option(Slice name) const; static bool is_internal_option(Slice name); static const vector &get_synchronous_options(); static td_api::object_ptr get_unix_time_option_value_object(); static td_api::object_ptr get_option_value_object(Slice value); void send_unix_time_update(); Td *td_; ActorShared<> parent_; unique_ptr options_; std::shared_ptr option_pmc_; double last_sent_server_time_difference_ = 1e100; }; } // namespace td