fix: iOS ChlorineView lsvManualPeaks -> clManualPeaks, Storage concurrency

This commit is contained in:
jess 2026-04-03 01:54:18 -07:00
parent cabf04551c
commit 01edb88e0b
3 changed files with 8 additions and 5 deletions

View File

@ -72,6 +72,7 @@ final class AppState {
var clDepT: String = "5000" var clDepT: String = "5000"
var clMeasT: String = "5000" var clMeasT: String = "5000"
var clRtia: LpRtia = .r10K var clRtia: LpRtia = .r10K
var clManualPeaks: Bool = false
// pH // pH
var phResult: PhResult? = nil var phResult: PhResult? = nil

View File

@ -231,9 +231,10 @@ final class Storage: @unchecked Sendable {
// MARK: - Observation (for SwiftUI live updates) // MARK: - Observation (for SwiftUI live updates)
@MainActor
func observeDataPoints( func observeDataPoints(
measurementId: Int64, measurementId: Int64,
onChange: @escaping ([DataPoint]) -> Void onChange: @escaping @Sendable ([DataPoint]) -> Void
) -> DatabaseCancellable { ) -> DatabaseCancellable {
let observation = ValueObservation.tracking { db in let observation = ValueObservation.tracking { db in
try DataPoint try DataPoint
@ -244,7 +245,8 @@ final class Storage: @unchecked Sendable {
return observation.start(in: dbQueue, onError: { _ in }, onChange: onChange) return observation.start(in: dbQueue, onError: { _ in }, onChange: onChange)
} }
func observeSessions(onChange: @escaping ([Session]) -> Void) -> DatabaseCancellable { @MainActor
func observeSessions(onChange: @escaping @Sendable ([Session]) -> Void) -> DatabaseCancellable {
let observation = ValueObservation.tracking { db in let observation = ValueObservation.tracking { db in
try Session.order(Column("startedAt").desc).fetchAll(db) try Session.order(Column("startedAt").desc).fetchAll(db)
} }

View File

@ -43,9 +43,9 @@ struct ChlorineView: View {
Button("Start LSV") { state.startLSV() } Button("Start LSV") { state.startLSV() }
.buttonStyle(ActionButtonStyle(color: .green)) .buttonStyle(ActionButtonStyle(color: .green))
Button(state.lsvManualPeaks ? "Manual" : "Auto") { Button(state.clManualPeaks ? "Manual" : "Auto") {
state.lsvManualPeaks.toggle() state.clManualPeaks.toggle()
if state.lsvManualPeaks { if state.clManualPeaks {
state.lsvPeaks.removeAll() state.lsvPeaks.removeAll()
} else { } else {
state.lsvPeaks = detectLsvPeaks(state.lsvPoints) state.lsvPeaks = detectLsvPeaks(state.lsvPoints)