11import Foundation
22import Combine
3+ import SwiftUI
34
45@MainActor
5- final class GeneralSettingsViewModel : ObservableObject , GeneralSettingsViewModelType {
6+ final class GeneralSettingsViewModel : GeneralSettingsViewModelType {
67 @Published private( set) var availableModels : [ LLMModelInfo ] = [ ]
78 @Published private( set) var selectedModel : LLMModelInfo ?
89 @Published private( set) var selectedProvider : LLMProvider = . default
910 @Published private( set) var autoDetectMeetings : Bool = false
1011 @Published private( set) var isAutoStopRecording : Bool = false
12+ @Published private var customPromptTemplateValue : String = " "
13+
14+ var customPromptTemplate : Binding < String > {
15+ Binding (
16+ get: { self . customPromptTemplateValue } ,
17+ set: { newValue in
18+ Task {
19+ await self . updateCustomPromptTemplate ( newValue)
20+ }
21+ }
22+ )
23+ }
24+
1125 @Published private( set) var isLoading = false
1226 @Published private( set) var errorMessage : String ?
1327 @Published private( set) var showToast = false
@@ -31,7 +45,7 @@ final class GeneralSettingsViewModel: ObservableObject, GeneralSettingsViewModel
3145 init (
3246 llmService: LLMServiceType ,
3347 userPreferencesRepository: UserPreferencesRepositoryType ,
34- environmentValidator: EnvironmentValidatorType = EnvironmentValidator ( ) ,
48+ environmentValidator: EnvironmentValidatorType ,
3549 warningManager: WarningManagerType
3650 ) {
3751 self . llmService = llmService
@@ -58,10 +72,12 @@ final class GeneralSettingsViewModel: ObservableObject, GeneralSettingsViewModel
5872 selectedProvider = preferences. selectedProvider
5973 autoDetectMeetings = preferences. autoDetectMeetings
6074 isAutoStopRecording = preferences. autoStopRecording
75+ customPromptTemplateValue = preferences. summaryPromptTemplate ?? UserPreferencesInfo . defaultPromptTemplate
6176 } catch {
6277 selectedProvider = . default
6378 autoDetectMeetings = false
6479 isAutoStopRecording = false
80+ customPromptTemplateValue = UserPreferencesInfo . defaultPromptTemplate
6581 }
6682 await loadModels ( )
6783 }
@@ -167,4 +183,19 @@ final class GeneralSettingsViewModel: ObservableObject, GeneralSettingsViewModel
167183 isAutoStopRecording = !enabled
168184 }
169185 }
170- }
186+
187+ func updateCustomPromptTemplate( _ template: String ) async {
188+ customPromptTemplateValue = template
189+
190+ do {
191+ let templateToSave = template. isEmpty ? nil : template
192+ try await userPreferencesRepository. updateSummaryPromptTemplate ( templateToSave)
193+ } catch {
194+ errorMessage = error. localizedDescription
195+ }
196+ }
197+
198+ func resetToDefaultPrompt( ) async {
199+ await updateCustomPromptTemplate ( UserPreferencesInfo . defaultPromptTemplate)
200+ }
201+ }
0 commit comments