Skip to content

Commit 8875087

Browse files
committed
simplify
1 parent e549af8 commit 8875087

1 file changed

Lines changed: 6 additions & 23 deletions

File tree

Sources/SQLiteData/CloudKit/SyncEngine.swift

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import OrderedCollections
66
import OSLog
77
import Observation
8-
import Perception
98
import StructuredQueriesCore
109
import SwiftData
1110
import TabularData
@@ -38,6 +37,7 @@
3837
private let observationRegistrar = ObservationRegistrar()
3938
private let notificationsObserver = LockIsolated<(any NSObjectProtocol)?>(nil)
4039
private let activityCounts = LockIsolated(ActivityCounts())
40+
private let startTask = LockIsolated<Task<Void, Never>?>(nil)
4141

4242
/// The error message used when a write occurs to a record for which the current user does not
4343
/// have permission.
@@ -424,19 +424,6 @@
424424
}
425425
}
426426

427-
private let _isReady = LockIsolated(false)
428-
private var isReady: Bool {
429-
get {
430-
observationRegistrar.access(self, keyPath: \.isReady)
431-
return _isReady.withValue(\.self)
432-
}
433-
set {
434-
observationRegistrar.withMutation(of: self, keyPath: \.isReady) {
435-
_isReady.withValue { $0 = newValue }
436-
}
437-
}
438-
}
439-
440427
/// Determines if the sync engine is currently running or not.
441428
public var isRunning: Bool {
442429
observationRegistrar.access(self, keyPath: \.isRunning)
@@ -512,7 +499,7 @@
512499
)
513500
}
514501

515-
return Task {
502+
let startTask = Task<Void, Never> {
516503
await withErrorReporting(.sqliteDataCloudKitFailure) {
517504
guard try await container.accountStatus() == .available
518505
else { return }
@@ -523,8 +510,9 @@
523510
)
524511
try await cacheUserTables(recordTypes: currentRecordTypes)
525512
}
526-
isReady = true
527513
}
514+
self.startTask.withValue { $0 = startTask }
515+
return startTask
528516
}
529517

530518
/// Fetches pending remote changes from the server.
@@ -538,7 +526,7 @@
538526
public func fetchChanges(
539527
_ options: CKSyncEngine.FetchChangesOptions = CKSyncEngine.FetchChangesOptions()
540528
) async throws {
541-
await isReady()
529+
await startTask.withValue(\.self)?.value
542530
let (privateSyncEngine, sharedSyncEngine) = syncEngines.withValue {
543531
($0.private, $0.shared)
544532
}
@@ -560,7 +548,7 @@
560548
public func sendChanges(
561549
_ options: CKSyncEngine.SendChangesOptions = CKSyncEngine.SendChangesOptions()
562550
) async throws {
563-
await isReady()
551+
await startTask.withValue(\.self)?.value
564552
let (privateSyncEngine, sharedSyncEngine) = syncEngines.withValue {
565553
($0.private, $0.shared)
566554
}
@@ -571,11 +559,6 @@
571559
_ = try await (`private`, shared)
572560
}
573561

574-
private func isReady() async {
575-
guard !isRunning else { return }
576-
_ = await Perceptions { self.isReady }.first(where: { $0 })
577-
}
578-
579562
/// Synchronizes local and remote pending changes.
580563
///
581564
/// Use this method to ensure the sync engine immediately fetches all pending remote changes

0 commit comments

Comments
 (0)