can_viewer/commands/
init.rs

1//! Initialization commands.
2
3use crate::state::AppState;
4use serde::Serialize;
5use std::sync::Arc;
6use tauri::State;
7
8/// Initial files response for frontend.
9#[derive(Serialize)]
10pub struct InitialFilesResponse {
11    pub dbc_path: Option<String>,
12    pub mdf4_path: Option<String>,
13}
14
15/// Get initial files specified via command line arguments.
16/// Falls back to saved session if no CLI argument provided.
17#[tauri::command]
18pub async fn get_initial_files(
19    state: State<'_, Arc<AppState>>,
20) -> Result<InitialFilesResponse, String> {
21    let files = state.initial_files.lock();
22    let session = state.session.lock();
23
24    // CLI args take priority, fall back to saved session
25    let dbc_path = files.dbc_path.clone().or_else(|| session.dbc_path.clone());
26    let mdf4_path = files
27        .mdf4_path
28        .clone()
29        .or_else(|| session.mdf4_path.clone());
30
31    Ok(InitialFilesResponse {
32        dbc_path,
33        mdf4_path,
34    })
35}