diff --git a/Cargo.lock b/Cargo.lock index 62064a4..96b653c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,6 +14,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + [[package]] name = "android_system_properties" version = "0.1.5" @@ -924,6 +933,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "leb128fmt" version = "0.1.0" @@ -998,6 +1013,15 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + [[package]] name = "md-5" version = "0.10.6" @@ -1034,6 +1058,15 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys", +] + [[package]] name = "nucleo-matcher" version = "0.3.1" @@ -1381,6 +1414,23 @@ dependencies = [ "thiserror", ] +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + [[package]] name = "rustc_version" version = "0.4.1" @@ -1418,6 +1468,8 @@ dependencies = [ "serde_json", "ssh2", "tokio", + "tracing", + "tracing-subscriber", "vte4", ] @@ -1523,6 +1575,15 @@ dependencies = [ "digest", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "shlex" version = "1.3.0" @@ -1642,6 +1703,15 @@ dependencies = [ "syn", ] +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + [[package]] name = "tokio" version = "1.52.3" @@ -1751,6 +1821,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", ] [[package]] @@ -1799,6 +1899,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "vcpkg" version = "0.2.15" diff --git a/Cargo.toml b/Cargo.toml index 6d51f05..4dc7a8e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,8 @@ oo7 = "0.6" chrono = "0.4" cairo-rs = { version = "0.22", features = ["use_glib"] } serde_json = "1.0.149" +tracing = "0.1" +tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] } [profile.release] opt-level = 3 diff --git a/src/main.rs b/src/main.rs index 3073b3a..bb6ac14 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,38 +5,37 @@ mod sftp_engine; use gtk4::prelude::*; use crate::ui::window::build_ui; -use std::fs::OpenOptions; -use std::io::Write; - -use std::os::unix::fs::OpenOptionsExt; - -fn log_debug(msg: &str) { - if let Ok(mut file) = OpenOptions::new().create(true).append(true).mode(0o600).open("/tmp/rustmius_debug.log") { - let _ = writeln!(file, "[{}] {}", chrono::Local::now(), msg); - } -} +use tracing::{debug, info, error}; #[tokio::main] async fn main() { + tracing_subscriber::fmt() + .with_env_filter(tracing_subscriber::EnvFilter::from_default_env() + .add_directive(tracing::Level::INFO.into()) + .add_directive("rustmius=debug".parse().unwrap())) + .init(); + + info!("Starting Rustmius v{}", env!("CARGO_PKG_VERSION")); + let _args: Vec = std::env::args().collect(); if let Ok(alias) = std::env::var("RUSTMIUS_ASKPASS_ALIAS") { - log_debug(&format!("AskPass triggered for alias: {}", alias)); + debug!("AskPass triggered for alias: {}", alias); if let Ok(keyring) = oo7::Keyring::new().await { let mut attributes = std::collections::HashMap::new(); let normalized_alias = alias.to_lowercase(); attributes.insert("rustmius-server-alias", normalized_alias.as_str()); if let Ok(items) = keyring.search_items(&attributes).await { - log_debug(&format!("Found {} items in keyring", items.len())); + debug!("Found {} items in keyring", items.len()); if let Some(item) = items.first() && let Ok(password) = item.secret().await && let Ok(pass_str) = std::str::from_utf8(password.as_ref()) { - log_debug("Password retrieved successfully, sending to SSH"); + debug!("Password retrieved successfully, sending to SSH"); print!("{}", pass_str); std::process::exit(0); } } } - log_debug("Failed to retrieve password from keyring"); + error!("Failed to retrieve password from keyring for alias: {}", alias); std::process::exit(1); } diff --git a/src/ui/file_explorer.rs b/src/ui/file_explorer.rs index adcc98f..5f172a6 100644 --- a/src/ui/file_explorer.rs +++ b/src/ui/file_explorer.rs @@ -127,7 +127,7 @@ impl FileExplorer { let h_drop = explorer.clone_handle(); drop_target.connect_drop(move |_, value, _, _| { - println!("Drop event received!"); + tracing::debug!("Drop event received!"); let h = h_drop.clone(); let remote_dir = h.current_path.borrow().clone(); let mut paths: Vec = Vec::new(); @@ -154,7 +154,7 @@ impl FileExplorer { } let count = paths.len(); - println!("Starting upload of {} files", count); + tracing::debug!("Starting upload of {} files", count); h.status_label.set_text(&format!("Uploading {} file(s)...", count)); for local_path in paths {