Use one observable source for Changes tab preferences

This commit is contained in:
Ian Gulliver
2026-10-21 14:10:13 -07:00
parent ef10dc11c5
commit a7cfd91399
2 changed files with 14 additions and 15 deletions
+13 -14
View File
@@ -22,7 +22,9 @@ private let emptyText: [ChangeMode: String] = [
.step: "This snapshot changed nothing.",
]
struct ChangesMemory {
@MainActor
@Observable
final class ChangesMemory {
var open: Set<String> = []
var range = ChangeMode.main
var pinRange = ChangeMode.step
@@ -41,9 +43,7 @@ final class ChangesModel {
private(set) var changes: TaskChanges?
private(set) var error = ""
private(set) var diffs: [String: Result<String, ApiError>] = [:]
private(set) var open: Set<String>
private(set) var range: ChangeMode
private(set) var pinRange: ChangeMode
private let memory: ChangesMemory
@ObservationIgnored private var loading = false
@ObservationIgnored private var again = false
@ObservationIgnored private var timer: Task<Void, Never>?
@@ -53,11 +53,13 @@ final class ChangesModel {
init(_ store: Store) {
self.store = store
open = store.changesMemory.open
range = store.changesMemory.range
pinRange = store.changesMemory.pinRange
memory = store.changesMemory
}
var open: Set<String> { memory.open }
var range: ChangeMode { memory.range }
var pinRange: ChangeMode { memory.pinRange }
var pinned: Int? {
store.pinned
}
@@ -160,8 +162,7 @@ final class ChangesModel {
if range == r {
return
}
range = r
store.changesMemory.range = r
memory.range = r
retarget()
}
@@ -169,18 +170,16 @@ final class ChangesModel {
if pinRange == r {
return
}
pinRange = r
store.changesMemory.pinRange = r
memory.pinRange = r
retarget()
}
func setOpen(_ path: String, _ on: Bool) {
if on {
open.insert(path)
memory.open.insert(path)
} else {
open.remove(path)
memory.open.remove(path)
}
store.changesMemory.open = open
}
func shows(_ a: LineAnchor) -> Bool {
+1 -1
View File
@@ -88,7 +88,7 @@ final class Store {
@ObservationIgnored private var globalStream: EventStream?
@ObservationIgnored private var leadStream: EventStream?
@ObservationIgnored private var stopped = false
@ObservationIgnored var changesMemory = ChangesMemory()
let changesMemory = ChangesMemory()
@ObservationIgnored private var localSends: [String: LocalSends] = [:]
init(api: API, images: ImageDrafts, forwards: Forwards) {