Private
Public Access
1
0

osx: mark as read when hovering over window

This commit is contained in:
2025-09-25 00:20:19 -07:00
parent cbd9dccf1a
commit e650cffde7
2 changed files with 23 additions and 2 deletions

View File

@@ -23,5 +23,10 @@ struct ConversationView: View
entryModel.handleDroppedProviders(providers) entryModel.handleDroppedProviders(providers)
return true return true
} }
.onHover { isHovering in
guard isHovering else { return }
transcriptModel.setNeedsMarkAsRead()
}
} }
} }

View File

@@ -126,11 +126,14 @@ struct TranscriptView: View
{ {
var displayItems: [DisplayItem] = [] var displayItems: [DisplayItem] = []
var displayedConversation: Display.Conversation? = nil var displayedConversation: Display.Conversation? = nil
internal var needsReload: NeedsReload = .no internal var needsReload: NeedsReload = .no
internal var messages: [Display.Message] internal var messages: [Display.Message]
internal let client = XPCClient() internal let client = XPCClient()
private var needsMarkAsRead: Bool = false
private var lastMarkAsRead: Date = .now
init(messages: [Display.Message] = []) { init(messages: [Display.Message] = []) {
self.messages = messages self.messages = messages
rebuildDisplayItems() rebuildDisplayItems()
@@ -147,7 +150,20 @@ struct TranscriptView: View
await reloadIfNeeded() await reloadIfNeeded()
} }
} }
func setNeedsMarkAsRead() {
guard needsMarkAsRead == false else { return }
guard Date.now.timeIntervalSince(lastMarkAsRead) > 5.0 else { return }
needsMarkAsRead = true
Task { @MainActor [weak self] in
guard let self else { return }
await markAsRead()
needsMarkAsRead = false
lastMarkAsRead = .now
}
}
func attachmentDownloaded(id: String) { func attachmentDownloaded(id: String) {
// TODO: should be smarter here // TODO: should be smarter here
setNeedsReload(animated: false) setNeedsReload(animated: false)