ReadKeep/readeck/UI/Settings/SettingsGeneralViewModel.swift

68 lines
2.0 KiB
Swift

import Foundation
import Observation
import SwiftUI
@Observable
class SettingsGeneralViewModel {
private let saveSettingsUseCase: PSaveSettingsUseCase
private let loadSettingsUseCase: PLoadSettingsUseCase
// MARK: - UI Settings
var selectedTheme: Theme = .system
// MARK: - Sync Settings
var autoSyncEnabled: Bool = true
var syncInterval: Int = 15
// MARK: - Reading Settings
var enableReaderMode: Bool = false
var enableTTS: Bool = false
var autoMarkAsRead: Bool = false
var urlOpener: UrlOpener = .inAppBrowser
// MARK: - Messages
var errorMessage: String?
var successMessage: String?
// MARK: - Data Management (Placeholder)
init(_ factory: UseCaseFactory = DefaultUseCaseFactory.shared) {
self.saveSettingsUseCase = factory.makeSaveSettingsUseCase()
self.loadSettingsUseCase = factory.makeLoadSettingsUseCase()
}
@MainActor
func loadGeneralSettings() async {
do {
if let settings = try await loadSettingsUseCase.execute() {
enableTTS = settings.enableTTS ?? false
selectedTheme = settings.theme ?? .system
urlOpener = settings.urlOpener ?? .inAppBrowser
autoSyncEnabled = false
}
} catch {
errorMessage = "Error loading settings"
}
}
@MainActor
func saveGeneralSettings() async {
do {
try await saveSettingsUseCase.execute(enableTTS: enableTTS)
try await saveSettingsUseCase.execute(theme: selectedTheme)
try await saveSettingsUseCase.execute(urlOpener: urlOpener)
successMessage = "Settings saved"
// send notification to apply settings to the app
NotificationCenter.default.post(name: .settingsChanged, object: nil)
} catch {
errorMessage = "Error saving settings"
}
}
func clearMessages() {
errorMessage = nil
successMessage = nil
}
}