Use one observable source for Changes tab preferences
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user