mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-16 14:58:05 +08:00
* Extract CEF rendered UI into a separate process and crate * Review * Review * Review * Review * Remove necessary workarounds * Block on frame copy ack * Crop and resample frames correctly * Skip blank frames * Fix deps * Fix fmt * Fix clippy warning * Review * Fix todo
51 lines
1.2 KiB
Rust
51 lines
1.2 KiB
Rust
use std::fs;
|
|
use std::io;
|
|
use std::path::{Path, PathBuf};
|
|
|
|
#[cfg(target_os = "linux")]
|
|
const APP_DIRECTORY_NAME: &str = "graphite";
|
|
#[cfg(not(target_os = "linux"))]
|
|
const APP_DIRECTORY_NAME: &str = "Graphite";
|
|
|
|
pub(crate) fn app_tmp_dir() -> PathBuf {
|
|
let path = std::env::temp_dir().join(APP_DIRECTORY_NAME);
|
|
if let Err(e) = fs::create_dir_all(&path) {
|
|
tracing::error!("Failed to create temp directory at {path:?}: {e}");
|
|
}
|
|
path
|
|
}
|
|
|
|
/// Temporary directory that is automatically deleted when dropped.
|
|
pub struct TempDir {
|
|
path: PathBuf,
|
|
}
|
|
|
|
impl TempDir {
|
|
pub fn new() -> io::Result<Self> {
|
|
Self::new_with_parent(app_tmp_dir())
|
|
}
|
|
|
|
pub fn new_with_parent(parent: impl AsRef<Path>) -> io::Result<Self> {
|
|
let random_suffix = format!("{:032x}", rand::random::<u128>());
|
|
let name = format!("{}_{}", std::process::id(), random_suffix);
|
|
let path = parent.as_ref().join(name);
|
|
fs::create_dir_all(&path)?;
|
|
Ok(Self { path })
|
|
}
|
|
}
|
|
|
|
impl Drop for TempDir {
|
|
fn drop(&mut self) {
|
|
let result = fs::remove_dir_all(&self.path);
|
|
if let Err(e) = result {
|
|
tracing::error!("Failed to remove temporary directory at {:?}: {}", self.path, e);
|
|
}
|
|
}
|
|
}
|
|
|
|
impl AsRef<Path> for TempDir {
|
|
fn as_ref(&self) -> &Path {
|
|
&self.path
|
|
}
|
|
}
|