diff --git a/Cargo.lock b/Cargo.lock index ec1f3e3ff..a4f42efbf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14515,6 +14515,7 @@ version = "0.1.0" dependencies = [ "db-core", "db-user", + "dirs 6.0.0", "owhisper-interface", "schemars 0.8.22", "serde", @@ -14535,6 +14536,7 @@ name = "tauri-plugin-db2" version = "0.1.0" dependencies = [ "db-core", + "dirs 6.0.0", "futures-util", "serde", "serde_json", @@ -14785,29 +14787,13 @@ dependencies = [ "whisper-local-model", ] -[[package]] -name = "tauri-plugin-mcp" -version = "0.1.0" -dependencies = [ - "serde", - "specta", - "specta-typescript", - "strum 0.26.3", - "tauri", - "tauri-plugin", - "tauri-plugin-store", - "tauri-plugin-store2", - "tauri-specta", - "thiserror 2.0.17", - "tokio", -] - [[package]] name = "tauri-plugin-misc" version = "0.1.0" dependencies = [ "audio-utils", "buffer", + "dirs 6.0.0", "host", "indoc", "lazy_static", diff --git a/Taskfile.yaml b/Taskfile.yaml index 604178c2f..c3ac446c3 100644 --- a/Taskfile.yaml +++ b/Taskfile.yaml @@ -75,7 +75,7 @@ tasks: db: env: - DB: /Users/yujonglee/Library/Application Support/com.hyprnote.nightly/db.sqlite + DB: /Users/yujonglee/Library/Application Support/hyprnote/db.sqlite cmds: - | sqlite3 -json "$DB" 'SELECT store FROM main LIMIT 1;' | diff --git a/crates/gguf/src/lib.rs b/crates/gguf/src/lib.rs index ee8344f21..d5feccb83 100644 --- a/crates/gguf/src/lib.rs +++ b/crates/gguf/src/lib.rs @@ -163,8 +163,8 @@ mod tests { fn test_chat_format() { let test_path = dirs::data_dir() .unwrap() - .join("com.hyprnote.stable") - .join("ttt/hypr-llm.gguf"); + .join("hyprnote") + .join("models/llm/hypr-llm.gguf"); assert!(test_path.exists()); println!("{:?}", test_path.chat_format().unwrap().unwrap()); diff --git a/crates/llama/src/lib.rs b/crates/llama/src/lib.rs index 5669612a8..9a78e5f7e 100644 --- a/crates/llama/src/lib.rs +++ b/crates/llama/src/lib.rs @@ -441,8 +441,8 @@ mod tests { fn get_model() -> Llama { let model_path = dirs::data_dir() .unwrap() - .join("com.hyprnote.dev") - .join("ttt/hypr-llm.gguf"); + .join("hyprnote") + .join("models/llm/hypr-llm.gguf"); Llama::new(model_path).unwrap() } diff --git a/crates/transcribe-whisper-local/src/lib.rs b/crates/transcribe-whisper-local/src/lib.rs index 1fe4c9929..3a0526bbc 100644 --- a/crates/transcribe-whisper-local/src/lib.rs +++ b/crates/transcribe-whisper-local/src/lib.rs @@ -16,8 +16,8 @@ mod tests { async fn test_service() -> Result<(), Box> { let model_path = dirs::data_dir() .unwrap() - .join("com.hyprnote.dev") - .join("stt/ggml-small-q8_0.bin"); + .join("hyprnote") + .join("models/stt/ggml-small-q8_0.bin"); let service = HandleError::new( TranscribeService::builder().model_path(model_path).build(), diff --git a/owhisper/owhisper-config/src/lib.rs b/owhisper/owhisper-config/src/lib.rs index e2547df71..05d2f6816 100644 --- a/owhisper/owhisper-config/src/lib.rs +++ b/owhisper/owhisper-config/src/lib.rs @@ -46,15 +46,15 @@ impl ModelConfig { } pub fn models_dir() -> std::path::PathBuf { - dirs::cache_dir().unwrap().join("com.fastrepl.owhisper") + dirs::cache_dir().unwrap().join("owhisper") } pub fn data_dir() -> std::path::PathBuf { - dirs::data_dir().unwrap().join("com.fastrepl.owhisper") + dirs::data_dir().unwrap().join("owhisper") } pub fn config_dir() -> std::path::PathBuf { - dirs::config_dir().unwrap().join("com.fastrepl.owhisper") + dirs::config_dir().unwrap().join("owhisper") } pub fn global_config_path() -> std::path::PathBuf { diff --git a/owhisper/owhisper-server/src/server.rs b/owhisper/owhisper-server/src/server.rs index a36486169..7b1601a3e 100644 --- a/owhisper/owhisper-server/src/server.rs +++ b/owhisper/owhisper-server/src/server.rs @@ -384,7 +384,7 @@ mod tests { id: "whisper_cpp".to_string(), assets_dir: dirs::data_dir() .unwrap() - .join("com.hyprnote.dev/stt/ggml-small-q8_0.bin") + .join("hyprnote/models/stt/ggml-small-q8_0.bin") .to_str() .unwrap() .to_string(), diff --git a/plugins/db/Cargo.toml b/plugins/db/Cargo.toml index 46f57bfb8..6e0c43763 100644 --- a/plugins/db/Cargo.toml +++ b/plugins/db/Cargo.toml @@ -25,6 +25,7 @@ specta = { workspace = true } tauri = { workspace = true, features = ["test"] } tauri-specta = { workspace = true, features = ["derive", "typescript"] } +dirs = { workspace = true } serde = { workspace = true } thiserror = { workspace = true } uuid = { workspace = true } diff --git a/plugins/db/src/ext.rs b/plugins/db/src/ext.rs index 2ac6ca674..e6a388301 100644 --- a/plugins/db/src/ext.rs +++ b/plugins/db/src/ext.rs @@ -1,5 +1,4 @@ use std::future::Future; -use tauri::Manager; pub trait DatabasePluginExt { fn db_user_id(&self) -> impl Future, crate::Error>>; @@ -36,8 +35,7 @@ impl> DatabasePluginExt for T { fn db_local_path(&self) -> Result { let v = { - let app = self.app_handle(); - let dir = app.path().app_data_dir()?; + let dir = dirs::data_dir().unwrap().join("hyprnote"); std::fs::create_dir_all(&dir)?; dir.join("db.sqlite").to_str().unwrap().to_string() diff --git a/plugins/db2/Cargo.toml b/plugins/db2/Cargo.toml index ef472fb4a..41f8fe949 100644 --- a/plugins/db2/Cargo.toml +++ b/plugins/db2/Cargo.toml @@ -24,9 +24,9 @@ futures-util = { workspace = true } tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } tracing = { workspace = true } +dirs = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } specta = { workspace = true, features = ["serde_json"] } strum = { workspace = true, features = ["derive"] } - thiserror = { workspace = true } diff --git a/plugins/db2/src/error.rs b/plugins/db2/src/error.rs index 32654a442..0c523695a 100644 --- a/plugins/db2/src/error.rs +++ b/plugins/db2/src/error.rs @@ -8,6 +8,8 @@ pub enum Error { HyprDbError(#[from] hypr_db_core::Error), #[error(transparent)] TauriError(#[from] tauri::Error), + #[error(transparent)] + IoError(#[from] std::io::Error), } impl Serialize for Error { diff --git a/plugins/db2/src/ext.rs b/plugins/db2/src/ext.rs index 63bffe67f..bacfaad76 100644 --- a/plugins/db2/src/ext.rs +++ b/plugins/db2/src/ext.rs @@ -27,7 +27,8 @@ impl> Database2PluginExt for T { .await .unwrap() } else { - let dir_path = self.app_handle().path().app_data_dir()?; + let dir_path = dirs::data_dir().unwrap().join("hyprnote"); + std::fs::create_dir_all(&dir_path)?; let file_path = dir_path.join("db.sqlite"); hypr_db_core::DatabaseBuilder::default() diff --git a/plugins/listener/src/actors/controller.rs b/plugins/listener/src/actors/controller.rs index b2fb33635..a1177c8fb 100644 --- a/plugins/listener/src/actors/controller.rs +++ b/plugins/listener/src/actors/controller.rs @@ -279,7 +279,7 @@ impl ControllerActor { Some(RecorderActor::name()), RecorderActor, RecArgs { - app_dir: state.app.path().app_data_dir().unwrap(), + app_dir: dirs::data_dir().unwrap().join("hyprnote").join("sessions"), session_id: state.params.session_id.clone(), }, supervisor, diff --git a/plugins/local-llm/src/ext/plugin.rs b/plugins/local-llm/src/ext/plugin.rs index 401b81c16..2cfad6d1a 100644 --- a/plugins/local-llm/src/ext/plugin.rs +++ b/plugins/local-llm/src/ext/plugin.rs @@ -48,7 +48,11 @@ impl> LocalLlmPluginExt for T { } fn models_dir(&self) -> PathBuf { - self.path().app_data_dir().unwrap().join("ttt") + dirs::data_dir() + .unwrap() + .join("hyprnote") + .join("models") + .join("llm") } #[tracing::instrument(skip_all)] diff --git a/plugins/local-llm/src/lib.rs b/plugins/local-llm/src/lib.rs index 51eb8663c..407f336eb 100644 --- a/plugins/local-llm/src/lib.rs +++ b/plugins/local-llm/src/lib.rs @@ -69,7 +69,7 @@ pub fn init() -> tauri::plugin::TauriPlugin { .setup(move |app, _api| { specta_builder.mount_events(app); - let data_dir = app.path().app_data_dir().unwrap(); + let data_dir = dirs::data_dir().unwrap().join("hyprnote"); let models_dir = app.models_dir(); // for backward compatibility diff --git a/plugins/local-stt/src/ext.rs b/plugins/local-stt/src/ext.rs index 42b4d6706..a616c2836 100644 --- a/plugins/local-stt/src/ext.rs +++ b/plugins/local-stt/src/ext.rs @@ -49,7 +49,11 @@ pub trait LocalSttPluginExt { impl> LocalSttPluginExt for T { fn models_dir(&self) -> PathBuf { - self.path().app_data_dir().unwrap().join("stt") + dirs::data_dir() + .unwrap() + .join("hyprnote") + .join("models") + .join("stt") } fn list_ggml_backends(&self) -> Vec { @@ -132,7 +136,7 @@ impl> LocalSttPluginExt for T { start_internal_server(&supervisor, cache_dir, whisper_model).await } ServerType::External => { - let data_dir = self.app_handle().path().app_data_dir().unwrap().join("stt"); + let data_dir = self.models_dir(); let am_model = match model { SupportedSttModel::Am(m) => m, _ => return Err(crate::Error::UnsupportedModelType), diff --git a/plugins/misc/Cargo.toml b/plugins/misc/Cargo.toml index e8da4d63a..f1cbe79d4 100644 --- a/plugins/misc/Cargo.toml +++ b/plugins/misc/Cargo.toml @@ -24,6 +24,7 @@ tauri = { workspace = true, features = ["test"] } tauri-plugin-opener = { workspace = true } tauri-specta = { workspace = true, features = ["derive", "typescript"] } +dirs = { workspace = true } lazy_static = { workspace = true } regex = { workspace = true } rodio = { workspace = true, features = ["wav"] } diff --git a/plugins/misc/src/commands.rs b/plugins/misc/src/commands.rs index 8279c6302..a625f9fb9 100644 --- a/plugins/misc/src/commands.rs +++ b/plugins/misc/src/commands.rs @@ -1,6 +1,5 @@ use std::path::PathBuf; -use tauri::Manager; use tauri_plugin_opener::OpenerExt; use crate::audio::import_audio; @@ -36,7 +35,7 @@ pub async fn audio_exist( app: tauri::AppHandle, session_id: String, ) -> Result { - let data_dir = app.path().app_data_dir().unwrap(); + let data_dir = dirs::data_dir().unwrap().join("hyprnote").join("sessions"); let session_dir = data_dir.join(session_id); ["audio.wav", "audio.ogg"] @@ -55,7 +54,7 @@ pub async fn audio_delete( app: tauri::AppHandle, session_id: String, ) -> Result<(), String> { - let data_dir = app.path().app_data_dir().unwrap(); + let data_dir = dirs::data_dir().unwrap().join("hyprnote").join("sessions"); let session_dir = data_dir.join(session_id); ["audio.wav", "audio.ogg"] @@ -88,10 +87,10 @@ fn audio_import_internal( session_id: &str, source_path: &str, ) -> Result { - let data_dir = app - .path() - .app_data_dir() - .map_err(|err| AudioImportError::PathResolver(err.to_string()))?; + let data_dir = dirs::data_dir() + .ok_or_else(|| AudioImportError::PathResolver("Failed to get data directory".to_string()))? + .join("hyprnote") + .join("sessions"); let session_dir = data_dir.join(session_id); std::fs::create_dir_all(&session_dir)?; @@ -121,7 +120,7 @@ pub async fn audio_path( app: tauri::AppHandle, session_id: String, ) -> Result { - let data_dir = app.path().app_data_dir().unwrap(); + let data_dir = dirs::data_dir().unwrap().join("hyprnote").join("sessions"); let session_dir = data_dir.join(session_id); let path = ["audio.ogg", "audio.wav"] @@ -139,7 +138,7 @@ pub async fn audio_open( app: tauri::AppHandle, session_id: String, ) -> Result<(), String> { - let data_dir = app.path().app_data_dir().unwrap(); + let data_dir = dirs::data_dir().unwrap().join("hyprnote").join("sessions"); let session_dir = data_dir.join(session_id); app.opener() @@ -155,7 +154,7 @@ pub async fn delete_session_folder( app: tauri::AppHandle, session_id: String, ) -> Result<(), String> { - let data_dir = app.path().app_data_dir().unwrap(); + let data_dir = dirs::data_dir().unwrap().join("hyprnote").join("sessions"); let session_dir = data_dir.join(session_id); if session_dir.exists() { diff --git a/plugins/tracing/src/commands.rs b/plugins/tracing/src/commands.rs index 65c0e67d8..47f2ccca3 100644 --- a/plugins/tracing/src/commands.rs +++ b/plugins/tracing/src/commands.rs @@ -5,8 +5,7 @@ use crate::{Level, TracingPluginExt}; #[tauri::command] #[specta::specta] pub async fn logs_dir(app: tauri::AppHandle) -> Result { - let bundle_id = app.config().identifier.clone(); - app.logs_dir(bundle_id).map_err(|e| e.to_string()) + app.logs_dir().map_err(|e| e.to_string()) } #[tauri::command] diff --git a/plugins/tracing/src/ext.rs b/plugins/tracing/src/ext.rs index 300243505..23f9a92e2 100644 --- a/plugins/tracing/src/ext.rs +++ b/plugins/tracing/src/ext.rs @@ -1,14 +1,13 @@ use std::path::PathBuf; pub trait TracingPluginExt { - fn logs_dir(&self, bundle_id: impl Into) -> Result; + fn logs_dir(&self) -> Result; fn do_log(&self, level: Level, data: Vec) -> Result<(), crate::Error>; } impl> TracingPluginExt for T { - fn logs_dir(&self, bundle_id: impl Into) -> Result { - let base_dir = dirs::data_dir().unwrap(); - let logs_dir = base_dir.join(bundle_id.into()).join("logs"); + fn logs_dir(&self) -> Result { + let logs_dir = dirs::home_dir().unwrap().join("Library/Logs/hyprnote"); let _ = std::fs::create_dir_all(&logs_dir); Ok(logs_dir) } diff --git a/plugins/tracing/src/lib.rs b/plugins/tracing/src/lib.rs index 2d894f2a0..774f541f6 100644 --- a/plugins/tracing/src/lib.rs +++ b/plugins/tracing/src/lib.rs @@ -40,10 +40,9 @@ pub fn init() -> tauri::plugin::TauriPlugin { .unwrap_or_else(|_| EnvFilter::new("info")) .add_directive("ort=warn".parse().unwrap()); - if let Some((file_writer, guard)) = make_file_writer_if_enabled( - true, - &app.logs_dir(app.config().identifier.clone()).unwrap(), - ) { + if let Some((file_writer, guard)) = + make_file_writer_if_enabled(true, &app.logs_dir().unwrap()) + { tracing_subscriber::Registry::default() .with(env_filter) .with(sentry::integrations::tracing::layer()) diff --git a/scripts/info.sh b/scripts/info.sh index 1f93b08ac..f60c7af9b 100755 --- a/scripts/info.sh +++ b/scripts/info.sh @@ -5,15 +5,15 @@ nightly_user_id="" stable_version="" nightly_version="" -if [ -d "$HOME/Library/Application Support/com.hyprnote.stable" ]; then - if [ -f "$HOME/Library/Application Support/com.hyprnote.stable/store.json" ]; then - stable_user_id=$(jq -r '."auth-user-id" // empty' "$HOME/Library/Application Support/com.hyprnote.stable/store.json") +if [ -d "$HOME/Library/Application Support/hyprnote" ]; then + if [ -f "$HOME/Library/Application Support/hyprnote/store.json" ]; then + stable_user_id=$(jq -r '."auth-user-id" // empty' "$HOME/Library/Application Support/hyprnote/store.json") fi fi -if [ -d "$HOME/Library/Application Support/com.hyprnote.nightly" ]; then - if [ -f "$HOME/Library/Application Support/com.hyprnote.nightly/store.json" ]; then - nightly_user_id=$(jq -r '."auth-user-id" // empty' "$HOME/Library/Application Support/com.hyprnote.nightly/store.json") +if [ -d "$HOME/Library/Application Support/hyprnote-nightly" ]; then + if [ -f "$HOME/Library/Application Support/hyprnote-nightly/store.json" ]; then + nightly_user_id=$(jq -r '."auth-user-id" // empty' "$HOME/Library/Application Support/hyprnote-nightly/store.json") fi fi diff --git a/scripts/swap.sh b/scripts/swap.sh index c69ee8548..68956aee7 100644 --- a/scripts/swap.sh +++ b/scripts/swap.sh @@ -10,8 +10,8 @@ if pgrep -q "Hyprnote"; then exit 1 fi -STABLE_DIR="$HOME/Library/Application Support/com.hyprnote.stable" -NIGHTLY_DIR="$HOME/Library/Application Support/com.hyprnote.nightly" +STABLE_DIR="$HOME/Library/Application Support/hyprnote" +NIGHTLY_DIR="$HOME/Library/Application Support/hyprnote-nightly" TEMP_DIR=$(mktemp -d) if [[ ! -d "$STABLE_DIR" ]]; then