- Replace multiple boolean properties with single OfflineBookmarkSyncState enum - Add Use Case pattern for OfflineSyncManager with dependency injection - Simplify LocalBookmarksSyncView using state-driven UI with external bindings - Convert OfflineBookmarksViewModel to use @Observable instead of ObservableObject - Move credentials from Core Data to Keychain for better persistence - Implement comprehensive database migration for App Group containers - Add structured logging throughout sync operations and API calls Architecture improvements follow MVVM principles with clean separation of concerns.
30 lines
830 B
Swift
30 lines
830 B
Swift
import Foundation
|
|
import Combine
|
|
|
|
protocol POfflineBookmarkSyncUseCase {
|
|
var isSyncing: AnyPublisher<Bool, Never> { get }
|
|
var syncStatus: AnyPublisher<String?, Never> { get }
|
|
|
|
func getOfflineBookmarksCount() -> Int
|
|
func syncOfflineBookmarks() async
|
|
}
|
|
|
|
class OfflineBookmarkSyncUseCase: POfflineBookmarkSyncUseCase {
|
|
private let syncManager = OfflineSyncManager.shared
|
|
|
|
var isSyncing: AnyPublisher<Bool, Never> {
|
|
syncManager.$isSyncing.eraseToAnyPublisher()
|
|
}
|
|
|
|
var syncStatus: AnyPublisher<String?, Never> {
|
|
syncManager.$syncStatus.eraseToAnyPublisher()
|
|
}
|
|
|
|
func getOfflineBookmarksCount() -> Int {
|
|
return syncManager.getOfflineBookmarksCount()
|
|
}
|
|
|
|
func syncOfflineBookmarks() async {
|
|
await syncManager.syncOfflineBookmarks()
|
|
}
|
|
} |