skillok meeting
996ce529a8d705e470aea24a7b7fb9a19578f1e4
Перейти к файлу
Код
meeting src-taurisrclib.rs
anc Ядро: встреча = заметка Markdown, всё по кнопке - Убрана автоматика: слежение за Zoom, окно согласия, трей, уведомления, автозапуск, живая расшифровка, разбор по JSON-схеме. - Встреча — note.md и дорожки звука; правка, дописывание, переименование, удаление. - «Добавить аудио»: чтение mp3, m4a, wav, aiff, flac, ogg (symphonia), потоковое приведение к 16 кГц моно. - «Расшифровать»: нарезка по паузам с обрезкой тишины в начале куска, до 4 кусков сразу, повтор, пометка нераспознанного, блок «Расшифровка». - Команды ИИ над заметкой: «Конспект», «Задачи», «Ревью», свой запрос; промпты файлами в prompts/. - «Записать» по кнопке: дорожки Zoom и микрофона в WAV, пауза, стоп. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> ad47f89 30 сентября 2026 г.
lib.rs
//! Skillok Meet — ядро приложения. Интерфейс зовёт команды отсюда через
//! `invoke`; всё, что трогает диск, сеть, звук и ключи, живёт в Rust.
//! Программа ничего не делает сама — только по действию человека.

pub mod ai;
pub mod meetings;
pub mod openrouter;
pub mod recorder;
pub mod settings;
pub mod transcribe;
pub mod transcript;

mod commands;

use std::collections::HashSet;
use std::sync::{Arc, Mutex};

use tauri::Manager;

pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_dialog::init())
        .setup(|app| {
            let config_dir = app.path().app_config_dir()?;
            let data_dir = app.path().app_data_dir()?;
            let store = Arc::new(meetings::Store::new(data_dir.join("meetings")));
            // Запись, оборванная выключением компьютера, перестаёт считаться идущей.
            let _ = store.recover_interrupted();
            app.manage(commands::AppState {
                settings_path: settings::settings_path(&config_dir),
                store,
                secrets: Arc::new(settings::Keyring),
                recording: Mutex::new(None),
                busy: Mutex::new(HashSet::new()),
            });
            Ok(())
        })
        .invoke_handler(tauri::generate_handler![
            commands::get_settings,
            commands::save_settings,
            commands::set_openrouter_key,
            commands::check_openrouter_key,
            commands::delete_openrouter_key,
            commands::list_meetings,
            commands::get_meeting,
            commands::create_meeting,
            commands::save_note,
            commands::rename_meeting,
            commands::delete_meeting,
            commands::add_audio,
            commands::transcribe_meeting,
            commands::run_command,
            commands::recorder_status,
            commands::recorder_start,
            commands::recorder_pause,
            commands::recorder_stop,
        ])
        .run(tauri::generate_context!())
        .expect("Skillok Meet не запустился");
}