aboutsummaryrefslogtreecommitdiff
path: root/libdino/src/service/chat_interaction.vala
diff options
context:
space:
mode:
Diffstat (limited to 'libdino/src/service/chat_interaction.vala')
-rw-r--r--libdino/src/service/chat_interaction.vala18
1 files changed, 18 insertions, 0 deletions
diff --git a/libdino/src/service/chat_interaction.vala b/libdino/src/service/chat_interaction.vala
index 1e988382..def9ea86 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);