Merge 8e50f663a3 into c423ad1bfc
This commit is contained in:
commit
d5dd415b15
2 changed files with 37 additions and 0 deletions
|
|
@ -54,6 +54,22 @@ fn get_state_dir() -> Option<PathBuf> {
|
||||||
dirs::state_dir()
|
dirs::state_dir()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get the data directory, with Flatpak sandbox support.
|
||||||
|
fn get_data_dir() -> Option<PathBuf> {
|
||||||
|
// Check if we're running in Flatpak
|
||||||
|
if env::var_os("FLATPAK_ID").is_some() {
|
||||||
|
// Try HOST_XDG_DATA_HOME first
|
||||||
|
if let Some(host_data) = env::var_os("HOST_XDG_DATA_HOME") {
|
||||||
|
return Some(PathBuf::from(host_data));
|
||||||
|
}
|
||||||
|
// Fallback: try to construct from HOME
|
||||||
|
if let Some(home) = env::var_os("HOME") {
|
||||||
|
return Some(PathBuf::from(home).join(".local").join("share"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dirs::data_dir()
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "subscription")]
|
#[cfg(feature = "subscription")]
|
||||||
mod subscription;
|
mod subscription;
|
||||||
#[cfg(feature = "subscription")]
|
#[cfg(feature = "subscription")]
|
||||||
|
|
@ -266,6 +282,24 @@ impl Config {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get data for the given application name and config version.
|
||||||
|
pub fn new_data(name: &str, version: u64) -> Result<Self, Error> {
|
||||||
|
// Look for [name]/v[version]
|
||||||
|
let path = sanitize_name(name)?.join(format!("v{}", version));
|
||||||
|
|
||||||
|
// Get libcosmic user data directory
|
||||||
|
let mut user_path = get_data_dir().ok_or(Error::NoConfigDirectory)?;
|
||||||
|
user_path.push("cosmic");
|
||||||
|
user_path.push(path);
|
||||||
|
// Create new data directory if not found.
|
||||||
|
fs::create_dir_all(&user_path)?;
|
||||||
|
|
||||||
|
Ok(Self {
|
||||||
|
system_path: None,
|
||||||
|
user_path: Some(user_path),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Start a transaction (to set multiple configs at the same time)
|
// Start a transaction (to set multiple configs at the same time)
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn transaction(&self) -> ConfigTransaction<'_> {
|
pub fn transaction(&self) -> ConfigTransaction<'_> {
|
||||||
|
|
|
||||||
|
|
@ -88,4 +88,7 @@ pub fn main() {
|
||||||
|
|
||||||
println!("Testing state");
|
println!("Testing state");
|
||||||
test_config(Config::new_state("com.system76.Example", 1).unwrap());
|
test_config(Config::new_state("com.system76.Example", 1).unwrap());
|
||||||
|
|
||||||
|
println!("Testing data");
|
||||||
|
test_config(Config::new_data("com.system76.Example", 1).unwrap());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue