From ed246bf9bf8086c8a2a8c874622808209bc3a7db Mon Sep 17 00:00:00 2001 From: 0x192 Date: Sun, 9 Jan 2022 18:59:11 +0100 Subject: [PATCH] Much more sensible logging implementation - Use of dirs::cache_dir for logfiles location - Logfile name convention is now "UAD_%Y%m%d.log" - Logger now only appends (no more overwrite) - Logger now creates a new logfile each day - Creation of a `uad_dir()` helper function to access directories UAD uses --- CHANGELOG.md | 5 ++++- src/core/config.rs | 14 +++----------- src/core/utils.rs | 8 +++++++- src/main.rs | 14 +++++++++++--- 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe7e0d1..229dc2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,12 +14,15 @@ and `Removed`. - [[#52](https://github.com/0x192/universal-android-debloater/issues/52)] `uk.co.ee.myee` to the debloat lists (thanks [@lawson58](https://github.com/lawson85)). - [[#58](https://github.com/0x192/universal-android-debloater/issues/52)] `android` to the debloat lists with the tag `Unsafe`. - [[#49](https://github.com/0x192/universal-android-debloater/issues/49)] Multi-device support: You are now able to select a device among the list of all ADB connected devices/emulators. -- [[#44](https://github.com/0x192/universal-android-debloater/issues/44)] Persistent settings: Settings (only `theme` for now) are saved to a config file. Its location follows [the standards of the different platforms](https://github.com/dirs-dev/dirs-rs#example). +- [[#44](https://github.com/0x192/universal-android-debloater/issues/44)] Persistent settings: Settings (only `theme` for now) are saved to a config file. Its location follows [the standards of the different OS](https://github.com/dirs-dev/dirs-rs#example). ### Changed - Review of the package lists recommendations. The `Recommended` debloat list is now safer (less likely to remove something you'd want to keep). - [[#65](https://github.com/0x192/universal-android-debloater/issues/65)] ADB commands now run in parallel and asynchronously! This means no more UI freeze when performing long/many actions! :rocket: - UI now updates itself in real time when performing ADB actions (thanks to async & multithreading). Before, it waited for the end of all actions. +- Logfiles are now located in a more conventional place: [cache_dir](https://docs.rs/dirs/latest/dirs/). +- Previous logs are no longer overwritten. The logger now only appends to the current logfile of the day (UAD_%Y%m%d.log). +- Each new day the logger will create a new file on UAD launch. ### Fixed - Miscellaneous minor issues in some package descriptions. diff --git a/src/core/config.rs b/src/core/config.rs index 362a06d..0dabae0 100644 --- a/src/core/config.rs +++ b/src/core/config.rs @@ -1,4 +1,5 @@ use crate::gui::views::settings::Settings; +use crate::CONFIG_DIR; use serde::{Deserialize, Serialize}; use static_init::dynamic; use std::fs; @@ -10,7 +11,7 @@ pub struct Config { } #[dynamic] -static CONFIG_FILE: PathBuf = config_dir(); +static CONFIG_FILE: PathBuf = CONFIG_DIR.join("config.toml"); impl Default for Config { fn default() -> Self { @@ -32,8 +33,7 @@ impl Config { pub fn load_configuration_file() -> Self { match fs::read_to_string(&*CONFIG_FILE) { Ok(s) => toml::from_str(&s).unwrap_or_else(|e| panic!("Invalid config file: `{}`", e)), - Err(e) => { - println!("{}", e); + Err(_) => { let default_conf = toml::to_string(&Config::default()).unwrap(); fs::write(&*CONFIG_FILE, default_conf) .expect("Could not write config file to disk!"); @@ -42,11 +42,3 @@ impl Config { } } } - -fn config_dir() -> PathBuf { - let config_dir = dirs::config_dir().unwrap().join("uad"); - if !config_dir.exists() { - let _ = fs::create_dir_all(&config_dir); - } - config_dir.join("config.toml") -} diff --git a/src/core/utils.rs b/src/core/utils.rs index c99cf64..ed4f2ef 100644 --- a/src/core/utils.rs +++ b/src/core/utils.rs @@ -4,11 +4,11 @@ use crate::core::uad_lists::{Package, PackageState, Removal, UadList}; use crate::gui::views::list::Selection; use crate::gui::widgets::package_row::PackageRow; use crate::gui::ICONS; - use iced::{alignment, Length, Text}; use std::collections::HashMap; use std::fs; use std::io::{self, prelude::*, BufReader}; +use std::path::PathBuf; pub fn fetch_packages( uad_lists: &'static HashMap, @@ -140,3 +140,9 @@ pub fn string_to_theme(theme: String) -> Theme { _ => Theme::lupin(), } } + +pub fn setup_uad_dir(dir: Option) -> PathBuf { + let dir = dir.unwrap().join("uad"); + fs::create_dir_all(&dir).expect("Can't create cache directory"); + dir +} diff --git a/src/main.rs b/src/main.rs index 4c2017a..d42af23 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,17 +4,25 @@ extern crate log; use crate::core::config::Config; +use crate::core::utils::setup_uad_dir; use fern::{ colors::{Color, ColoredLevelConfig}, FormatCallback, }; use log::Record; use static_init::dynamic; +use std::path::PathBuf; use std::{fmt::Arguments, fs::OpenOptions}; mod core; mod gui; +#[dynamic] +static CONFIG_DIR: PathBuf = setup_uad_dir(dirs::config_dir()); + +#[dynamic] +static CACHE_DIR: PathBuf = setup_uad_dir(dirs::cache_dir()); + #[dynamic] static IN_FILE_CONFIGURATION: Config = Config::load_configuration_file(); @@ -47,9 +55,9 @@ pub fn setup_logger() -> Result<(), fern::InitError> { let log_file = OpenOptions::new() .write(true) .create(true) - .append(false) - .truncate(true) - .open("uad.log")?; + .append(true) + .truncate(false) + .open(CACHE_DIR.join(format!("UAD_{}.log", chrono::Local::now().format("%Y%m%d"))))?; let file_dispatcher = fern::Dispatch::new() .format(make_formatter(false))