Move "unix_time" option handling to OptionManager.
This commit is contained in:
parent
ee629c342b
commit
d75f0a4e94
@ -11,8 +11,8 @@
|
||||
#include "td/telegram/net/MtprotoHeader.h"
|
||||
#include "td/telegram/net/NetQueryDispatcher.h"
|
||||
#include "td/telegram/net/TempAuthKeyWatchdog.h"
|
||||
#include "td/telegram/OptionManager.h"
|
||||
#include "td/telegram/StateManager.h"
|
||||
#include "td/telegram/Td.h"
|
||||
#include "td/telegram/TdDb.h"
|
||||
|
||||
#include "td/actor/PromiseFuture.h"
|
||||
@ -149,7 +149,7 @@ void Global::update_server_time_difference(double diff) {
|
||||
do_save_server_time_difference();
|
||||
|
||||
CHECK(Scheduler::instance());
|
||||
send_closure(td(), &Td::on_update_server_time_difference);
|
||||
send_closure(option_manager(), &OptionManager::on_update_server_time_difference);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,11 +28,13 @@
|
||||
#include "td/utils/misc.h"
|
||||
#include "td/utils/SliceBuilder.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
|
||||
namespace td {
|
||||
|
||||
OptionManager::OptionManager(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) {
|
||||
send_unix_time_update();
|
||||
}
|
||||
|
||||
void OptionManager::tear_down() {
|
||||
@ -41,6 +43,23 @@ void OptionManager::tear_down() {
|
||||
|
||||
OptionManager::~OptionManager() = default;
|
||||
|
||||
td_api::object_ptr<td_api::OptionValue> OptionManager::get_unix_time_option_value_object() {
|
||||
return td_api::make_object<td_api::optionValueInteger>(G()->unix_time());
|
||||
}
|
||||
|
||||
void OptionManager::send_unix_time_update() {
|
||||
last_sent_server_time_difference_ = G()->get_server_time_difference();
|
||||
td_->send_update(td_api::make_object<td_api::updateOption>("unix_time", get_unix_time_option_value_object()));
|
||||
}
|
||||
|
||||
void OptionManager::on_update_server_time_difference() {
|
||||
if (std::abs(G()->get_server_time_difference() - last_sent_server_time_difference_) < 0.5) {
|
||||
return;
|
||||
}
|
||||
|
||||
send_unix_time_update();
|
||||
}
|
||||
|
||||
void OptionManager::clear_options() {
|
||||
for (auto &option : G()->shared_config().get_options()) {
|
||||
if (!is_internal_option(option.first)) {
|
||||
@ -296,7 +315,7 @@ void OptionManager::get_option(const string &name, Promise<td_api::object_ptr<td
|
||||
break;
|
||||
case 'u':
|
||||
if (name == "unix_time") {
|
||||
return promise.set_value(td_api::make_object<td_api::optionValueInteger>(G()->unix_time()));
|
||||
return promise.set_value(get_unix_time_option_value_object());
|
||||
}
|
||||
break;
|
||||
case 'v':
|
||||
@ -608,8 +627,8 @@ void OptionManager::get_current_state(vector<td_api::object_ptr<td_api::Update>>
|
||||
|
||||
updates.push_back(td_api::make_object<td_api::updateOption>(
|
||||
"online", td_api::make_object<td_api::optionValueBoolean>(td_->is_online())));
|
||||
updates.push_back(td_api::make_object<td_api::updateOption>(
|
||||
"unix_time", td_api::make_object<td_api::optionValueInteger>(G()->unix_time())));
|
||||
|
||||
updates.push_back(td_api::make_object<td_api::updateOption>("unix_time", get_unix_time_option_value_object()));
|
||||
|
||||
for (const auto &option : G()->shared_config().get_options()) {
|
||||
if (!is_internal_option(option.first)) {
|
||||
|
@ -28,6 +28,8 @@ class OptionManager final : public Actor {
|
||||
OptionManager &operator=(OptionManager &&) = delete;
|
||||
~OptionManager() final;
|
||||
|
||||
void on_update_server_time_difference();
|
||||
|
||||
void on_option_updated(const string &name);
|
||||
|
||||
void get_option(const string &name, Promise<td_api::object_ptr<td_api::OptionValue>> &&promise);
|
||||
@ -43,8 +45,14 @@ class OptionManager final : public Actor {
|
||||
|
||||
static bool is_internal_option(Slice name);
|
||||
|
||||
static td_api::object_ptr<td_api::OptionValue> get_unix_time_option_value_object();
|
||||
|
||||
void send_unix_time_update();
|
||||
|
||||
Td *td_;
|
||||
ActorShared<> parent_;
|
||||
|
||||
double last_sent_server_time_difference_ = 1e100;
|
||||
};
|
||||
|
||||
} // namespace td
|
||||
|
@ -147,7 +147,6 @@
|
||||
#include "td/utils/tl_parsers.h"
|
||||
#include "td/utils/utf8.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
#include <tuple>
|
||||
#include <type_traits>
|
||||
@ -2704,17 +2703,6 @@ void Td::on_alarm_timeout_callback(void *td_ptr, int64 alarm_id) {
|
||||
send_closure_later(td_id, &Td::on_alarm_timeout, alarm_id);
|
||||
}
|
||||
|
||||
void Td::on_update_server_time_difference() {
|
||||
auto diff = G()->get_server_time_difference();
|
||||
if (std::abs(diff - last_sent_server_time_difference_) < 0.5) {
|
||||
return;
|
||||
}
|
||||
|
||||
last_sent_server_time_difference_ = diff;
|
||||
send_update(td_api::make_object<td_api::updateOption>(
|
||||
"unix_time", td_api::make_object<td_api::optionValueInteger>(G()->unix_time())));
|
||||
}
|
||||
|
||||
void Td::on_alarm_timeout(int64 alarm_id) {
|
||||
if (alarm_id == ONLINE_ALARM_ID) {
|
||||
on_online_updated(false, true);
|
||||
@ -3677,9 +3665,6 @@ Status Td::init(DbKey key) {
|
||||
VLOG(td_init) << "Successfully inited database";
|
||||
|
||||
G()->init(parameters_, actor_id(this), r_td_db.move_as_ok()).ensure();
|
||||
last_sent_server_time_difference_ = G()->get_server_time_difference();
|
||||
send_update(td_api::make_object<td_api::updateOption>(
|
||||
"unix_time", td_api::make_object<td_api::optionValueInteger>(G()->unix_time())));
|
||||
|
||||
init_options_and_network();
|
||||
|
||||
@ -3865,11 +3850,16 @@ void Td::init_options_and_network() {
|
||||
config_manager_ = create_actor<ConfigManager>("ConfigManager", create_reference());
|
||||
G()->set_config_manager(config_manager_.get());
|
||||
|
||||
VLOG(td_init) << "Create OptionManager";
|
||||
option_manager_ = make_unique<OptionManager>(this, create_reference());
|
||||
option_manager_actor_ = register_actor("OptionManager", option_manager_.get());
|
||||
G()->set_option_manager(option_manager_actor_.get());
|
||||
|
||||
VLOG(td_init) << "Set ConfigShared callback";
|
||||
class ConfigSharedCallback final : public ConfigShared::Callback {
|
||||
public:
|
||||
void on_option_updated(const string &name, const string &value) const final {
|
||||
send_closure(G()->option_manager(), &OptionManager::on_option_updated, name);
|
||||
send_closure_later(G()->option_manager(), &OptionManager::on_option_updated, name);
|
||||
}
|
||||
~ConfigSharedCallback() final {
|
||||
LOG(INFO) << "Destroy ConfigSharedCallback";
|
||||
@ -4019,9 +4009,6 @@ void Td::init_managers() {
|
||||
notification_manager_ = make_unique<NotificationManager>(this, create_reference());
|
||||
notification_manager_actor_ = register_actor("NotificationManager", notification_manager_.get());
|
||||
G()->set_notification_manager(notification_manager_actor_.get());
|
||||
option_manager_ = make_unique<OptionManager>(this, create_reference());
|
||||
option_manager_actor_ = register_actor("OptionManager", option_manager_.get());
|
||||
G()->set_option_manager(option_manager_actor_.get());
|
||||
poll_manager_ = make_unique<PollManager>(this, create_reference());
|
||||
poll_manager_actor_ = register_actor("PollManager", poll_manager_.get());
|
||||
sponsored_message_manager_ = make_unique<SponsoredMessageManager>(this, create_reference());
|
||||
|
@ -118,8 +118,6 @@ class Td final : public Actor {
|
||||
|
||||
void on_result(NetQueryPtr query);
|
||||
|
||||
void on_update_server_time_difference();
|
||||
|
||||
void on_online_updated(bool force, bool send_update);
|
||||
|
||||
void on_update_status_success(bool is_online);
|
||||
@ -318,8 +316,6 @@ class Td final : public Actor {
|
||||
|
||||
TermsOfService pending_terms_of_service_;
|
||||
|
||||
double last_sent_server_time_difference_ = 1e100;
|
||||
|
||||
struct DownloadInfo {
|
||||
int32 offset = -1;
|
||||
int32 limit = -1;
|
||||
|
Loading…
Reference in New Issue
Block a user