Reload stories from viewed messages once in 5 minutes.

This commit is contained in:
levlam 2023-06-23 13:40:59 +03:00
parent ebac96e7ec
commit 04c4e932fe
3 changed files with 19 additions and 0 deletions

View File

@ -20102,6 +20102,11 @@ Status MessagesManager::view_messages(DialogId dialog_id, vector<MessageId> mess
} }
} }
auto story_full_id = get_message_content_story_full_id(td_, m->content.get());
if (story_full_id.is_valid()) {
td_->story_manager_->view_story_message(story_full_id);
}
if (m->message_id.is_server() && d->open_count > 0) { if (m->message_id.is_server() && d->open_count > 0) {
auto &info = dialog_viewed_messages_[dialog_id]; auto &info = dialog_viewed_messages_[dialog_id];
if (info == nullptr) { if (info == nullptr) {

View File

@ -1078,6 +1078,17 @@ void StoryManager::close_story(DialogId owner_dialog_id, StoryId story_id, Promi
promise.set_value(Unit()); promise.set_value(Unit());
} }
void StoryManager::view_story_message(StoryFullId story_full_id) {
const Story *story = get_story(story_full_id);
if (story == nullptr || !story_full_id.get_story_id().is_server()) {
return;
}
if (story->receive_date_ < G()->unix_time() - VIEWED_STORY_POLL_PERIOD) {
reload_story(story_full_id, Promise<Unit>());
}
}
void StoryManager::schedule_interaction_info_update() { void StoryManager::schedule_interaction_info_update() {
if (interaction_info_update_timeout_.has_timeout()) { if (interaction_info_update_timeout_.has_timeout()) {
return; return;

View File

@ -131,6 +131,8 @@ class StoryManager final : public Actor {
void close_story(DialogId owner_dialog_id, StoryId story_id, Promise<Unit> &&promise); void close_story(DialogId owner_dialog_id, StoryId story_id, Promise<Unit> &&promise);
void view_story_message(StoryFullId story_full_id);
void get_story_viewers(StoryId story_id, const td_api::messageViewer *offset, int32 limit, void get_story_viewers(StoryId story_id, const td_api::messageViewer *offset, int32 limit,
Promise<td_api::object_ptr<td_api::messageViewers>> &&promise); Promise<td_api::object_ptr<td_api::messageViewers>> &&promise);
@ -190,6 +192,7 @@ class StoryManager final : public Actor {
class ReadStoriesOnServerLogEvent; class ReadStoriesOnServerLogEvent;
static constexpr int32 OPENED_STORY_POLL_PERIOD = 60; static constexpr int32 OPENED_STORY_POLL_PERIOD = 60;
static constexpr int32 VIEWED_STORY_POLL_PERIOD = 300;
void start_up() final; void start_up() final;