2026-10-14 08:51:38 +02:00
|
|
|
//! The files, their structure and statistics, the selection, the clipboard, and the coordinates of
|
|
|
|
|
//! the trackpoints and waypoints (flat `[lng, lat, ...]` little-endian `f64` arrays).
|
|
|
|
|
|
2026-10-14 09:22:07 +02:00
|
|
|
use gpx_engine::{api, ExportOptions};
|
2026-10-14 08:51:38 +02:00
|
|
|
use tauri::State;
|
|
|
|
|
use uuid::Uuid;
|
|
|
|
|
|
2026-10-14 09:22:07 +02:00
|
|
|
use crate::bytes::*;
|
2026-10-14 08:51:38 +02:00
|
|
|
use crate::state::AppState;
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
|
|
|
|
pub fn file_order(state: State<AppState>) -> Vec<String> {
|
2026-10-14 09:22:07 +02:00
|
|
|
state.read(api::file_order)
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
2026-10-14 09:22:07 +02:00
|
|
|
pub fn file_structure(state: State<AppState>, file_id: Uuid) -> Option<api::FileStructure> {
|
|
|
|
|
state.read(move |e| api::file_structure(e, file_id))
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
2026-10-14 09:22:07 +02:00
|
|
|
pub fn file_statistics(state: State<AppState>, file_id: Uuid) -> Option<api::GlobalStatistics> {
|
|
|
|
|
state.read(move |e| api::file_statistics(e, file_id))
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
2026-10-14 09:22:07 +02:00
|
|
|
pub fn selection(state: State<AppState>) -> api::Selection {
|
|
|
|
|
state.read(api::selection)
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
2026-10-14 09:22:07 +02:00
|
|
|
pub fn clipboard(state: State<AppState>) -> Option<api::Clipboard> {
|
|
|
|
|
state.read(api::clipboard)
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
|
|
|
|
pub fn can_undo(state: State<AppState>) -> bool {
|
2026-10-14 09:22:07 +02:00
|
|
|
state.read(api::can_undo)
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
|
|
|
|
pub fn can_redo(state: State<AppState>) -> bool {
|
2026-10-14 09:22:07 +02:00
|
|
|
state.read(api::can_redo)
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
|
|
|
|
pub fn can_paste(state: State<AppState>) -> bool {
|
2026-10-14 09:22:07 +02:00
|
|
|
state.read(api::can_paste)
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
|
|
|
|
pub fn waypoint(
|
|
|
|
|
state: State<AppState>,
|
|
|
|
|
file_id: Uuid,
|
|
|
|
|
waypoint_id: Uuid,
|
2026-10-14 09:22:07 +02:00
|
|
|
) -> Option<api::WaypointDetails> {
|
|
|
|
|
state.read(move |e| api::waypoint(e, file_id, waypoint_id))
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
|
|
|
|
pub fn trackpoint(
|
|
|
|
|
state: State<AppState>,
|
|
|
|
|
file_id: Uuid,
|
|
|
|
|
segment_id: Uuid,
|
|
|
|
|
index: usize,
|
2026-10-14 09:22:07 +02:00
|
|
|
) -> Option<api::TrackpointDetails> {
|
|
|
|
|
state.read(move |e| api::trackpoint(e, file_id, segment_id, index))
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// A file as GPX (UTF-8 bytes), the first byte telling whether the file exists.
|
|
|
|
|
#[tauri::command(async)]
|
|
|
|
|
#[allow(clippy::too_many_arguments)]
|
|
|
|
|
pub fn export_file(
|
|
|
|
|
state: State<AppState>,
|
|
|
|
|
file_id: Uuid,
|
|
|
|
|
time: bool,
|
|
|
|
|
hr: bool,
|
|
|
|
|
cad: bool,
|
|
|
|
|
atemp: bool,
|
|
|
|
|
power: bool,
|
|
|
|
|
osm: bool,
|
|
|
|
|
as_route: bool,
|
|
|
|
|
) -> Bytes {
|
2026-10-14 09:22:07 +02:00
|
|
|
let options = ExportOptions {
|
2026-10-14 08:51:38 +02:00
|
|
|
time,
|
|
|
|
|
hr,
|
|
|
|
|
cad,
|
|
|
|
|
atemp,
|
|
|
|
|
power,
|
|
|
|
|
osm,
|
|
|
|
|
as_route,
|
|
|
|
|
};
|
2026-10-14 09:22:07 +02:00
|
|
|
optional(state.read(move |e| api::export_file(e, file_id, options)))
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
|
|
|
|
pub fn exportable_data(state: State<AppState>, file_ids: Vec<Uuid>) -> u8 {
|
2026-10-14 09:22:07 +02:00
|
|
|
state.read(move |e| api::exportable_data(e, &file_ids))
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
|
|
|
|
pub fn reduction_distances(state: State<AppState>) -> Bytes {
|
2026-10-14 09:22:07 +02:00
|
|
|
f64s(&state.read(api::reduction_distances))
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
|
|
|
|
pub fn segment_coordinates(state: State<AppState>, segment_id: Uuid) -> Bytes {
|
2026-10-14 09:22:07 +02:00
|
|
|
f64s(&state.read(move |e| api::segment_coordinates(e, segment_id).to_vec()))
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tauri::command(async)]
|
|
|
|
|
pub fn waypoint_coordinates(state: State<AppState>, file_id: Uuid) -> Bytes {
|
2026-10-14 09:22:07 +02:00
|
|
|
f64s(&state.read(move |e| api::waypoint_coordinates(e, file_id).to_vec()))
|
2026-10-14 08:51:38 +02:00
|
|
|
}
|