diff --git a/Cargo.lock b/Cargo.lock index cfcee9b60b6a6ca085468b80076080ff18249e31..67cd460b2018f35b41578a957f34e586abb38dde 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -114,15 +114,6 @@ dependencies = [ "winit", ] -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.0" @@ -445,21 +436,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" -[[package]] -name = "backtrace" -version = "0.3.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base64" version = "0.21.7" @@ -829,6 +805,27 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "directories" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.59.0", +] + [[package]] name = "dispatch" version = "0.2.0" @@ -1445,12 +1442,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "gl_generator" version = "0.14.0" @@ -2145,17 +2136,6 @@ version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" -[[package]] -name = "mio" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" -dependencies = [ - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", -] - [[package]] name = "naga" version = "24.0.0" @@ -2535,21 +2515,18 @@ dependencies = [ "objc2-foundation 0.2.2", ] -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" version = "1.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "orbclient" version = "0.3.48" @@ -2897,6 +2874,17 @@ dependencies = [ "bitflags 2.9.0", ] +[[package]] +name = "redox_users" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror 2.0.12", +] + [[package]] name = "regex" version = "1.11.1" @@ -3002,12 +2990,6 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f" -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - [[package]] name = "rustc-hash" version = "1.1.0" @@ -3091,6 +3073,7 @@ name = "segs" version = "0.1.0" dependencies = [ "anyhow", + "directories", "eframe", "egui", "egui_extras", @@ -3111,7 +3094,6 @@ dependencies = [ "strum", "strum_macros", "thiserror 2.0.12", - "tokio", "tracing", "tracing-appender", "tracing-subscriber", @@ -3373,16 +3355,6 @@ dependencies = [ "serde", ] -[[package]] -name = "socket2" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "spin" version = "0.9.8" @@ -3643,20 +3615,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "tokio" -version = "1.44.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" -dependencies = [ - "backtrace", - "libc", - "mio", - "pin-project-lite", - "socket2", - "windows-sys 0.52.0", -] - [[package]] name = "toml_datetime" version = "0.6.8" diff --git a/Cargo.toml b/Cargo.toml index 819e571068083cb0aa8e10b32407d5a394cda88c..637f0ee4f9eb30581e4a71fc2b1dba36e69ba518 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,43 +2,40 @@ name = "segs" version = "0.1.0" # if you're a contributor, you should add your name here -authors = ["Federico Lolli <federico.lolli@skywarder.eu>"] +authors = [ + "Federico Lolli <federico.lolli@skywarder.eu>", + "Niccolò Betto <niccolo.betto@skywarder.eu>", +] edition = "2024" description = "Skyward Enhanced Ground Software" license = "MIT" [dependencies] -# ======= GUI & Rendering ======= +anyhow = "1.0" +directories = "6.0.0" egui_tiles = "0.12" eframe = { version = "0.31", features = ["persistence"] } egui = { version = "0.31", features = ["log", "mint"] } egui_extras = { version = "0.31", features = ["svg"] } egui_plot = "0.31" egui_file = "0.22" -# =========== Asynchronous =========== -tokio = { version = "1.41", features = ["rt-multi-thread", "net", "sync"] } -# =========== Mavlink =========== -serialport = "4.7.0" -# ========= Persistency ========= +enum_dispatch = "0.3" +glam = { version = "0.29", features = ["serde", "mint"] } +itertools = "0.14.0" +mint = "0.5.9" +profiling = { version = "1.0", features = ["profile-with-tracy"] } +ring-channel = "0.12.0" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -# =========== Tracing and profiling =========== +serialport = "4.7.0" +thiserror = "2.0.7" +strum = "0.26" +strum_macros = "0.26" tracing = "0.1" +tracing-appender = "0.2" tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] } tracing-tracy = "0.11.4" -profiling = { version = "1.0", features = ["profile-with-tracy"] } -tracing-appender = "0.2" -# =========== Utility =========== -# for dynamic dispatch -enum_dispatch = "0.3" -strum = "0.26" -strum_macros = "0.26" -anyhow = "1.0" -ring-channel = "0.12.0" -thiserror = "2.0.7" uuid = { version = "1.12.1", features = ["serde", "v7"] } -glam = { version = "0.29", features = ["serde", "mint"] } -mint = "0.5.9" [dependencies.skyward_mavlink] git = "https://git.skywarder.eu/avn/swd/mavlink/mavlink-skyward-lib.git" @@ -52,3 +49,18 @@ features = ["serde"] [dev-dependencies] rand = "0.9.0" + +[package.metadata.packager] +product-name = "SEGS" +description = "Skyward Enhanced Ground Software" +version = "0.1.0" +authors = [ + "Federico Lolli <federico.lolli@skywarder.eu>", + "Niccolò Betto <niccolo.betto@skywarder.eu>", +] +identifier = "skywarder.eu" +category = "DeveloperTool" +license-file = "LICENSE" +before-packaging-command = "cargo build --release" +resources = ["assets/icon_*.png", "LICENSE", "README.md"] +icons = ["assets/icon_*.png"] diff --git a/README.md b/README.md index bfc83583fcc148f8c4dffb340b80db7547936687..88499c607a092e3bdcb2c001560f780e4bfe686b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ <div align="center"> - <img src="./assets/logo.png" alt="Logo" width="400"/> + <img src="./assets/segs_banner.png" alt="Logo" width="400"/> <br> <img src="https://img.shields.io/badge/version-v0.1.0-blue.svg?logo=rust"> <img src="https://img.shields.io/badge/development-alpha-red"> diff --git a/assets/icon_128x128.png b/assets/icon_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..4e37d3455a4ec4f1d5596b5bdfe20233e503c72d Binary files /dev/null and b/assets/icon_128x128.png differ diff --git a/assets/icon_32x32.png b/assets/icon_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2f279daa2b6a73ea4528364cf26aa6590e51bf Binary files /dev/null and b/assets/icon_32x32.png differ diff --git a/assets/icon_512x512.png b/assets/icon_512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..bb3ed23d070fe7ad213fed6084dc60723f6edb2b Binary files /dev/null and b/assets/icon_512x512.png differ diff --git a/assets/logo.png b/assets/logo.png deleted file mode 100644 index 313cbfa398a58fcdbd959de23963e0a1c9ebc8ac..0000000000000000000000000000000000000000 Binary files a/assets/logo.png and /dev/null differ diff --git a/assets/segs_banner.png b/assets/segs_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..bd3a2c0c1f4f4386abce46ce5b1a8789ffdffca5 Binary files /dev/null and b/assets/segs_banner.png differ diff --git a/justfile b/justfile index f537b2ebde3647d48e89f8c9074c4958475ef967..1105a0d055afa507d0d2ab7ea2a88fe0079a7435 100644 --- a/justfile +++ b/justfile @@ -11,5 +11,8 @@ test *ARGS: run LEVEL="debug": RUST_BACKTRACE=full RUST_LOG=segs={{LEVEL}} cargo r +package: + cargo packager --release + doc: cargo doc --no-deps --open diff --git a/src/main.rs b/src/main.rs index 87495b96d8d51d8b6e7ece615f396ab1cef08fbb..61bca34a472d3a861dc26c2b134ed4168877a4dc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,12 +9,11 @@ mod message_broker; mod ui; mod utils; -use std::sync::LazyLock; +use std::{fs::create_dir_all, sync::LazyLock}; -use tokio::runtime::Runtime; +use error::ErrInstrument; use tracing_subscriber::{EnvFilter, Layer, layer::SubscriberExt, util::SubscriberInitExt}; -use error::ErrInstrument; use mavlink::reflection::ReflectionContext; use ui::App; @@ -26,21 +25,28 @@ static APP_NAME: &str = "segs"; fn main() -> Result<(), eframe::Error> { // Set up logging (USE RUST_LOG=debug to see logs) let env_filter = EnvFilter::builder().from_env_lossy(); - let file_appender = tracing_appender::rolling::daily("logs/", "segs.log"); - let (non_blocking, _guard) = tracing_appender::non_blocking(file_appender); - tracing_subscriber::registry() + let registry = tracing_subscriber::registry() .with(tracing_subscriber::fmt::layer().with_filter(env_filter)) - .with( + .with(tracing_tracy::TracyLayer::default()); + + // Create the logs directory if it doesn't exist and add to the registry + if let Some(base_dirs) = directories::BaseDirs::new() { + let local_dir = base_dirs.data_local_dir(); + let logs_dir = local_dir.join("logs"); + create_dir_all(&logs_dir).log_expect("Failed to create logs directory"); + + let file_appender = tracing_appender::rolling::daily(logs_dir, "segs.log"); + let (non_blocking, _guard) = tracing_appender::non_blocking(file_appender); + let registry = registry.with( tracing_subscriber::fmt::layer() .json() .with_writer(non_blocking), - ) - .with(tracing_tracy::TracyLayer::default()) - .init(); - - // Start Tokio runtime (TODO: decide whether to use Tokio or a simpler thread-based approach) - let rt = Runtime::new().log_expect("Unable to create Tokio Runtime"); - let _enter = rt.enter(); + ); + // Initialize the logger + registry.init(); + } else { + registry.init(); + } let native_options = eframe::NativeOptions { // By modifying the viewport, we can change things like the windows size