macOS client panes and transcript

This commit is contained in:
Ian Gulliver
2026-10-16 23:30:57 -07:00
parent 14d7ad4631
commit 00cd1ed958
23 changed files with 5059 additions and 739 deletions
+34 -1
View File
@@ -43,7 +43,11 @@ final class Store {
var jump: (taskId: String, seq: Int64)?
var summaryReads: [String: Int64] = [:]
private(set) var leadMore = false
var todoStarting: Set<String> = []
private(set) var drafts: Drafts?
let images = ImageDrafts()
let events = Listeners<ByreEvent>()
let paneFocus: PaneFocus
private var taskFeeds: [String: Feed] = [:]
@ObservationIgnored private var historyLoads: Set<ObjectIdentifier> = []
@@ -55,12 +59,36 @@ final class Store {
init(api: API) {
self.api = api
leadFeed = Feed(shown: { true })
paneFocus = PaneFocus(api: api)
}
func stop() {
func stop() async {
stopped = true
globalStream?.stop()
leadStream?.stop()
drafts?.flush()
await paneFocus.leave()
}
func loadDrafts() {
drafts = Drafts(origin: api.origin, login: me!.login)
drafts!.prune(self)
}
func startTodo(_ projectId: String, _ title: String, discuss: Bool, _ overlays: Overlays) {
let key = "\(projectId)\n\(title)"
if todoStarting.contains(key) {
return
}
todoStarting.insert(key)
Task {
do {
_ = try await api.client.startTodoItem(path: .init(projectId: projectId), body: .json(.init(title: title, model: models[0], discuss: discuss))).created
} catch {
overlays.showAlert(errorText(error))
}
todoStarting.remove(key)
}
}
var transcript: [ByreEvent] {
@@ -167,6 +195,7 @@ final class Store {
_ = taskFeed(t.id)
}
dropClosedFeeds()
drafts?.prune(self)
try await each(list.filter { $0.status == .active }.map(\.id)) { id in
try await self.loadSessions(id)
}
@@ -188,6 +217,7 @@ final class Store {
return
}
inbox = items
drafts?.prune(self)
}
func loadLeadSessions() async throws {
@@ -384,6 +414,9 @@ final class Store {
self?.handleEvent(ev)
}, onState: { [weak self] up in
self?.connected = up
if up {
self?.paneFocus.reconnected()
}
}, onReady: {})
}