diff --git a/Cargo.lock b/Cargo.lock index d6181e6..657b12a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -63,6 +63,21 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "arboard" version = "3.5.0" @@ -245,6 +260,18 @@ dependencies = [ "libc", ] +[[package]] +name = "chrono" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-link", +] + [[package]] name = "clipboard-win" version = "5.4.0" @@ -758,6 +785,7 @@ name = "gta-tools" version = "0.6.0" dependencies = [ "catppuccin-egui", + "chrono", "eframe", "egui_extras", "image", @@ -802,6 +830,30 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "iana-time-zone" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "icu_collections" version = "1.5.0" diff --git a/Cargo.toml b/Cargo.toml index 7aeea1c..ccc97a8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,7 @@ edition = "2024" catppuccin-egui = { version = "5.5.0", default-features = false, features = [ "egui31", ] } +chrono = { version = "0.4.41", default-features = false, features = ["clock"] } eframe = { version = "0.31.1", default-features = false, features = [ "glow", "default_fonts", diff --git a/src/gui/run.rs b/src/gui/run.rs index 0f079e1..8f6606f 100644 --- a/src/gui/run.rs +++ b/src/gui/run.rs @@ -3,28 +3,14 @@ use crate::{ app::{App, WINDOW_SIZE}, tools, }, - util::{consts::path, persistent_state::PersistentState, win}, + util::{log, persistent_state::PersistentState, win}, }; use eframe::egui; -use std::{ - fs::File, - io::Write, - time::{SystemTime, UNIX_EPOCH}, -}; fn panic_hook(panic_info: &std::panic::PanicHookInfo<'_>) { - let mut file = File::options() - .create(true) - .append(true) - .open(path::APP_ERROR.as_path()) - .unwrap(); - let timestamp = SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs(); let backtrace = std::backtrace::Backtrace::capture(); - let message = format!("[{timestamp}]\n{panic_info}\nstack backtrace:\n{backtrace}\n"); - file.write_all(message.as_bytes()).unwrap(); + let message = format!("{panic_info}\nstack backtrace:\n{backtrace}\n"); + log::log(log::LogLevel::Panic, message); } fn app_creator( diff --git a/src/util.rs b/src/util.rs index 36da39c..9c2bb50 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,6 +1,7 @@ mod codeberg; pub mod consts; pub mod countdown; +pub mod log; pub mod meta; pub mod persistent_state; pub mod win; diff --git a/src/util/consts.rs b/src/util/consts.rs index d39f576..9bc5c0d 100644 --- a/src/util/consts.rs +++ b/src/util/consts.rs @@ -5,7 +5,7 @@ pub mod path { .join("GTA Tools") }); pub static APP_CONFIG: LazyLock = LazyLock::new(|| APP_STORAGE.join("config.json")); - pub static APP_ERROR: LazyLock = LazyLock::new(|| APP_STORAGE.join("error.log")); + pub static APP_LOG: LazyLock = LazyLock::new(|| APP_STORAGE.join("gta-tools.log")); } pub mod game { diff --git a/src/util/log.rs b/src/util/log.rs new file mode 100644 index 0000000..906d824 --- /dev/null +++ b/src/util/log.rs @@ -0,0 +1,20 @@ +use crate::util::consts::path; +use std::{fs::File, io::Write}; +use strum::Display; + +#[derive(Display)] +pub enum LogLevel { + Error, + Panic, +} + +pub fn log(level: LogLevel, message: String) { + let mut file = File::options() + .create(true) + .append(true) + .open(path::APP_LOG.as_path()) + .unwrap(); + let timestamp = chrono::Local::now().to_rfc3339_opts(chrono::SecondsFormat::Secs, false); + let message = format!("[{timestamp}] [{level}]\n{message}\n\n"); + file.write_all(message.as_bytes()).unwrap(); +}