Add User.max_active_story_id_next_reload_time.

This commit is contained in:
levlam 2023-07-17 20:05:35 +03:00
parent a73a8dcca1
commit a023e80fb5
2 changed files with 20 additions and 1 deletions

View File

@ -4430,6 +4430,7 @@ void ContactsManager::User::store(StorerT &storer) const {
bool has_flags2 = true; bool has_flags2 = true;
bool has_max_active_story_id = max_active_story_id.is_valid(); bool has_max_active_story_id = max_active_story_id.is_valid();
bool has_max_read_story_id = max_read_story_id.is_valid(); bool has_max_read_story_id = max_read_story_id.is_valid();
bool has_max_active_story_id_next_reload_time = max_active_story_id_next_reload_time > Time::now();
BEGIN_STORE_FLAGS(); BEGIN_STORE_FLAGS();
STORE_FLAG(is_received); STORE_FLAG(is_received);
STORE_FLAG(is_verified); STORE_FLAG(is_verified);
@ -4469,6 +4470,7 @@ void ContactsManager::User::store(StorerT &storer) const {
STORE_FLAG(has_stories); STORE_FLAG(has_stories);
STORE_FLAG(has_max_active_story_id); STORE_FLAG(has_max_active_story_id);
STORE_FLAG(has_max_read_story_id); STORE_FLAG(has_max_read_story_id);
STORE_FLAG(has_max_active_story_id_next_reload_time);
END_STORE_FLAGS(); END_STORE_FLAGS();
} }
store(first_name, storer); store(first_name, storer);
@ -4510,6 +4512,9 @@ void ContactsManager::User::store(StorerT &storer) const {
if (has_max_read_story_id) { if (has_max_read_story_id) {
store(max_read_story_id, storer); store(max_read_story_id, storer);
} }
if (has_max_active_story_id_next_reload_time) {
store_time(max_active_story_id_next_reload_time, storer);
}
} }
template <class ParserT> template <class ParserT>
@ -4529,6 +4534,7 @@ void ContactsManager::User::parse(ParserT &parser) {
bool has_flags2 = parser.version() >= static_cast<int32>(Version::AddUserFlags2); bool has_flags2 = parser.version() >= static_cast<int32>(Version::AddUserFlags2);
bool has_max_active_story_id = false; bool has_max_active_story_id = false;
bool has_max_read_story_id = false; bool has_max_read_story_id = false;
bool has_max_active_story_id_next_reload_time = false;
BEGIN_PARSE_FLAGS(); BEGIN_PARSE_FLAGS();
PARSE_FLAG(is_received); PARSE_FLAG(is_received);
PARSE_FLAG(is_verified); PARSE_FLAG(is_verified);
@ -4568,6 +4574,7 @@ void ContactsManager::User::parse(ParserT &parser) {
PARSE_FLAG(has_stories); PARSE_FLAG(has_stories);
PARSE_FLAG(has_max_active_story_id); PARSE_FLAG(has_max_active_story_id);
PARSE_FLAG(has_max_read_story_id); PARSE_FLAG(has_max_read_story_id);
PARSE_FLAG(has_max_active_story_id_next_reload_time);
END_PARSE_FLAGS(); END_PARSE_FLAGS();
} }
parse(first_name, parser); parse(first_name, parser);
@ -4637,6 +4644,9 @@ void ContactsManager::User::parse(ParserT &parser) {
if (has_max_read_story_id) { if (has_max_read_story_id) {
parse(max_read_story_id, parser); parse(max_read_story_id, parser);
} }
if (has_max_active_story_id_next_reload_time) {
parse_time(max_active_story_id_next_reload_time, parser);
}
if (!check_utf8(first_name)) { if (!check_utf8(first_name)) {
LOG(ERROR) << "Have invalid first name \"" << first_name << '"'; LOG(ERROR) << "Have invalid first name \"" << first_name << '"';
@ -13507,6 +13517,13 @@ void ContactsManager::on_update_user_has_stories(User *u, UserId user_id, bool h
u->max_active_story_id = max_active_story_id; u->max_active_story_id = max_active_story_id;
u->need_save_to_database = true; u->need_save_to_database = true;
} }
auto max_active_story_id_next_reload_time = Time::now() + MAX_ACTIVE_STORY_ID_RELOAD_TIME;
if (max_active_story_id_next_reload_time >
u->max_active_story_id_next_reload_time + MAX_ACTIVE_STORY_ID_RELOAD_TIME / 5) {
LOG(DEBUG) << "Change max_active_story_id_next_reload_time of " << user_id;
u->max_active_story_id_next_reload_time = max_active_story_id_next_reload_time;
u->need_save_to_database = true;
}
if (!has_stories && !max_active_story_id.is_valid()) { if (!has_stories && !max_active_story_id.is_valid()) {
CHECK(max_read_story_id == StoryId()); CHECK(max_read_story_id == StoryId());
if (u->max_read_story_id != StoryId()) { if (u->max_read_story_id != StoryId()) {

View File

@ -759,6 +759,7 @@ class ContactsManager final : public Actor {
int32 was_online = 0; int32 was_online = 0;
int32 local_was_online = 0; int32 local_was_online = 0;
double max_active_story_id_next_reload_time = 0.0;
StoryId max_active_story_id; StoryId max_active_story_id;
StoryId max_read_story_id; StoryId max_read_story_id;
@ -1175,6 +1176,7 @@ class ContactsManager final : public Actor {
static constexpr int32 MAX_GET_CHANNEL_PARTICIPANTS = 200; // server side limit static constexpr int32 MAX_GET_CHANNEL_PARTICIPANTS = 200; // server side limit
static constexpr int32 CHANNEL_PARTICIPANT_CACHE_TIME = 1800; // some reasonable limit static constexpr int32 CHANNEL_PARTICIPANT_CACHE_TIME = 1800; // some reasonable limit
static constexpr int32 MAX_ACTIVE_STORY_ID_RELOAD_TIME = 3600; // some reasonable limit
// the True fields aren't set for manually created telegram_api::user objects, therefore the flags must be used // the True fields aren't set for manually created telegram_api::user objects, therefore the flags must be used
static constexpr int32 USER_FLAG_HAS_ACCESS_HASH = 1 << 0; static constexpr int32 USER_FLAG_HAS_ACCESS_HASH = 1 << 0;