51 lines
1.8 KiB
Swift
51 lines
1.8 KiB
Swift
import Foundation
|
|
import SwiftUI
|
|
|
|
@MainActor
|
|
class SettingsViewModel: ObservableObject {
|
|
@Published var settings: Settings
|
|
@Published var isSaving = false
|
|
@Published var saveSuccessful = false
|
|
@Published var errorMessage: String?
|
|
|
|
init() {
|
|
self.settings = Settings()
|
|
loadSettings()
|
|
}
|
|
|
|
func loadSettings() {
|
|
// Load API keys from Keychain
|
|
settings.deepgramKey = KeychainHelper.shared.get(forKey: "deepgramKey") ?? ""
|
|
settings.openAIKey = KeychainHelper.shared.get(forKey: "openAIKey") ?? ""
|
|
settings.userBlurb = KeychainHelper.shared.get(forKey: "userBlurb") ?? ""
|
|
settings.systemPrompt = KeychainHelper.shared.get(forKey: "systemPrompt") ?? Settings.defaultSystemPrompt
|
|
}
|
|
|
|
func saveSettings() {
|
|
isSaving = true
|
|
errorMessage = nil
|
|
saveSuccessful = false
|
|
|
|
// Save to Keychain
|
|
let deepgramSaved = KeychainHelper.shared.save(settings.deepgramKey, forKey: "deepgramKey")
|
|
let openAISaved = KeychainHelper.shared.save(settings.openAIKey, forKey: "openAIKey")
|
|
let blurbSaved = KeychainHelper.shared.save(settings.userBlurb, forKey: "userBlurb")
|
|
let promptSaved = KeychainHelper.shared.save(settings.systemPrompt, forKey: "systemPrompt")
|
|
|
|
if deepgramSaved && openAISaved && blurbSaved && promptSaved {
|
|
saveSuccessful = true
|
|
// Show success briefly
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in
|
|
self?.saveSuccessful = false
|
|
}
|
|
} else {
|
|
errorMessage = "Failed to save some settings. Please try again."
|
|
}
|
|
|
|
isSaving = false
|
|
}
|
|
|
|
func resetToDefaults() {
|
|
settings.systemPrompt = Settings.defaultSystemPrompt
|
|
}
|
|
} |