165 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
5ca848af91 Add TranscriptionServiceRegistry to eliminate duplicate service routing logic
- Create centralized registry for managing transcription services
- Replace duplicate switch statements across 4 manager classes
- Consolidate service initialization into single registry pattern
- Add cleanup method to registry for resource management
- Ensure fresh service registry on each transcription request
2025-12-18 21:29:35 +05:45
Beingpax
85e26856df Optimize recorder startup 2025-12-07 09:26:52 +05:45
Beingpax
b754f39d89 Remove text formatting during Paste operation 2025-12-04 19:06:20 +05:45
Beingpax
ac1a85c056 Improved text formatting during paste operation 2025-11-28 20:39:43 +05:45
Beingpax
5f59b61ee8 Remove toggle switch for word replacements 2025-11-07 10:47:25 +05:45
Beingpax
489f2eaf0c Fix logs showing private instead of actual transcription text 2025-11-07 09:34:18 +05:45
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
4bff63dc00 Prevent UI stuck state when switching between mini and notch recorders 2025-11-01 10:15:32 +05:45
Prakash Joshi Pax
d73f5bb926
Merge pull request #344 from ebrindley/fix/double-resume-checked-continuation
fix: prevent double resume of checked continuations causing EXC_BREAKPOINT crashes
2025-10-31 11:26:12 +05:45
Beingpax
f6402b1520 feat: Adding support for soniox v3 2025-10-28 22:31:16 +05:45
Ed Brindley
50928181e9 fix: prevent double resume of checked continuations causing EXC_BREAKPOINT crashes
Add atomic guards using ManagedAtomic to ensure continuations are resumed
exactly once in TaskDelegate, downloadFileWithProgress, and unzipCoreMLFile
functions. This resolves crashes during model downloads and transcription
when multiple callback paths race to resume the same continuation.

Changes:
- Import Atomics framework for atomic operations
- Add ManagedAtomic guards to prevent double resume
- Implement finishOnce helper pattern for consistent error handling
- Add proper cancellation handling in downloadFileWithProgress

Fixes crashes with stack trace: EXC_BREAKPOINT → _assertionFailure →
CheckedContinuation.resume(returning:) → VoiceInk [0x102dbfcc4, 0x102dc1174]
2025-10-28 05:54:16 -04:00
Beingpax
9068539043 Fix power mode selection UI 2025-10-27 17:02:03 +05:45
Beingpax
b52cb36bb8 Remove power mode activation persistence 2025-10-27 16:41:51 +05:45
Beingpax
95790c4a58 Log raw, filtered, formatted, replaced, and AI-enhanced text 2025-10-25 09:57:14 +05:45
Beingpax
b568fb9fa0 Auto warm-up downloaded Whisper models after downloading 2025-10-19 19:56:07 +05:45
Beingpax
a0e4dd1367 Added support for V2 and V3 models 2025-10-19 14:01:31 +05:45
Beingpax
14d52a9c08 Fix screen capture crash by isolating services 2025-10-18 22:07:48 +05:45
Beingpax
07e8c0dddf Fix immediate deletion breaking transcription process 2025-10-10 22:10:32 +05:45
Beingpax
cba11cdc55 Capture clipboard context and screen context at the beginning of the recording. 2025-10-07 09:06:30 +05:45
Beingpax
b7627c9deb Remove screen capture toggle gating 2025-10-06 17:26:38 +05:45
Beingpax
ef5b86e7c3 Centered the recorder 2025-10-05 13:35:27 +05:45
Beingpax
602654e733 Fix cancellation race conditions 2025-10-04 23:08:50 +05:45
Beingpax
eb364416ea Improved cleanup and model loading for parakeet 2025-10-04 13:54:10 +05:45
Beingpax
a37b95620c Improced the recording/transcription flow 2025-09-28 20:54:05 +05:45
Beingpax
0508c3a3b1 Rename and relocate transcription filter 2025-09-27 11:57:39 +05:45
wobondar
2105ae4844
feat: Add Power Mode display to transcription history 2025-09-25 21:22:52 +01:00
Beingpax
7dcf982b60 Updated to version 1.57 2025-09-24 21:08:22 +05:45
Beingpax
97c6234fb3 Respect VAD flag, downloading & updated to latest version 2025-09-20 17:00:28 +05:45
Beingpax
afd6e91207 Centralize text formatting in main flows 2025-09-19 09:09:05 +05:45
Beingpax
ba4a5d3f86 Fix hallucination filter issue 2025-09-18 10:47:02 +05:45
Beingpax
cb74f2fb12 Simplify hallucination filter angle tags 2025-09-16 17:38:48 +05:45
Beingpax
2b787e8e64 Centralize hallucination filter 2025-09-16 17:30:46 +05:45
Alexey Haidamaka
889c3e5265 add capability to see ai request in history view 2025-09-14 00:24:10 +02:00
Beingpax
53d1507a53 improve hallucination filter and integrate with parakeet transcription service 2025-09-06 16:56:28 +05:45
Beingpax
4c940749ab Add trailing space setting for CJK languages 2025-09-01 14:34:28 +05:45
Beingpax
8f0b344721 Reset recording state on app launch 2025-08-30 08:21:10 +05:45
Beingpax
2aac1020f8 Added support for preserving the prompt used during enhancement on 2025-08-26 21:34:54 +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
Beingpax
6a308b81bf Update app to support Parakeet B3 model 2025-08-25 13:00:35 +05:45
Beingpax
2708cc502a Added support for Gemini models for transcription 2025-08-25 12:00:15 +05:45
gritse
35918eb473 Add App Intents support for mini recorder control 2025-08-23 20:55:31 +02:00
Beingpax
73bb3e765a Remove dictionary item dependency on local Whisper model 2025-08-23 22:15:13 +05:45
Beingpax
87593ac243 Fix AVFoundation failing to get the audio duration 2025-08-14 19:54:19 +05:45
Beingpax
f909185eac Add flash attention 2025-08-14 10:47:28 +05:45
Beingpax
a8db010900 Added support for adding fine-tuned local whisper models. 2025-08-13 14:04:34 +05:45
Beingpax
6ad4d70760 Removed session management & use power mode with a new default mode. 2025-08-12 22:33:10 +05:45
Beingpax
6935f58737 Recorder error loggin. 2025-08-12 21:05:53 +05:45
Beingpax
0c517c728b Improved cursorpaster with clipboard restoration 2025-08-08 20:56:54 +05:45
Beingpax
d363808a7b revert copy to clipboard 2025-08-07 10:09:02 +05:45