30 Commits

Author SHA1 Message Date
Beingpax
60125c316b Migrate dictionary data from UserDefaults to SwiftData
Migrates vocabulary words and word replacements from UserDefaults to SwiftData for better data management and persistence.

Changes:
- Create VocabularyWord and WordReplacement SwiftData models
- Add dual ModelConfiguration setup (default.store for transcripts, dictionary.store for dictionary data)
- Implement DictionaryMigrationService for one-time UserDefaults→SwiftData migration
- Rename "Correct Spellings" to "Vocabulary" for clearer terminology
- Update all dictionary views to use @Query instead of manager classes
- Update all services to fetch from SwiftData using FetchDescriptor
- Enhance word replacement duplicate detection (now checks during add AND edit)
- Update import/export services to work with SwiftData
- Preserve all existing functionality with improved data integrity

Technical details:
- Separate store files: default.store (transcripts) + dictionary.store (vocabulary + replacements)
- Migration flag: "HasMigratedDictionaryToSwiftData_v2"
- All CRUD operations properly implemented with duplicate detection
2025-12-28 12:09:43 +05:45
Beingpax
a2f19b04c6 Add model prewarm service on system wake and app launch 2025-12-17 21:23:30 +05:45
Prakash Joshi Pax
37f3ee25e4
Merge pull request #358 from tmm22/fix/production-critical-safety-improvements
Fix critical production safety issues
2025-11-06 18:45:26 +05:45
Beingpax
227c33955a Fix menu bar issue 2025-11-06 17:46:32 +05:45
Deborah Mangan
d1158feef4 refactor: Replace try! with safe ModelContainer initialization fallbacks
- Remove try! force operation that could crash on in-memory container failure
- Implement cascading fallback strategy with 3 initialization attempts:
  1. Persistent storage (normal operation)
  2. In-memory storage with user warning
  3. Ultra-minimal default container
- Add containerInitializationFailed flag to track critical failures
- Extract container creation into static helper methods for better error handling
- Show user-friendly error dialog and graceful termination on total failure
- Only use preconditionFailure as absolute last resort after all attempts fail

Addresses AI code reviewer feedback about unsafe force operations.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-11-03 10:39:40 +10:00
Deborah Mangan
f261e4937b Fix critical production safety issues
- Replace force-unwrapped URLs in cloud transcription services with safe guard statements
  * GroqTranscriptionService: Add URL validation before use
  * ElevenLabsTranscriptionService: Add URL validation before use
  * MistralTranscriptionService: Add URL validation before use
  * OpenAICompatibleTranscriptionService: Add URL validation before use

- Replace fatalError in VoiceInk.swift with graceful degradation
  * Implement in-memory fallback when persistent storage fails
  * Add user notification for storage issues
  * Use proper logging instead of fatal crash

- Fix dictionary force unwrap in WhisperPrompt.swift
  * Add safe fallback when default language prompt missing
  * Prevent potential crash on dictionary access

- Wrap debug print statement in #if DEBUG directive
  * Eliminate production logging overhead in VoiceInk.swift

These changes prevent 6+ potential crash scenarios while maintaining
full functionality with graceful error handling.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-11-03 10:39:35 +10:00
Beingpax
73318967ac Fix window duplication issue 2025-10-30 21:58:18 +05:45
Beingpax
c7030276eb Refactor: Centralize window and menu bar management 2025-10-30 21:12:59 +05:45
Beingpax
7a7dbaecab Remove the power mode UI by default. 2025-10-17 13:11:51 +05:45
huisang
e05b9f071f feat: windowStyle set to hiddenTitleBar 2025-10-15 15:50:48 +08:00
Beingpax
febd75cc39 Unified logging + fluidAudio's logging 2025-10-08 11:30:50 +05:45
Beingpax
520272f5ad Remove new window creation 2025-10-04 15:42:31 +05:45
Beingpax
2663096eb2 Added a switch for announcement service. 2025-09-29 09:23:13 +05:45
Alexey Haidamaka
f74bbd7f5a add open with handling 2025-09-03 16:31:46 +02:00
Beingpax
8f0b344721 Reset recording state on app launch 2025-08-30 08:21:10 +05:45
Prakash Joshi Pax
4dc50ec9ee
Merge pull request #249 from gritse/feature/app-intents-support
Add App Intents support for mini recorder control
2025-08-26 20:57:50 +05:45
Val V
bbf929e36e Add a setting to disable auto update checks 2025-08-26 01:01:18 +00:00
gritse
35918eb473 Add App Intents support for mini recorder control 2025-08-23 20:55:31 +02:00
Beingpax
79ba95ccad Add announcement service for important notice/updates 2025-08-13 17:26:30 +05:45
Beingpax
a3c302b50b Update TranscriptCleanup with interval settings 2025-08-13 09:07:08 +05:45
Beingpax
2970895376 Support for zero data retention on 2025-08-07 01:18:35 +05:45
Beingpax
3e609d1e3b Refactor: Unify and improve hotkey settings UI 2025-07-01 22:52:09 +05:45
Beingpax
a821b201c7 Fixed menubar icon 2025-06-07 17:25:44 +05:45
Beingpax
d7c23f91d0 fix: Update menu bar icon to use AppIcon 2025-06-07 17:24:05 +05:45
Beingpax
b09443bc09 Improved Onboarding Window+ License/buy buttons 2025-06-05 14:51:41 +05:45
Beingpax
8dc622e077 feat: better super whisper-like power mode with improved UX 2025-05-24 12:38:30 +05:45
Beingpax
19142522bd Added support for removing recordings older than x days. 2025-03-12 14:11:39 +05:45
Beingpax
57e5d456a6 feat: Enhance audio visualization and recording integration - Improved audio meter visualization, removed debug logs, optimized updates 2025-03-03 21:34:09 +05:45
Beingpax
b5773b38a1 Multiple improvements: Removed migration code, updated sound files, improved prompt templates 2025-02-25 11:50:50 +05:45
Beingpax
76a154706c Initial commit: Open-sourcing VoiceInk 2025-02-22 11:52:41 +05:45