From 1abe1bf6ac889881182b11f96708f840ffe6cead Mon Sep 17 00:00:00 2001 From: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com> Date: Tue, 18 Feb 2025 12:14:59 -0800 Subject: [PATCH] Added markMessageASRead func --- .../Views/Messages/ChannelMessageList.swift | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/Meshtastic/Views/Messages/ChannelMessageList.swift b/Meshtastic/Views/Messages/ChannelMessageList.swift index 573a7dc8..276f6fbf 100644 --- a/Meshtastic/Views/Messages/ChannelMessageList.swift +++ b/Meshtastic/Views/Messages/ChannelMessageList.swift @@ -112,16 +112,8 @@ struct ChannelMessageList: View { .frame(maxWidth: .infinity) .id(message.messageId) .onAppear { - if !message.read { - message.read = true - do { - try context.save() - Logger.data.info("📖 [App] Read message \(message.messageId) ") - appState.unreadChannelMessages = myInfo.unreadMessages - context.refresh(myInfo, mergeChanges: true) - } catch { - Logger.data.error("Failed to read message \(message.messageId): \(error.localizedDescription)") - } + Task { + await markMessageAsRead(message) } } } @@ -178,4 +170,21 @@ struct ChannelMessageList: View { } } } + + @MainActor + func markMessageAsRead(_ message: MessageEntity) async { + guard !message.read else { return } + + message.read = true + + do { + try await Task.sleep(nanoseconds: 300_000_000) // 300ms debounce + try context.save() + Logger.data.info("📖 [App] Read message \(message.messageId)") + appState.unreadChannelMessages = myInfo.unreadMessages + context.refresh(myInfo, mergeChanges: true) + } catch { + Logger.data.error("Failed to read message \(message.messageId): \(error.localizedDescription)") + } + } }