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