vOOice/VoiceInk/Whisper/WhisperPrompt.swift

56 lines
1.8 KiB
Swift

import Foundation
@MainActor
class WhisperPrompt: ObservableObject {
@Published var transcriptionPrompt: String = UserDefaults.standard.string(forKey: "TranscriptionPrompt") ?? ""
private var dictionaryWords: [String] = []
private let saveKey = "CustomDictionaryItems"
private let basePrompt = """
Hey, How are you doing? Are you good? It's nice to meet after so long.
"""
init() {
loadDictionaryItems()
updateTranscriptionPrompt()
}
private func loadDictionaryItems() {
guard let data = UserDefaults.standard.data(forKey: saveKey) else { return }
if let savedItems = try? JSONDecoder().decode([DictionaryItem].self, from: data) {
let enabledWords = savedItems.filter { $0.isEnabled }.map { $0.word }
dictionaryWords = enabledWords
updateTranscriptionPrompt()
}
}
func updateDictionaryWords(_ words: [String]) {
dictionaryWords = words
updateTranscriptionPrompt()
}
private func updateTranscriptionPrompt() {
var prompt = basePrompt
var allWords = ["VoiceInk"]
allWords.append(contentsOf: dictionaryWords)
if !allWords.isEmpty {
prompt += "\nImportant words: " + allWords.joined(separator: ", ")
}
transcriptionPrompt = prompt
UserDefaults.standard.set(prompt, forKey: "TranscriptionPrompt")
}
func saveDictionaryItems(_ items: [DictionaryItem]) async {
if let encoded = try? JSONEncoder().encode(items) {
UserDefaults.standard.set(encoded, forKey: saveKey)
let enabledWords = items.filter { $0.isEnabled }.map { $0.word }
dictionaryWords = enabledWords
updateTranscriptionPrompt()
}
}
}