macOS client panes and transcript
This commit is contained in:
@@ -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: {})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user