From de1a8b5f9f21442d5d2763fac549543d16e0bfd8 Mon Sep 17 00:00:00 2001 From: "Dr. Matthias Ratajczak" Date: Fri, 2 Dec 2022 17:23:50 +0100 Subject: [PATCH] refactor --- src/core.rs | 7 +++---- src/group.rs | 5 +---- src/lib.rs | 1 + src/path.rs | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 src/path.rs diff --git a/src/core.rs b/src/core.rs index 589b371..f7624ce 100644 --- a/src/core.rs +++ b/src/core.rs @@ -1,12 +1,11 @@ use std::collections::HashSet; -use std::path::PathBuf; use std::process::exit; use crate::action; use crate::cmd::run_install_command; use crate::db::{get_all_installed_packages, get_explicitly_installed_packages}; -use crate::group::{Group, GROUPS_DIR}; -use crate::package::Package; +use crate::Group; +use crate::Package; use clap::ArgMatches; @@ -78,7 +77,7 @@ impl Pacdef { .get_many::("group") .unwrap() .map(|file| { - let mut buf = PathBuf::from(GROUPS_DIR); + let mut buf = crate::path::get_pacdef_group_dir().unwrap(); buf.push(file); buf }) diff --git a/src/group.rs b/src/group.rs index 4997d7d..c3ee993 100644 --- a/src/group.rs +++ b/src/group.rs @@ -2,12 +2,9 @@ use std::collections::HashSet; use std::fs::File; use std::hash::Hash; use std::io::{BufRead, BufReader}; -use std::path::PathBuf; use crate::Package; -pub const GROUPS_DIR: &str = "/home/ratajc72/.config/pacdef/groups"; - #[derive(Debug)] pub struct Group { pub name: String, @@ -17,7 +14,7 @@ pub struct Group { impl Group { pub fn load_from_dir() -> HashSet { let mut result = HashSet::new(); - let path = PathBuf::from(GROUPS_DIR); + let path = crate::path::get_pacdef_group_dir().unwrap(); for entry in path.read_dir().unwrap() { let file = entry.unwrap(); let name = file.file_name(); diff --git a/src/lib.rs b/src/lib.rs index be55086..0eb615d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,6 +5,7 @@ mod core; pub mod db; mod group; mod package; +mod path; mod ui; pub use crate::core::Pacdef; diff --git a/src/path.rs b/src/path.rs new file mode 100644 index 0000000..d155928 --- /dev/null +++ b/src/path.rs @@ -0,0 +1,35 @@ +use std::{env, path::PathBuf}; + +use anyhow::{Context, Result}; + +pub(crate) fn get_pacdef_group_dir() -> Result { + let mut result = get_pacdef_base_dir().context("getting pacdef base dir")?; + result.push("groups"); + Ok(result) +} + +pub(crate) fn get_pacdef_config_file() -> Result { + let mut result = get_pacdef_base_dir().context("getting pacdef base dir")?; + result.push("pacdef.conf"); + Ok(result) +} + +fn get_pacdef_base_dir() -> Result { + let mut dir = get_xdg_config_home().context("getting XDG_CONFIG_HOME")?; + dir.push("pacdef"); + Ok(dir) +} + +fn get_xdg_config_home() -> Result { + if let Ok(config) = env::var("XDG_CONFIG_HOME") { + Ok(config.into()) + } else { + let mut config = get_home_dir().context("falling back to $HOME/.config")?; + config.push(".config"); + Ok(config) + } +} + +fn get_home_dir() -> Result { + Ok(env::var("HOME").context("getting $HOME variable")?.into()) +}