Преглед на клиента
Dictaro Client е десктоп приложение, написано на Rust, което превръща говор в текст и го инжектира директно в активното приложение на потребителя. Основната платформа е Windows, с частична поддръжка на macOS (в процес на разработка).
Основни технологии
| Технология | Роля |
|---|---|
| Rust (edition 2024) | Основен език |
| egui / eframe 0.31 | GUI framework (OpenGL на Windows, Metal/OpenGL на macOS) |
| tokio | Асинхронен runtime за мрежови операции |
| tokio-tungstenite | WebSocket клиент за комуникация с ASR сървъра |
| wasapi 0.22 | Аудио захващане на Windows |
| windows-sys 0.59 | Win32 API извиквания (hotkeys, text injection, tray) |
| clap 4.5 | CLI парсер за headless режим |
| rust-i18n 3 | Интернационализация (25 езика) |
| keyring 3 | Credential Manager (Windows/macOS) за JWT и API ключове |
| hound 3.5 | WAV кодиране/декодиране |
Архитектурна диаграма
Модел на нишките
Приложението работи с няколко нишки, координирани чрез crossbeam-channel и Arc<AtomicBool>:
- Main thread -- egui event loop, UI рендериране, координация
- hotkey-poll -- polling на
GetAsyncKeyStateна всеки 20ms - audio-capture -- WASAPI capture loop с event-based wake
- transcription -- собствен tokio runtime за WebSocket комуникация
Жизнен цикъл на приложението
Single-Instance механизъм
На Windows се използва именуван mutex (Global\DictaroSingleInstance). На macOS/Linux -- файлов lock чрез fs2::FileExt::try_lock_exclusive. При опит за стартиране на втора инстанция, потребителят вижда MessageBox (Windows) или конзолно съобщение.
Вход в приложението
Файлът main.rs определя режима на работа:
- CLI режим -- ако има подкоманда (
transcribe,login,status), изпълнява я и приключва - GUI режим -- стартира egui overlay, tray icon, hotkey listener и transcription thread
Конзолният прозорец е скрит в release builds (windows_subsystem = "windows"), но се преоткрива чрез AttachConsole ако има CLI аргументи.