Desktop set cef data and cache directory (#2927)

This commit is contained in:
Timon 2025-07-24 16:56:57 +00:00 committed by GitHub
parent e7b8b5a3b6
commit 9f4f3681c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 85 additions and 10 deletions

53
Cargo.lock generated
View File

@ -1,6 +1,6 @@
# This file is automatically @generated by Cargo. # This file is automatically @generated by Cargo.
# It is not intended for manual editing. # It is not intended for manual editing.
version = 3 version = 4
[[package]] [[package]]
name = "Inflector" name = "Inflector"
@ -632,7 +632,7 @@ checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81"
dependencies = [ dependencies = [
"serde", "serde",
"termcolor", "termcolor",
"unicode-width 0.1.14", "unicode-width",
] ]
[[package]] [[package]]
@ -691,7 +691,7 @@ dependencies = [
"encode_unicode", "encode_unicode",
"libc", "libc",
"once_cell", "once_cell",
"unicode-width 0.2.1", "unicode-width",
"windows-sys 0.60.2", "windows-sys 0.60.2",
] ]
@ -938,6 +938,27 @@ dependencies = [
"crypto-common", "crypto-common",
] ]
[[package]]
name = "dirs"
version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
dependencies = [
"dirs-sys",
]
[[package]]
name = "dirs-sys"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
dependencies = [
"libc",
"option-ext",
"redox_users",
"windows-sys 0.60.2",
]
[[package]] [[package]]
name = "dispatch" name = "dispatch"
version = "0.2.0" version = "0.2.0"
@ -1799,6 +1820,7 @@ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"bytemuck", "bytemuck",
"cef", "cef",
"dirs",
"graphite-editor", "graphite-editor",
"include_dir", "include_dir",
"pollster", "pollster",
@ -2332,7 +2354,7 @@ checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd"
dependencies = [ dependencies = [
"console", "console",
"portable-atomic", "portable-atomic",
"unicode-width 0.2.1", "unicode-width",
"unit-prefix", "unit-prefix",
"web-time", "web-time",
] ]
@ -3328,6 +3350,12 @@ dependencies = [
"vcpkg", "vcpkg",
] ]
[[package]]
name = "option-ext"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
[[package]] [[package]]
name = "orbclient" name = "orbclient"
version = "0.3.48" version = "0.3.48"
@ -4032,6 +4060,17 @@ dependencies = [
"bitflags 2.9.1", "bitflags 2.9.1",
] ]
[[package]]
name = "redox_users"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b"
dependencies = [
"getrandom 0.2.16",
"libredox",
"thiserror 2.0.12",
]
[[package]] [[package]]
name = "regex" name = "regex"
version = "1.11.1" version = "1.11.1"
@ -5290,12 +5329,6 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94"
[[package]]
name = "unicode-width"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
[[package]] [[package]]
name = "unicode-width" name = "unicode-width"
version = "0.2.1" version = "0.2.1"

View File

@ -155,6 +155,7 @@ criterion = { version = "0.5", features = ["html_reports"] }
iai-callgrind = { version = "0.12.3" } iai-callgrind = { version = "0.12.3" }
ndarray = "0.16.1" ndarray = "0.16.1"
strum = { version = "0.26.3", features = ["derive"] } strum = { version = "0.26.3", features = ["derive"] }
dirs = "6.0"
[profile.dev] [profile.dev]
opt-level = 1 opt-level = 1

View File

@ -30,3 +30,4 @@ tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
tracing = "0.1.41" tracing = "0.1.41"
bytemuck = { version = "1.23.1", features = ["derive"] } bytemuck = { version = "1.23.1", features = ["derive"] }
include_dir = "0.7.4" include_dir = "0.7.4"
dirs.workspace = true

View File

@ -2,6 +2,7 @@ use crate::FrameBuffer;
use std::time::Instant; use std::time::Instant;
mod context; mod context;
mod dirs;
mod input; mod input;
mod internal; mod internal;
mod scheme_handler; mod scheme_handler;

View File

@ -4,6 +4,8 @@ use cef::{Browser, CefString, Settings, api_hash, args::Args, execute_process};
use thiserror::Error; use thiserror::Error;
use winit::event::WindowEvent; use winit::event::WindowEvent;
use crate::cef::dirs::{cef_cache_dir, cef_data_dir};
use super::input::InputState; use super::input::InputState;
use super::scheme_handler::{FRONTEND_DOMAIN, GRAPHITE_SCHEME}; use super::scheme_handler::{FRONTEND_DOMAIN, GRAPHITE_SCHEME};
use super::{CefEventHandler, input}; use super::{CefEventHandler, input};
@ -62,6 +64,8 @@ impl Context<Setup> {
windowless_rendering_enabled: 1, windowless_rendering_enabled: 1,
multi_threaded_message_loop: 0, multi_threaded_message_loop: 0,
external_message_pump: 1, external_message_pump: 1,
root_cache_path: cef_data_dir().to_str().map(CefString::from).unwrap(),
cache_path: cef_cache_dir().to_str().map(CefString::from).unwrap(),
..Default::default() ..Default::default()
}; };

17
desktop/src/cef/dirs.rs Normal file
View File

@ -0,0 +1,17 @@
use std::path::PathBuf;
use crate::dirs::{ensure_dir_exists, graphite_data_dir};
static CEF_DIR_NAME: &str = "browser";
pub(crate) fn cef_data_dir() -> PathBuf {
let path = graphite_data_dir().join(CEF_DIR_NAME);
ensure_dir_exists(&path);
path
}
pub(crate) fn cef_cache_dir() -> PathBuf {
let path = cef_data_dir().join("cache");
ensure_dir_exists(&path);
path
}

16
desktop/src/dirs.rs Normal file
View File

@ -0,0 +1,16 @@
use std::fs::create_dir_all;
use std::path::PathBuf;
static APP_NAME: &str = "graphite-desktop";
pub(crate) fn ensure_dir_exists(path: &PathBuf) {
if !path.exists() {
create_dir_all(path).unwrap_or_else(|_| panic!("Failed to create directory at {path:?}"));
}
}
pub(crate) fn graphite_data_dir() -> PathBuf {
let path = dirs::data_dir().expect("Failed to get data directory").join(APP_NAME);
ensure_dir_exists(&path);
path
}

View File

@ -15,6 +15,8 @@ use render::{FrameBuffer, GraphicsState};
mod app; mod app;
use app::WinitApp; use app::WinitApp;
mod dirs;
#[derive(Debug)] #[derive(Debug)]
pub(crate) enum CustomEvent { pub(crate) enum CustomEvent {
UiUpdate, UiUpdate,