Конфигурация
Модулът config.rs управлява потребителските настройки чрез JSON файл. Конфигурацията включва hotkey комбинации, езикови настройки, LLM параметри, overlay позиция и други предпочитания.
Config struct
pub struct Config {
// Горещи клавиши
pub hotkey: String, // "ctrl+shift+r"
pub translate_hotkey: String, // "ctrl+shift+t"
pub dictation_mode: String, // "hold" или "toggle"
// Аудио
pub language: String, // ISO 639-1 код за ASR ("bg")
pub auto_detect_language: bool, // Автоматично разпознаване на език
pub audio_device: Option<String>,// Име на микрофон (None = default)
pub sound_enabled: bool, // Звукови нотификации
pub mute_on_record: bool, // Mute високоговорителите при запис
// Overlay
pub overlay_x: Option<f32>, // X позиция на overlay-а
pub overlay_y: Option<f32>, // Y позиция
pub overlay_pinned: bool, // Закрепен на място
// Транскрипция
pub postprocess: bool, // Пост-обработка от ASR сървъра
// LLM
pub llm_enabled: bool, // Активиране на LLM
pub llm_mode: String, // "cleanup", "professional", "reformulation", "custom"
pub llm_base_url: String, // OpenAI-compatible API URL
pub llm_model: String, // Модел (напр. "gpt-4o-mini")
pub llm_custom_prompt: String, // Потребителски prompt
// Инжектиране
pub injection_mode: String, // "clipboard" или "keystrokes"
// Интерфейс
pub ui_language: Option<String>, // Език на интерфейса (None = auto-detect)
// Система
pub auto_start: bool, // Стартиране с Windows/macOS
pub licensing_api_url: String, // URL на licensing сървъра
}
Стойности по подразбиране
| Поле | Стойност по подразбиране | Описание |
|---|---|---|
hotkey | ctrl+shift+r | Клавишна комбинация за диктовка |
translate_hotkey | ctrl+shift+t | Клавишна комбинация за превод |
dictation_mode | hold | Задръж-за-запис режим |
language | bg | Български като ASR език |
auto_detect_language | false | Фиксиран език |
audio_device | None | Default системен микрофон |
sound_enabled | true | Звуков сигнал вкл./изкл. |
mute_on_record | false | Не mute-ва при запис |
overlay_pinned | false | Overlay-ът може да се мести |
postprocess | true | Пост-обработка от ASR сървъра |
llm_enabled | false | LLM изключен |
llm_mode | cleanup | Режим почистване |
llm_base_url | https://api.openai.com/v1 | OpenAI API |
llm_model | gpt-4o-mini | Бърз и евтин модел |
llm_custom_prompt | "" | Празен custom prompt |
injection_mode | clipboard | Clipboard paste |
ui_language | None | Автоматично от OS |
auto_start | false | Без autostart |
licensing_api_url | https://pro.dictaro.ai | Production licensing |
Местоположение на файла
Windows
%APPDATA%\dictaro\settings.json
Пълен път: C:\Users\<user>\AppData\Roaming\dictaro\settings.json
macOS
~/Library/Application Support/dictaro/settings.json
Fallback
Ако dirs::config_dir() не е наличен:
~/AppData/Roaming/dictaro/settings.json
Миграция от старо име
При първо стартиране, ако dictaro/settings.json не съществува но whisper-keyboard/settings.json съществува, файлът се копира автоматично:
Зареждане и запазване
load_config()
Backward compatibility: serde #[serde(default)] на всички полета позволява зареждане на стари конфигурационни файлове, които нямат новите полета (напр. llm_enabled). Липсващите полета получават стойностите си по подразбиране.
save_config()
pub fn save_config(config: &Config) {
// Създава директорията ако не съществува
fs::create_dir_all(parent);
// Записва pretty-printed JSON
let json = serde_json::to_string_pretty(config)?;
fs::write(path, json)?;
}
Примерен settings.json
{
"hotkey": "ctrl+shift+r",
"translate_hotkey": "ctrl+shift+t",
"dictation_mode": "hold",
"language": "bg",
"auto_detect_language": false,
"audio_device": "Microphone (Realtek High Definition Audio)",
"sound_enabled": true,
"overlay_x": 500.0,
"overlay_y": 50.0,
"overlay_pinned": true,
"mute_on_record": false,
"postprocess": true,
"licensing_api_url": "https://pro.dictaro.ai",
"llm_enabled": true,
"llm_mode": "cleanup",
"llm_base_url": "https://api.openai.com/v1",
"llm_model": "gpt-4o-mini",
"llm_custom_prompt": "",
"ui_language": "bg",
"injection_mode": "clipboard",
"auto_start": true
}
Dev Override
Environment variable DICTARO_API_URL може да override-не licensing_api_url:
DICTARO_API_URL=http://localhost:3000 ./dictaro-client
Това е полезно за development и тестване срещу локален licensing сървър.
effective_language()
Помощен метод, който връща None при auto-detect режим и Some(&language) при фиксиран език. Използва се при изпращане на заявка към ASR сървъра:
impl Config {
pub fn effective_language(&self) -> Option<&str> {
if self.auto_detect_language {
None // Сървърът определя езика
} else {
Some(&self.language) // Фиксиран език
}
}
}
Свързани модули
| Модул | Как използва Config |
|---|---|
main.rs | Зарежда при стартиране, предава на App и threads |
ui/settings.rs | Редактира и записва конфигурацията |
hotkeys/ | Чете hotkey, translate_hotkey, dictation_mode |
audio/ | Чете audio_device |
llm/ | Чете llm_* полетата |
transcription/ | Чете language, postprocess |
auth/ | Чете licensing_api_url |
autostart | Чете auto_start |