feat: actually implement system audio + refactor
This commit is contained in:
+17
-73
@@ -8,80 +8,24 @@
|
||||
import SwiftUI
|
||||
|
||||
struct ContentView: View {
|
||||
@StateObject private var audioManager = SimpleAudioManager()
|
||||
@State private var deepgramKey = ""
|
||||
@State private var openAIKey = ""
|
||||
@State private var userBlurb = ""
|
||||
@State private var systemPrompt = "Generate meeting notes from transcript and notes."
|
||||
|
||||
var body: some View {
|
||||
VStack(spacing: 20) {
|
||||
Text("Notetaker Settings")
|
||||
.font(.title)
|
||||
|
||||
TextField("Deepgram API Key", text: $deepgramKey)
|
||||
TextField("OpenAI API Key", text: $openAIKey)
|
||||
TextField("About Yourself (for prompt)", text: $userBlurb)
|
||||
TextEditor(text: $systemPrompt)
|
||||
.frame(height: 100)
|
||||
|
||||
Button("Save") {
|
||||
saveSettings()
|
||||
}
|
||||
|
||||
Divider()
|
||||
|
||||
Toggle("Capture System Audio", isOn: $audioManager.captureSystemAudio)
|
||||
.disabled(audioManager.isRecording)
|
||||
|
||||
HStack {
|
||||
Button("Start Recording") {
|
||||
audioManager.startRecording()
|
||||
}
|
||||
.disabled(audioManager.isRecording)
|
||||
|
||||
Button("Stop Recording") {
|
||||
audioManager.stopRecording()
|
||||
}
|
||||
.disabled(!audioManager.isRecording)
|
||||
}
|
||||
|
||||
if audioManager.isRecording {
|
||||
Text(audioManager.captureSystemAudio ? "🔴 Recording microphone + system audio..." : "🔴 Recording microphone...")
|
||||
.foregroundColor(.red)
|
||||
}
|
||||
|
||||
Text("Live Transcript:")
|
||||
.font(.headline)
|
||||
|
||||
ScrollView {
|
||||
Text(audioManager.transcript.isEmpty ? "No transcript yet..." : audioManager.transcript)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.padding()
|
||||
}
|
||||
.frame(height: 150)
|
||||
.border(Color.gray)
|
||||
}
|
||||
.padding()
|
||||
.frame(minWidth: 500, minHeight: 600)
|
||||
.onAppear {
|
||||
loadSettings()
|
||||
}
|
||||
}
|
||||
@State private var showingSettings = false
|
||||
|
||||
func saveSettings() {
|
||||
_ = KeychainHelper.shared.save(deepgramKey, forKey: "deepgramKey")
|
||||
_ = KeychainHelper.shared.save(openAIKey, forKey: "openAIKey")
|
||||
_ = KeychainHelper.shared.save(userBlurb, forKey: "userBlurb")
|
||||
_ = KeychainHelper.shared.save(systemPrompt, forKey: "systemPrompt")
|
||||
print("Settings saved!")
|
||||
}
|
||||
|
||||
private func loadSettings() {
|
||||
deepgramKey = KeychainHelper.shared.get(forKey: "deepgramKey") ?? ""
|
||||
openAIKey = KeychainHelper.shared.get(forKey: "openAIKey") ?? ""
|
||||
userBlurb = KeychainHelper.shared.get(forKey: "userBlurb") ?? ""
|
||||
systemPrompt = KeychainHelper.shared.get(forKey: "systemPrompt") ?? "Generate meeting notes from transcript and notes."
|
||||
var body: some View {
|
||||
VStack {
|
||||
MeetingListView()
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .automatic) {
|
||||
Button {
|
||||
showingSettings = true
|
||||
} label: {
|
||||
Label("Settings", systemImage: "gear")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: $showingSettings) {
|
||||
SettingsView()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user