56 lines
1.8 KiB
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()
|
|
}
|
|
}
|
|
} |