Transcript Incremental Projection
Nucleic-Session: 0FFD007B-0696-4517-9429-129C7B0FD5AC Co-authored-by: Nucleic <[email protected]>
This commit is contained in:
@@ -11,9 +11,15 @@ struct SessionsView: View {
|
|||||||
private var grouped: [(title: String, rows: [WireSessionSummary])] {
|
private var grouped: [(title: String, rows: [WireSessionSummary])] {
|
||||||
let pool = (showArchived ? store.sessions : store.liveSessions)
|
let pool = (showArchived ? store.sessions : store.liveSessions)
|
||||||
.sorted(by: StatusStyle.attentionThenRecency)
|
.sorted(by: StatusStyle.attentionThenRecency)
|
||||||
let needs = pool.filter { $0.status.needsYou($0.disposition) }
|
// One pass, first bucket wins — the old `done = pool.filter { !needs.contains($0) … }`
|
||||||
let running = pool.filter { $0.status == .running || $0.status == .provisioning || $0.status == .idle }
|
// ran O(rows²) full-summary equality scans on every body evaluation.
|
||||||
let done = pool.filter { !needs.contains($0) && !running.contains($0) }
|
var needs: [WireSessionSummary] = [], running: [WireSessionSummary] = [], done: [WireSessionSummary] = []
|
||||||
|
for summary in pool {
|
||||||
|
if summary.status.needsYou(summary.disposition) { needs.append(summary) }
|
||||||
|
else if summary.status == .running || summary.status == .provisioning || summary.status == .idle {
|
||||||
|
running.append(summary)
|
||||||
|
} else { done.append(summary) }
|
||||||
|
}
|
||||||
return [("Needs you", needs), ("Running", running), ("Done", done)].filter { !$0.rows.isEmpty }
|
return [("Needs you", needs), ("Running", running), ("Done", done)].filter { !$0.rows.isEmpty }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user