diff --git a/subprojects/gst-devtools/dots-viewer/Cargo.lock b/subprojects/gst-devtools/dots-viewer/Cargo.lock index e65b0ab7e4..040cca0d41 100644 --- a/subprojects/gst-devtools/dots-viewer/Cargo.lock +++ b/subprojects/gst-devtools/dots-viewer/Cargo.lock @@ -658,27 +658,6 @@ dependencies = [ "crypto-common", ] -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -826,7 +805,6 @@ dependencies = [ "actix-web-static-files", "anyhow", "clap", - "dirs", "glob", "notify", "once_cell", @@ -838,6 +816,7 @@ dependencies = [ "tokio", "tracing", "tracing-subscriber", + "windows", ] [[package]] @@ -1358,12 +1337,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - [[package]] name = "overload" version = "0.1.1" @@ -1510,17 +1483,6 @@ dependencies = [ "bitflags 2.6.0", ] -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom", - "libredox", - "thiserror", -] - [[package]] name = "regex" version = "1.11.1" @@ -2068,6 +2030,69 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f919aee0a93304be7f62e8e5027811bbba96bcb1de84d6618be56e43f8a32a1" +dependencies = [ + "windows-core", + "windows-targets 0.53.0", +] + +[[package]] +name = "windows-core" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "810ce18ed2112484b0d4e15d022e5f598113e220c53e373fb31e67e21670c1ce" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.53.0", +] + +[[package]] +name = "windows-implement" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb26fd936d991781ea39e87c3a27285081e3c0da5ca0fcbc02d368cc6f52ff01" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-result" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d08106ce80268c4067c0571ca55a9b4e9516518eaa1a1fe9b37ca403ae1d1a34" +dependencies = [ + "windows-targets 0.53.0", +] + +[[package]] +name = "windows-strings" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b888f919960b42ea4e11c2f408fadb55f78a9f236d5eef084103c8ce52893491" +dependencies = [ + "windows-targets 0.53.0", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -2119,13 +2144,29 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -2138,6 +2179,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -2150,6 +2197,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -2162,12 +2215,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -2180,6 +2245,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -2192,6 +2263,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -2204,6 +2281,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -2216,6 +2299,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + [[package]] name = "write16" version = "1.0.0" diff --git a/subprojects/gst-devtools/dots-viewer/Cargo.toml b/subprojects/gst-devtools/dots-viewer/Cargo.toml index 033ff3ed27..7cffd8782b 100644 --- a/subprojects/gst-devtools/dots-viewer/Cargo.toml +++ b/subprojects/gst-devtools/dots-viewer/Cargo.toml @@ -15,7 +15,6 @@ notify = "6.0" tokio = { version = "1.0", features = ["full"] } tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } -dirs = "5.0.1" serde_json = "1.0" once_cell = "1" clap = { version = "4", features = ["derive"] } @@ -26,6 +25,7 @@ glob = "0.3" single-instance = "0.3.3" opener = "0.7.1" anyhow = "1.0" +windows = { version = "0.59", features = ["Win32_UI_Shell"] } [build-dependencies] static-files = "0.2.1" diff --git a/subprojects/gst-devtools/dots-viewer/src/main.rs b/subprojects/gst-devtools/dots-viewer/src/main.rs index ada17de331..a315951e92 100644 --- a/subprojects/gst-devtools/dots-viewer/src/main.rs +++ b/subprojects/gst-devtools/dots-viewer/src/main.rs @@ -12,16 +12,14 @@ use notify::Watcher; use once_cell::sync::Lazy; use serde_json::json; use single_instance::SingleInstance; +use std::env; use std::path::Path; use std::path::PathBuf; use std::sync::{Arc, Mutex}; use std::time::SystemTime; use tokio::runtime; -use tracing::debug; -use tracing::error; -use tracing::info; use tracing::instrument; -use tracing::{event, Level}; +use tracing::{debug, error, info, warn}; include!(concat!(env!("OUT_DIR"), "/generated.rs")); @@ -89,6 +87,50 @@ impl std::fmt::Debug for GstDots { } } +fn get_user_cache_dir() -> PathBuf { + if let Ok(cache_dir) = env::var("XDG_CACHE_HOME") { + if !cache_dir.is_empty() { + return PathBuf::from(cache_dir); + } + } + + #[cfg(windows)] + { + use windows::Win32::UI::Shell::{ + FOLDERID_InternetCache, SHGetKnownFolderPath, KF_FLAG_DEFAULT, + }; + + unsafe { + if let Ok(path) = SHGetKnownFolderPath(&FOLDERID_InternetCache, KF_FLAG_DEFAULT, None) { + if let Ok(path_str) = path.to_string() { + return PathBuf::from(path_str); + } + } + } + } + + let home = if let Ok(home) = env::var("HOME") { + PathBuf::from(home) + } else { + #[cfg(windows)] + { + if let Ok(profile) = env::var("USERPROFILE") { + PathBuf::from(profile) + } else { + warn!("Could not find home directory: $HOME is not set, and user database could not be read."); + PathBuf::from(r"C:\") + } + } + #[cfg(unix)] + { + warn!("Could not find home directory: $HOME is not set, and user database could not be read."); + PathBuf::from("/") + } + }; + + home.join(".cache") +} + impl GstDots { fn new(args: Args) -> Arc { let gstdot_path = args @@ -96,7 +138,7 @@ impl GstDots { .as_ref() .map(std::path::PathBuf::from) .unwrap_or_else(|| { - let mut path = dirs::cache_dir().expect("Failed to find cache directory"); + let mut path = get_user_cache_dir(); path.push("gstreamer-dots"); path }); @@ -331,7 +373,7 @@ impl GstDots { .as_ref() .map(std::path::PathBuf::from) .unwrap_or_else(|| { - let mut path = dirs::cache_dir().expect("Failed to find cache directory"); + let mut path = get_user_cache_dir(); path.push("gstreamer-dots"); path });