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.", .step: "This snapshot changed nothing.",
] ]
struct ChangesMemory { @MainActor
@Observable
final class ChangesMemory {
var open: Set<String> = [] var open: Set<String> = []
var range = ChangeMode.main var range = ChangeMode.main
var pinRange = ChangeMode.step var pinRange = ChangeMode.step
@@ -41,9 +43,7 @@ final class ChangesModel {
private(set) var changes: TaskChanges? private(set) var changes: TaskChanges?
private(set) var error = "" private(set) var error = ""
private(set) var diffs: [String: Result<String, ApiError>] = [:] private(set) var diffs: [String: Result<String, ApiError>] = [:]
private(set) var open: Set<String> private let memory: ChangesMemory
private(set) var range: ChangeMode
private(set) var pinRange: ChangeMode
@ObservationIgnored private var loading = false @ObservationIgnored private var loading = false
@ObservationIgnored private var again = false @ObservationIgnored private var again = false
@ObservationIgnored private var timer: Task<Void, Never>? @ObservationIgnored private var timer: Task<Void, Never>?
@@ -53,11 +53,13 @@ final class ChangesModel {
init(_ store: Store) { init(_ store: Store) {
self.store = store self.store = store
open = store.changesMemory.open memory = store.changesMemory
range = store.changesMemory.range
pinRange = store.changesMemory.pinRange
} }
var open: Set<String> { memory.open }
var range: ChangeMode { memory.range }
var pinRange: ChangeMode { memory.pinRange }
var pinned: Int? { var pinned: Int? {
store.pinned store.pinned
} }
@@ -160,8 +162,7 @@ final class ChangesModel {
if range == r { if range == r {
return return
} }
range = r memory.range = r
store.changesMemory.range = r
retarget() retarget()
} }
@@ -169,18 +170,16 @@ final class ChangesModel {
if pinRange == r { if pinRange == r {
return return
} }
pinRange = r memory.pinRange = r
store.changesMemory.pinRange = r
retarget() retarget()
} }
func setOpen(_ path: String, _ on: Bool) { func setOpen(_ path: String, _ on: Bool) {
if on { if on {
open.insert(path) memory.open.insert(path)
} else { } else {
open.remove(path) memory.open.remove(path)
} }
store.changesMemory.open = open
} }
func shows(_ a: LineAnchor) -> Bool { func shows(_ a: LineAnchor) -> Bool {
+1 -1
View File
@@ -88,7 +88,7 @@ final class Store {
@ObservationIgnored private var globalStream: EventStream? @ObservationIgnored private var globalStream: EventStream?
@ObservationIgnored private var leadStream: EventStream? @ObservationIgnored private var leadStream: EventStream?
@ObservationIgnored private var stopped = false @ObservationIgnored private var stopped = false
@ObservationIgnored var changesMemory = ChangesMemory() let changesMemory = ChangesMemory()
@ObservationIgnored private var localSends: [String: LocalSends] = [:] @ObservationIgnored private var localSends: [String: LocalSends] = [:]
init(api: API, images: ImageDrafts, forwards: Forwards) { init(api: API, images: ImageDrafts, forwards: Forwards) {