Surface "Your name" as its own top Settings section
The name field was the first row of the third "Transcription" section, below the fold — users couldn't find where to set their name (it's the setting that labels the mic channel and reserves the name so the LLM never assigns it to another speaker). Move it into a dedicated "Your name" section at the top of Settings, and show an orange nudge while it's still the placeholder "Me"/empty.
This commit is contained in:
@@ -7,6 +7,21 @@ struct SettingsView: View {
|
||||
|
||||
var body: some View {
|
||||
Form {
|
||||
Section("Your name") {
|
||||
TextField("Your name", text: $settings.selfName)
|
||||
.textFieldStyle(.roundedBorder)
|
||||
if isDefaultName {
|
||||
Label("Still set to the default. Enter your real name so your own voice is labeled correctly — and so the AI never gives your name to someone else.",
|
||||
systemImage: "exclamationmark.triangle.fill")
|
||||
.font(.caption)
|
||||
.foregroundStyle(.orange)
|
||||
} else {
|
||||
Text("Labels your microphone channel as you in every transcript, and reserves this name so it’s never assigned to another speaker.")
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
|
||||
Section("SparkControl backend") {
|
||||
TextField("Base URL", text: $settings.backendBaseURL)
|
||||
.textFieldStyle(.roundedBorder)
|
||||
@@ -22,8 +37,6 @@ struct SettingsView: View {
|
||||
}
|
||||
|
||||
Section("Transcription") {
|
||||
TextField("Your name", text: $settings.selfName)
|
||||
.textFieldStyle(.roundedBorder)
|
||||
Toggle("Auto-send recordings to backend", isOn: $settings.autoSendOnStop)
|
||||
Toggle("Reconcile speakers (merge splits + name from content)", isOn: $settings.reconcileSpeakers)
|
||||
Toggle("Build readable recap (topics + highlights)", isOn: $settings.recapEnabled)
|
||||
@@ -33,7 +46,7 @@ struct SettingsView: View {
|
||||
}
|
||||
Button("Manage…") { TemplatesWindow.shared.show(settings: settings) }
|
||||
}
|
||||
Text("Your name labels your mic channel. Auto-send transcribes on stop; the recap writes transcript.md + recap.html. Templates define the takeaways categories per meeting type.")
|
||||
Text("Auto-send transcribes on stop; the recap writes transcript.md + recap.html. Templates define the takeaways categories per meeting type.")
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
@@ -63,6 +76,12 @@ struct SettingsView: View {
|
||||
.navigationTitle("Settings")
|
||||
}
|
||||
|
||||
/// True while the user still has the placeholder name — drives the inline nudge.
|
||||
private var isDefaultName: Bool {
|
||||
let n = settings.selfName.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
return n.isEmpty || n.caseInsensitiveCompare("Me") == .orderedSame
|
||||
}
|
||||
|
||||
private func binding(for key: String) -> Binding<Bool> {
|
||||
Binding(
|
||||
get: { settings.adapterEnabled[key] ?? true },
|
||||
|
||||
Reference in New Issue
Block a user