Reload data once an hour.
This commit is contained in:
parent
e4bff687cf
commit
941206495a
@ -199,6 +199,8 @@ void UpdatesManager::start_up() {
|
||||
ActorId<UpdatesManager> parent_;
|
||||
};
|
||||
send_closure(G()->state_manager(), &StateManager::add_callback, make_unique<StateCallback>(actor_id(this)));
|
||||
|
||||
next_data_reload_time_ = Time::now() - 1;
|
||||
}
|
||||
|
||||
void UpdatesManager::hangup_shared() {
|
||||
@ -1587,11 +1589,40 @@ void UpdatesManager::after_get_difference() {
|
||||
try_reload_data();
|
||||
}
|
||||
|
||||
void UpdatesManager::schedule_data_reload() {
|
||||
if (data_reload_timeout_.has_timeout()) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto timeout = next_data_reload_time_ - Time::now();
|
||||
LOG(INFO) << "Schedule data reload in " << timeout;
|
||||
data_reload_timeout_.set_callback(std::move(try_reload_data_static));
|
||||
data_reload_timeout_.set_callback_data(static_cast<void *>(td_));
|
||||
data_reload_timeout_.set_timeout_in(timeout);
|
||||
}
|
||||
|
||||
void UpdatesManager::try_reload_data_static(void *td) {
|
||||
CHECK(td != nullptr);
|
||||
if (G()->close_flag()) {
|
||||
return;
|
||||
}
|
||||
|
||||
static_cast<Td *>(td)->updates_manager_->try_reload_data();
|
||||
}
|
||||
|
||||
void UpdatesManager::try_reload_data() {
|
||||
if (td_->auth_manager_->is_bot() || running_get_difference_ || !td_->is_online()) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto now = Time::now();
|
||||
if (now < next_data_reload_time_) {
|
||||
schedule_data_reload();
|
||||
return;
|
||||
}
|
||||
next_data_reload_time_ = now + Random::fast(3000, 4200);
|
||||
|
||||
LOG(INFO) << "Reload data";
|
||||
td_->animations_manager_->get_saved_animations(Auto());
|
||||
td_->contacts_manager_->reload_created_public_dialogs(PublicDialogType::HasUsername, Auto());
|
||||
td_->contacts_manager_->reload_created_public_dialogs(PublicDialogType::IsLocationBased, Auto());
|
||||
@ -1605,6 +1636,8 @@ void UpdatesManager::try_reload_data() {
|
||||
td_->stickers_manager_->get_favorite_stickers(Auto());
|
||||
td_->stickers_manager_->reload_special_sticker_set_by_type(SpecialStickerSetType::animated_emoji());
|
||||
td_->stickers_manager_->reload_special_sticker_set_by_type(SpecialStickerSetType::animated_emoji_click());
|
||||
|
||||
schedule_data_reload();
|
||||
}
|
||||
|
||||
void UpdatesManager::on_pending_updates(vector<tl_object_ptr<telegram_api::Update>> &&updates, int32 seq_begin,
|
||||
|
@ -221,6 +221,9 @@ class UpdatesManager final : public Actor {
|
||||
int32 retry_time_ = 1;
|
||||
Timeout retry_timeout_;
|
||||
|
||||
double next_data_reload_time_ = 0.0;
|
||||
Timeout data_reload_timeout_;
|
||||
|
||||
bool running_get_difference_ = false;
|
||||
int32 last_get_difference_pts_ = 0;
|
||||
int32 last_get_difference_qts_ = 0;
|
||||
@ -333,6 +336,10 @@ class UpdatesManager final : public Actor {
|
||||
|
||||
void after_get_difference();
|
||||
|
||||
void schedule_data_reload();
|
||||
|
||||
static void try_reload_data_static(void *td);
|
||||
|
||||
void try_reload_data();
|
||||
|
||||
static bool have_update_pts_changed(const vector<tl_object_ptr<telegram_api::Update>> &updates);
|
||||
|
Loading…
x
Reference in New Issue
Block a user