This commit is contained in:
vcoppe committed 2026-10-14 09:22:07 +02:00
1 parent 41b9116c6a
commit 97d597e139
181 files changed
+1970 -2643

No files matched your search

+24 -46
View File
@@ -1,54 +1,51 @@
//! 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).
use gpx_engine::{self as engine, FileId};
use gpx_engine::{api, ExportOptions};
use tauri::State;
use uuid::Uuid;
use crate::dto::*;
use crate::bytes::*;
use crate::state::AppState;
#[tauri::command(async)]
pub fn file_order(state: State<AppState>) -> Vec<String> {
state.read(|e| ids(e.order()))
state.read(api::file_order)
}
#[tauri::command(async)]
pub fn file_structure(state: State<AppState>, file_id: Uuid) -> Option<FileStructure> {
state.read(move |e| e.file_structure(&FileId(file_id)).map(FileStructure::new))
pub fn file_structure(state: State<AppState>, file_id: Uuid) -> Option<api::FileStructure> {
state.read(move |e| api::file_structure(e, file_id))
}
#[tauri::command(async)]
pub fn file_statistics(state: State<AppState>, file_id: Uuid) -> Option<GlobalStatistics> {
state.read(move |e| {
e.file_statistics(&FileId(file_id))
.map(|s| GlobalStatistics::new(&s))
})
pub fn file_statistics(state: State<AppState>, file_id: Uuid) -> Option<api::GlobalStatistics> {
state.read(move |e| api::file_statistics(e, file_id))
}
#[tauri::command(async)]
pub fn selection(state: State<AppState>) -> Selection {
state.read(|e| e.selection().into())
pub fn selection(state: State<AppState>) -> api::Selection {
state.read(api::selection)
}
#[tauri::command(async)]
pub fn clipboard(state: State<AppState>) -> Option<Clipboard> {
state.read(|e| e.clipboard().map(Clipboard::new))
pub fn clipboard(state: State<AppState>) -> Option<api::Clipboard> {
state.read(api::clipboard)
}
#[tauri::command(async)]
pub fn can_undo(state: State<AppState>) -> bool {
state.read(|e| e.can_undo())
state.read(api::can_undo)
}
#[tauri::command(async)]
pub fn can_redo(state: State<AppState>) -> bool {
state.read(|e| e.can_redo())
state.read(api::can_redo)
}
#[tauri::command(async)]
pub fn can_paste(state: State<AppState>) -> bool {
state.read(|e| e.can_paste())
state.read(api::can_paste)
}
#[tauri::command(async)]
@@ -56,11 +53,8 @@ pub fn waypoint(
state: State<AppState>,
file_id: Uuid,
waypoint_id: Uuid,
) -> Option<WaypointDetails> {
state.read(move |e| {
e.waypoint(&FileId(file_id), &engine::WaypointId(waypoint_id))
.map(WaypointDetails::new)
})
) -> Option<api::WaypointDetails> {
state.read(move |e| api::waypoint(e, file_id, waypoint_id))
}
#[tauri::command(async)]
@@ -69,11 +63,8 @@ pub fn trackpoint(
file_id: Uuid,
segment_id: Uuid,
index: usize,
) -> Option<TrackpointDetails> {
state.read(move |e| {
e.trackpoint(&FileId(file_id), &engine::TrackSegmentId(segment_id), index)
.map(TrackpointDetails::new)
})
) -> Option<api::TrackpointDetails> {
state.read(move |e| api::trackpoint(e, file_id, segment_id, index))
}
/// A file as GPX (UTF-8 bytes), the first byte telling whether the file exists.
@@ -90,7 +81,7 @@ pub fn export_file(
osm: bool,
as_route: bool,
) -> Bytes {
let options = engine::ExportOptions {
let options = ExportOptions {
time,
hr,
cad,
@@ -99,38 +90,25 @@ pub fn export_file(
osm,
as_route,
};
optional(state.read(move |e| e.export(&FileId(file_id), options)))
optional(state.read(move |e| api::export_file(e, file_id, options)))
}
/// The data that some files have: a bit for the time (1), heart rate (2), cadence (4), temperature
/// (8), power (16) and the OpenStreetMap data (32).
#[tauri::command(async)]
pub fn exportable_data(state: State<AppState>, file_ids: Vec<Uuid>) -> u8 {
state.read(move |e| {
let ids: Vec<FileId> = file_ids.into_iter().map(FileId).collect();
let data = e.exportable_data(&ids);
[
data.time, data.hr, data.cad, data.atemp, data.power, data.osm,
]
.iter()
.enumerate()
.fold(0, |bits, (i, on)| bits | (u8::from(*on) << i))
})
state.read(move |e| api::exportable_data(e, &file_ids))
}
#[tauri::command(async)]
pub fn reduction_distances(state: State<AppState>) -> Bytes {
Bytes::new(state.read(|e| f64s(&e.reduction_distances())))
f64s(&state.read(api::reduction_distances))
}
#[tauri::command(async)]
pub fn segment_coordinates(state: State<AppState>, segment_id: Uuid) -> Bytes {
Bytes::new(
state.read(move |e| f64s(e.segment_coordinates(&engine::TrackSegmentId(segment_id)))),
)
f64s(&state.read(move |e| api::segment_coordinates(e, segment_id).to_vec()))
}
#[tauri::command(async)]
pub fn waypoint_coordinates(state: State<AppState>, file_id: Uuid) -> Bytes {
Bytes::new(state.read(move |e| f64s(e.waypoint_coordinates(&FileId(file_id)))))
f64s(&state.read(move |e| api::waypoint_coordinates(e, file_id).to_vec()))
}