diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index f9ef6a47e..7ab15e07a 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -4554,7 +4554,6 @@ void MessagesManager::on_pending_message_views_timeout_callback(void *messages_m auto messages_manager = static_cast(messages_manager_ptr); DialogId dialog_id(dialog_id_int); - CHECK(dialog_id.get_type() == DialogType::Channel); auto d = messages_manager->get_dialog(dialog_id); CHECK(d != nullptr); CHECK(!d->pending_viewed_message_ids.empty()); @@ -12020,25 +12019,6 @@ Status MessagesManager::close_dialog(DialogId dialog_id) { return Status::OK(); } -bool MessagesManager::message_views_enabled(DialogId dialog_id) const { - switch (dialog_id.get_type()) { - case DialogType::User: - case DialogType::Chat: - case DialogType::SecretChat: - return false; - case DialogType::Channel: { - auto channel_id = dialog_id.get_channel_id(); - auto channel_type = td_->contacts_manager_->get_channel_type(channel_id); - return channel_type != ChannelType::Megagroup && - td_->contacts_manager_->have_input_peer_channel(channel_id, AccessRights::Read); - } - case DialogType::None: - default: - UNREACHABLE(); - return false; - } -} - Status MessagesManager::view_messages(DialogId dialog_id, const vector &message_ids, bool force_read) { Dialog *d = get_dialog_force(dialog_id); if (d == nullptr) { @@ -12049,17 +12029,8 @@ Status MessagesManager::view_messages(DialogId dialog_id, const vectorpending_viewed_message_ids.insert(message_id); - } - } - } - - if (!d->pending_viewed_message_ids.empty()) { - pending_message_views_timeout_.add_timeout_in(dialog_id.get(), MAX_MESSAGE_VIEW_DELAY); + if (!have_input_peer(dialog_id, AccessRights::Read)) { + return Status::Error(5, "Can't access the chat"); } bool need_read = force_read || d->is_opened; @@ -12070,6 +12041,10 @@ Status MessagesManager::view_messages(DialogId dialog_id, const vectorviews > 0) { + d->pending_viewed_message_ids.insert(message_id); + } + if (!message_id.is_yet_unsent() && message_id.get() > max_incoming_message_id.get()) { if (!message->is_outgoing && (message_id.is_server() || is_secret)) { max_incoming_message_id = message_id; @@ -12090,6 +12065,9 @@ Status MessagesManager::view_messages(DialogId dialog_id, const vectorpending_viewed_message_ids.empty()) { + pending_message_views_timeout_.add_timeout_in(dialog_id.get(), MAX_MESSAGE_VIEW_DELAY); + } if (!read_content_message_ids.empty()) { read_message_contents_on_server(dialog_id, std::move(read_content_message_ids), 0); } diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index bc6c5b58b..f9ad2bd4b 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -1960,8 +1960,6 @@ class MessagesManager : public Actor { void find_unloadable_messages(const Dialog *d, int32 unload_before_date, const unique_ptr &m, vector &message_ids, int32 &left_to_unload) const; - bool message_views_enabled(DialogId dialog_id) const; - bool update_message_views(DialogId dialog_id, Message *m, int32 views); bool update_message_contains_unread_mention(Dialog *d, Message *m, bool contains_unread_mention, const char *source);