diff options
| author | frosty <gabriel@bwaaa.monster> | 2026-08-27 09:48:25 -0400 |
|---|---|---|
| committer | frosty <gabriel@bwaaa.monster> | 2026-08-27 09:48:25 -0400 |
| commit | b308e9f032f1f6013f8dd0ec563777638d97743e (patch) | |
| tree | f2b7036b6821c3647d329a9c0c605226a47ab9d4 /libdino/src/service | |
| parent | fd6d6a8a2c6cd7b158d92601e4f3a55117a3983e (diff) | |
feat: add mark all as read option
Diffstat (limited to 'libdino/src/service')
| -rw-r--r-- | libdino/src/service/chat_interaction.vala | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libdino/src/service/chat_interaction.vala b/libdino/src/service/chat_interaction.vala index 9c8106a0..b3ec1b93 100644 --- a/libdino/src/service/chat_interaction.vala +++ b/libdino/src/service/chat_interaction.vala @@ -51,6 +51,24 @@ public class ChatInteraction : StreamInteractionModule, Object { return (int) query.count(); } + public async void mark_all_as_read() { + ContentItemStore content_item_store = stream_interactor.get_module(ContentItemStore.IDENTITY); + CounterpartInteractionManager counterpart_interaction_manager = stream_interactor.get_module(CounterpartInteractionManager.IDENTITY); + + foreach (Conversation conversation in stream_interactor.get_module(ConversationManager.IDENTITY).get_active_conversations()) { + if (get_num_unread(conversation) == 0) continue; + + ContentItem? latest_item = content_item_store.get_latest(conversation); + if (latest_item == null) continue; + + Message? message = content_item_store.get_message_for_content_item(conversation, latest_item); + if (message != null) { + yield send_and_mark_message_displayed(conversation, message); + } + counterpart_interaction_manager.mark_displayed_up_to_content_item(conversation, latest_item); + } + } + public bool is_active_focus(Conversation? conversation = null) { if (conversation != null) { return focus_in && conversation.equals(this.selected_conversation); |
