Skip to content

Commit 71457f7

Browse files
committed
feat(ai-enhancement): default new users to Clean Transcript preset
Previously, first launch (and post-reset launches) landed users on a basic generic prompt labeled "Custom" instead of the "Clean Transcript" built-in preset. This one-shot migration selects Clean Transcript when the user has no preset chosen and the stored prompt still matches the old hardcoded default — existing customizations are preserved. resetAllSettings now also clears aiEnhancementPrompt, selectedPresetId, and the migration flag so reset+relaunch re-applies the default.
1 parent 85ef8d1 commit 71457f7

2 files changed

Lines changed: 37 additions & 0 deletions

File tree

Pindrop/AppCoordinator.swift

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,38 @@ final class AppCoordinator {
745745
} catch {
746746
Log.app.error("Failed to seed built-in presets: \(error)")
747747
}
748+
749+
applyDefaultPromptPresetIfNeeded()
750+
}
751+
752+
/// One-shot migration: select the "Clean Transcript" built-in preset as the
753+
/// default for users who never explicitly chose a preset and never
754+
/// customized the generic fallback prompt.
755+
private func applyDefaultPromptPresetIfNeeded() {
756+
guard !settingsStore.didMigrateToCleanTranscriptDefault else { return }
757+
guard settingsStore.selectedPresetId == nil else {
758+
settingsStore.didMigrateToCleanTranscriptDefault = true
759+
return
760+
}
761+
guard settingsStore.aiEnhancementPrompt == SettingsStore.Defaults.aiEnhancementPrompt else {
762+
settingsStore.didMigrateToCleanTranscriptDefault = true
763+
return
764+
}
765+
766+
do {
767+
let builtIns = try promptPresetStore.fetchBuiltIn()
768+
let target = BuiltInPresets.defaultPreset.identifier
769+
if let preset = builtIns.first(where: { $0.builtInIdentifier == target }) {
770+
settingsStore.selectedPresetId = preset.id.uuidString
771+
Log.app.info("Applied default prompt preset '\(preset.name)' for new user")
772+
} else {
773+
Log.app.error("Default prompt preset '\(target)' not found after seeding")
774+
}
775+
} catch {
776+
Log.app.error("Failed to apply default prompt preset: \(error)")
777+
}
778+
779+
settingsStore.didMigrateToCleanTranscriptDefault = true
748780
}
749781

750782
private func refreshStatusBarPresets() {

Pindrop/Services/SettingsStore.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,8 @@ final class SettingsStore: ObservableObject {
259259
var aiEnhancementPrompt: String = Defaults.aiEnhancementPrompt
260260
@AppStorage("noteEnhancementPrompt", store: SettingsStoreRuntime.appStorageStore)
261261
var noteEnhancementPrompt: String = Defaults.noteEnhancementPrompt
262+
@AppStorage("didMigrateToCleanTranscriptDefault", store: SettingsStoreRuntime.appStorageStore)
263+
var didMigrateToCleanTranscriptDefault: Bool = false
262264
@AppStorage("floatingIndicatorEnabled", store: SettingsStoreRuntime.appStorageStore)
263265
var floatingIndicatorEnabled: Bool = Defaults.floatingIndicatorEnabled
264266
@AppStorage("floatingIndicatorType", store: SettingsStoreRuntime.appStorageStore)
@@ -794,6 +796,9 @@ final class SettingsStore: ObservableObject {
794796
selectedLanguage = Defaults.selectedLanguage
795797
selectedInputDeviceUID = Defaults.selectedInputDeviceUID
796798
aiEnhancementEnabled = false
799+
aiEnhancementPrompt = Defaults.aiEnhancementPrompt
800+
selectedPresetId = nil
801+
didMigrateToCleanTranscriptDefault = false
797802
aiProvider = AIProvider.openai.rawValue
798803
customLocalProviderType = CustomProviderType.custom.rawValue
799804
floatingIndicatorEnabled = Defaults.floatingIndicatorEnabled

0 commit comments

Comments
 (0)