From 6130a99c4b67584183170c01b15c049d5a33cdfa Mon Sep 17 00:00:00 2001 From: tonoco Date: Mon, 20 Jul 2026 16:02:10 +0000 Subject: [PATCH] fix(lib): don't create '~' in $HOME (#166) * fix(lib): don't create '~' in $HOME * throw an error wen fail to get home directory --------- Co-authored-by: arabian --- pwsp-gui/src/main.rs | 2 +- pwsp-lib/src/types/config.rs | 2 +- pwsp-lib/src/utils/gui.rs | 13 +++++++++---- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/pwsp-gui/src/main.rs b/pwsp-gui/src/main.rs index 452c748..bab97ad 100644 --- a/pwsp-gui/src/main.rs +++ b/pwsp-gui/src/main.rs @@ -59,7 +59,7 @@ async fn download_audio_from_url(uri: &str) -> Result { .and_then(|n| n.to_str()) .unwrap_or("downloaded_audio.mp3"); - let save_path = ensure_pwsp_audio_dir().join(sanitized_file_name); + let save_path = ensure_pwsp_audio_dir()?.join(sanitized_file_name); let response = reqwest::get(target_url) .await? diff --git a/pwsp-lib/src/types/config.rs b/pwsp-lib/src/types/config.rs index 9668237..b1ea601 100644 --- a/pwsp-lib/src/types/config.rs +++ b/pwsp-lib/src/types/config.rs @@ -121,7 +121,7 @@ impl Default for GuiConfig { save_scale_factor: false, pause_on_exit: false, - dirs: vec![ensure_pwsp_audio_dir()], + dirs: vec![ensure_pwsp_audio_dir().unwrap()], preferred_theme: PreferredTheme::System, dirs_settings: HashMap::new(), diff --git a/pwsp-lib/src/utils/gui.rs b/pwsp-lib/src/utils/gui.rs index c40e264..e45e371 100644 --- a/pwsp-lib/src/utils/gui.rs +++ b/pwsp-lib/src/utils/gui.rs @@ -9,6 +9,7 @@ use crate::{ }; use anyhow::{Result, anyhow}; use std::{ + fs, path::PathBuf, sync::{Arc, Mutex}, time::Instant, @@ -37,15 +38,19 @@ pub fn make_request_async(request: Request) { }); } -pub fn ensure_pwsp_audio_dir() -> PathBuf { - let audio_dir = dirs::audio_dir().unwrap_or("~/Music".into()); +pub fn ensure_pwsp_audio_dir() -> Result { + let audio_dir = dirs::audio_dir().unwrap_or( + dirs::home_dir() + .map(|p| p.join("Music")) + .ok_or_else(|| anyhow!("Failed to get home directory. Is your system ok?"))?, + ); let pwsp_audio_dir = audio_dir.join("PWSP"); if !pwsp_audio_dir.exists() { - std::fs::create_dir_all(&pwsp_audio_dir).ok(); + fs::create_dir_all(&pwsp_audio_dir)?; } - pwsp_audio_dir + Ok(pwsp_audio_dir) } pub fn format_time_pair(position: f32, duration: f32) -> String {