- Rewrite SidecarManager as singleton with OnceLock, reusing one Python process across all commands instead of spawning per call - Separate stdin/stdout ownership with dedicated BufReader to prevent data corruption between wait_for_ready and send_and_receive - Add ensure_running() for auto-start on first command - Fix asset protocol URL: use convertFileSrc() instead of manual encodeURIComponent which broke file paths with slashes - Add +layout.svelte with global dark theme, CSS reset, and custom scrollbar styling to prevent white flash on startup - Register AppState with Tauri .manage(), initialize SQLite database on app startup at ~/.voicetonotes/voice_to_notes.db - Wire project commands (create/get/list) to real database queries instead of placeholder stubs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
24 lines
800 B
Rust
24 lines
800 B
Rust
use tauri::State;
|
|
|
|
use crate::db::models::Project;
|
|
use crate::db::queries;
|
|
use crate::state::AppState;
|
|
|
|
#[tauri::command]
|
|
pub fn create_project(name: String, state: State<AppState>) -> Result<Project, String> {
|
|
let conn = state.db.lock().map_err(|e| e.to_string())?;
|
|
queries::create_project(&conn, &name).map_err(|e| e.to_string())
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub fn get_project(id: String, state: State<AppState>) -> Result<Option<Project>, String> {
|
|
let conn = state.db.lock().map_err(|e| e.to_string())?;
|
|
queries::get_project(&conn, &id).map_err(|e| e.to_string())
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub fn list_projects(state: State<AppState>) -> Result<Vec<Project>, String> {
|
|
let conn = state.db.lock().map_err(|e| e.to_string())?;
|
|
queries::list_projects(&conn).map_err(|e| e.to_string())
|
|
}
|