* fix: prevent model auto-switch from interrupting active transcription
when a model download completes during an active recording/transcription,
the app now skips auto-switching to prevent data loss.
adds is_recording tauri command to check recording state before
auto-switching models on download or extraction completion.
fixes#418
* Update bindings.ts
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* feat: add german, japanese, and chinese translations
adds complete translations for:
- german (de)
- japanese (ja)
- chinese simplified (zh)
builds on the internationalization foundation added in #437.
updates CONTRIBUTING_TRANSLATIONS.md to reflect supported languages.
* fix: escape Chinese quotation marks in zh translation
* cleanup
* remove extra keys for now
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* feat: add Apple Intelligence post-processing provider
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
* feat: guide apple intelligence output
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
* fix(build): add fallback stub for Apple Intelligence on older SDKs
- Checks if 'FoundationModels.framework' is present in the macOS SDK.
- If missing, compiles a stub Swift file that returns 'unavailable' errors instead of failing the build.
- Prevents build errors on older Xcode versions (or macOS versions < 26.0) where the macros are not supported.
* fix(ui): hide Apple Intelligence option when unavailable
- Checks for runtime availability of Apple Intelligence (via 'check_apple_intelligence_availability') in 'settings.rs'.
- Only adds the Apple Intelligence provider to the default settings if it is actually available on the device.
- Ensures the option does not appear in the UI for unsupported Macs (e.g., Intel or older macOS versions), even if the app was built with support enabled.
* move some files around as well as some ui text
* format
---------
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
* fix: re-assert always-on-top for overlay on Windows
On Windows, the recording/transcribing overlay can lose its topmost
Z-order and fall behind other windows during certain window manager
events (e.g., dragging windows, alt-tabbing, or other apps asserting
focus).
This fix uses the Win32 SetWindowPos API directly with HWND_TOPMOST
to aggressively re-assert the overlay's Z-order immediately after
showing it. Key implementation details:
- Uses Tauri 2's WebviewWindow::hwnd() to get the native handle
- Calls SetWindowPos on the main UI thread via run_on_main_thread
- Applies flags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_SHOWWINDOW
- SWP_NOACTIVATE prevents stealing focus from the active window
- SWP_SHOWWINDOW reinforces the topmost state during the show
The fix is called after .show() in both show_recording_overlay and
show_transcribing_overlay, which is more reliable than setting it
before the window is visible.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* keep the fix to windows only
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
* initial specta commands
* refactor to use the bindings in the ui
* merge fixes
* remove unused commands
* add clamshell to lib
* Remove Invoke from everything.
* fix settings not being loaded properly
* fix settings being overwritten due to deserialization failure + remove
provider kind
* fix model loading text bug
* feat: add conversion between Simplified and Traditional Chinese. If the selected language is Simplified or Traditional Chinese, it will convert the text to the selected variant(Simplified or Traditional) after been recognized, depends on opencc, if it is not installed, the conversion will skip.
* Adopting ferrous-opencc makes cross-platform packaging easier.
* feat: add sound duration retrieval for audio feedback
* Trim trailing silence from pop_start.wav and pop_stop.wav
* refactor: simplify sound file and base directory retrieval
* feat: only delay mute if audio feedback is enabled
* change the logic
* simplify new logic
* simplify get_sound_path and get_sound_base_dir, reorder functions
* add implicit blocking to playTestSound
* modify to my pref style
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* feat: add more options for deleting recordings automatically and added button to open the folder that olds the recordings
- deleting automatically options: after certain time, never or preserving certain number of recordings
- new button "Open Recordings Folder" located on History page
* refactor: moved "Delete Recordings" selector to Debug settings
* refactor: simplify opening recordings folder logic by using tauri's opener plugin
* clean up ui and code a bit
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* feat: add fallback microphone for clamshell/desktop mode
* refactor: moved "Closed Laptop Microphone" setting to Debug
* cleanup
* run format
* add check back
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* Fix unstable mute implementation on Windows/Linux
* add some delay before the mute so the audio feedback plays
---------
Co-authored-by: CJ Pais <cj@cjpais.com>