From 6bb2c08705fb7f9c5882d4c289ed74648dd395f4 Mon Sep 17 00:00:00 2001 From: Mario Rodas Date: Sun, 11 Oct 2020 04:20:00 +0000 Subject: [PATCH] Replace directories with platform_dirs create `directories` create is no longer maintained, and uses `~/Library/Preferences` on MacOS, but Apple advises against creating files in `Preferences`. `platform-dirs` allows to use `~/.config` on MacOS. --- Cargo.lock | 37 +++++++++++++++++++++++-------------- Cargo.toml | 2 +- src/config.rs | 19 +++++++++++-------- src/main.rs | 1 - 4 files changed, 35 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 826c6d8..1e86b92 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -805,16 +805,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "directories" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551a778172a450d7fc12e629ca3b0428d00f6afa9a43da1b630d54604e97371c" -dependencies = [ - "cfg-if", - "dirs-sys", -] - [[package]] name = "dirs" version = "1.0.5" @@ -827,10 +817,20 @@ dependencies = [ ] [[package]] -name = "dirs-sys" -version = "0.3.5" +name = "dirs-next" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a" +checksum = "1cbcf9241d9e8d106295bd496bbe2e9cffd5fa098f2a8c9e2bbcbf09773c11a8" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c60f7b8a8953926148223260454befb50c751d3c50e1c178c4fd1ace4083c9a" dependencies = [ "libc", "redox_users", @@ -1908,7 +1908,6 @@ dependencies = [ "crossbeam-channel", "cursive", "dbus", - "directories", "failure", "fern", "futures 0.1.30", @@ -1920,6 +1919,7 @@ dependencies = [ "librespot-protocol", "log 0.4.11", "notify-rust", + "platform-dirs", "rand 0.7.3", "regex", "reqwest 0.9.24", @@ -2321,6 +2321,15 @@ version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33" +[[package]] +name = "platform-dirs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e188d043c1a692985f78b5464853a263f1a27e5bd6322bad3a4078ee3c998a38" +dependencies = [ + "dirs-next", +] + [[package]] name = "portaudio-rs" version = "0.3.2" diff --git a/Cargo.toml b/Cargo.toml index 1f80764..d7df09d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ clap = "2.33.0" chrono = "0.4" reqwest = "0.9" crossbeam-channel = "0.4" -directories = "2.0" +platform-dirs = "0.3.0" failure = "0.1" fern = "0.5" futures = { version = "0.3", features = ["compat"] } diff --git a/src/config.rs b/src/config.rs index fa2fe8a..8119f40 100644 --- a/src/config.rs +++ b/src/config.rs @@ -3,7 +3,7 @@ use std::fs; use std::path::{Path, PathBuf}; use std::sync::RwLock; -use directories::ProjectDirs; +use platform_dirs::AppDirs; pub const CLIENT_ID: &str = "d420a117a32841c2b3474932e49fb54b"; @@ -60,18 +60,21 @@ pub fn load() -> Result { load_or_generate_default(path, |_| Ok(Config::default()), false) } -fn proj_dirs() -> ProjectDirs { +fn proj_dirs() -> AppDirs { match *BASE_PATH.read().expect("can't readlock BASE_PATH") { - Some(ref basepath) => ProjectDirs::from_path(basepath.clone()).expect("invalid basepath"), - None => { - ProjectDirs::from("org", "affekt", "ncspot").expect("can't determine project paths") - } + Some(ref basepath) => AppDirs { + cache_dir: basepath.join(".cache"), + config_dir: basepath.join(".config"), + data_dir: basepath.join(".local/share"), + state_dir: basepath.join(".local/state"), + }, + None => AppDirs::new(Some("ncspot"), true).expect("can't determine project paths"), } } pub fn config_path(file: &str) -> PathBuf { let proj_dirs = proj_dirs(); - let cfg_dir = proj_dirs.config_dir(); + let cfg_dir = &proj_dirs.config_dir; trace!("{:?}", cfg_dir); if cfg_dir.exists() && !cfg_dir.is_dir() { fs::remove_file(cfg_dir).expect("unable to remove old config file"); @@ -86,7 +89,7 @@ pub fn config_path(file: &str) -> PathBuf { pub fn cache_path(file: &str) -> PathBuf { let proj_dirs = proj_dirs(); - let cache_dir = proj_dirs.cache_dir(); + let cache_dir = &proj_dirs.cache_dir; if !cache_dir.exists() { fs::create_dir_all(cache_dir).expect("can't create cache folder"); } diff --git a/src/main.rs b/src/main.rs index 90da486..4668752 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,6 @@ extern crate crossbeam_channel; extern crate cursive; #[cfg(feature = "share_clipboard")] extern crate clipboard; -extern crate directories; extern crate failure; extern crate futures; #[macro_use]