From b9fad57d3e427d345ff229f9534947c19cf98587 Mon Sep 17 00:00:00 2001 From: Beingpax Date: Tue, 5 Aug 2025 21:45:11 +0545 Subject: [PATCH] feat: Update Power Mode session dynamically --- VoiceInk/Notifications/AppNotifications.swift | 5 +++++ .../PowerMode/PowerModeSessionManager.swift | 21 +++++++++++++++++++ VoiceInk/Services/AIEnhancementService.swift | 3 +++ VoiceInk/Services/AIService.swift | 2 ++ .../AI Models/LanguageSelectionView.swift | 1 + .../WhisperState+ModelManagement.swift | 2 +- 6 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 VoiceInk/Notifications/AppNotifications.swift diff --git a/VoiceInk/Notifications/AppNotifications.swift b/VoiceInk/Notifications/AppNotifications.swift new file mode 100644 index 0000000..4455b26 --- /dev/null +++ b/VoiceInk/Notifications/AppNotifications.swift @@ -0,0 +1,5 @@ +import Foundation + +extension Notification.Name { + static let AppSettingsDidChange = Notification.Name("appSettingsDidChange") +} diff --git a/VoiceInk/PowerMode/PowerModeSessionManager.swift b/VoiceInk/PowerMode/PowerModeSessionManager.swift index eb274b2..728bf4b 100644 --- a/VoiceInk/PowerMode/PowerModeSessionManager.swift +++ b/VoiceInk/PowerMode/PowerModeSessionManager.swift @@ -56,6 +56,8 @@ class PowerModeSessionManager { originalState: originalState ) saveSession(newSession) + + NotificationCenter.default.addObserver(self, selector: #selector(updateSessionSnapshot), name: .AppSettingsDidChange, object: nil) await applyConfiguration(config) } @@ -64,9 +66,28 @@ class PowerModeSessionManager { guard let session = loadSession() else { return } await restoreState(session.originalState) + + NotificationCenter.default.removeObserver(self, name: .AppSettingsDidChange, object: nil) clearSession() } + + @objc private func updateSessionSnapshot() { + guard var session = loadSession(), let whisperState = whisperState, let enhancementService = enhancementService else { return } + + let updatedState = ApplicationState( + isEnhancementEnabled: enhancementService.isEnhancementEnabled, + useScreenCaptureContext: enhancementService.useScreenCaptureContext, + selectedPromptId: enhancementService.selectedPromptId?.uuidString, + selectedAIProvider: enhancementService.getAIService()?.selectedProvider.rawValue, + selectedAIModel: enhancementService.getAIService()?.currentModel, + selectedLanguage: UserDefaults.standard.string(forKey: "SelectedLanguage"), + transcriptionModelName: whisperState.currentTranscriptionModel?.name + ) + + session.originalState = updatedState + saveSession(session) + } private func applyConfiguration(_ config: PowerModeConfig) async { guard let enhancementService = enhancementService else { return } diff --git a/VoiceInk/Services/AIEnhancementService.swift b/VoiceInk/Services/AIEnhancementService.swift index 3d7a134..b9b601a 100644 --- a/VoiceInk/Services/AIEnhancementService.swift +++ b/VoiceInk/Services/AIEnhancementService.swift @@ -17,6 +17,7 @@ class AIEnhancementService: ObservableObject { if isEnhancementEnabled && selectedPromptId == nil { selectedPromptId = customPrompts.first?.id } + NotificationCenter.default.post(name: .AppSettingsDidChange, object: nil) } } @@ -29,6 +30,7 @@ class AIEnhancementService: ObservableObject { @Published var useScreenCaptureContext: Bool { didSet { UserDefaults.standard.set(useScreenCaptureContext, forKey: "useScreenCaptureContext") + NotificationCenter.default.post(name: .AppSettingsDidChange, object: nil) } } @@ -43,6 +45,7 @@ class AIEnhancementService: ObservableObject { @Published var selectedPromptId: UUID? { didSet { UserDefaults.standard.set(selectedPromptId?.uuidString, forKey: "selectedPromptId") + NotificationCenter.default.post(name: .AppSettingsDidChange, object: nil) } } diff --git a/VoiceInk/Services/AIService.swift b/VoiceInk/Services/AIService.swift index 69e19b6..944d9c2 100644 --- a/VoiceInk/Services/AIService.swift +++ b/VoiceInk/Services/AIService.swift @@ -171,6 +171,7 @@ class AIService: ObservableObject { } } } + NotificationCenter.default.post(name: .AppSettingsDidChange, object: nil) } } @@ -261,6 +262,7 @@ class AIService: ObservableObject { } objectWillChange.send() + NotificationCenter.default.post(name: .AppSettingsDidChange, object: nil) } func saveAPIKey(_ key: String, completion: @escaping (Bool) -> Void) { diff --git a/VoiceInk/Views/AI Models/LanguageSelectionView.swift b/VoiceInk/Views/AI Models/LanguageSelectionView.swift index 8811ef2..140e11e 100644 --- a/VoiceInk/Views/AI Models/LanguageSelectionView.swift +++ b/VoiceInk/Views/AI Models/LanguageSelectionView.swift @@ -22,6 +22,7 @@ struct LanguageSelectionView: View { // Post notification for language change NotificationCenter.default.post(name: .languageDidChange, object: nil) + NotificationCenter.default.post(name: .AppSettingsDidChange, object: nil) } // Function to check if current model is multilingual diff --git a/VoiceInk/Whisper/WhisperState+ModelManagement.swift b/VoiceInk/Whisper/WhisperState+ModelManagement.swift index 6457047..026ba67 100644 --- a/VoiceInk/Whisper/WhisperState+ModelManagement.swift +++ b/VoiceInk/Whisper/WhisperState+ModelManagement.swift @@ -25,9 +25,9 @@ extension WhisperState { if model.provider != .local { self.isModelLoaded = true } - // Post notification about the model change NotificationCenter.default.post(name: .didChangeModel, object: nil, userInfo: ["modelName": model.name]) + NotificationCenter.default.post(name: .AppSettingsDidChange, object: nil) } func refreshAllAvailableModels() {