feat: follow XDG spec on linux/mac and use windows known folders for config and logs (#1153)
This commit is contained in:
@@ -29,13 +29,14 @@ xcap = "0.0.14"
|
||||
reqwest = { version = "0.11", features = ["json", "rustls-tls"] , default-features = false}
|
||||
async-trait = "0.1"
|
||||
chrono = { version = "0.4.38", features = ["serde"] }
|
||||
dirs = "5.0.1"
|
||||
etcetera = "0.8.0"
|
||||
tempfile = "3.8"
|
||||
include_dir = "0.7.4"
|
||||
google-drive3 = "6.0.0"
|
||||
webbrowser = "0.8"
|
||||
http-body-util = "0.1.2"
|
||||
regex = "1.11.1"
|
||||
once_cell = "1.20.2"
|
||||
|
||||
[dev-dependencies]
|
||||
serial_test = "3.0.0"
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use base64::Engine;
|
||||
use etcetera::{choose_app_strategy, AppStrategy};
|
||||
use indoc::{formatdoc, indoc};
|
||||
use reqwest::{Client, Url};
|
||||
use serde_json::{json, Value};
|
||||
@@ -216,11 +217,13 @@ impl ComputerControllerRouter {
|
||||
}),
|
||||
);
|
||||
|
||||
// Create cache directory in user's home directory
|
||||
let cache_dir = dirs::cache_dir()
|
||||
.unwrap_or_else(|| create_system_automation().get_temp_path())
|
||||
.join("goose")
|
||||
.join("computer_controller");
|
||||
// choose_app_strategy().cache_dir()
|
||||
// - macOS/Linux: ~/.cache/goose/computer_controller/
|
||||
// - Windows: ~\AppData\Local\Block\goose\cache\computer_controller\
|
||||
// keep previous behavior of defaulting to /tmp/
|
||||
let cache_dir = choose_app_strategy(crate::APP_STRATEGY.clone())
|
||||
.map(|strategy| strategy.in_cache_dir("computer_controller"))
|
||||
.unwrap_or_else(|_| create_system_automation().get_temp_path());
|
||||
|
||||
fs::create_dir_all(&cache_dir).unwrap_or_else(|_| {
|
||||
println!(
|
||||
|
||||
@@ -3,6 +3,7 @@ mod shell;
|
||||
|
||||
use anyhow::Result;
|
||||
use base64::Engine;
|
||||
use etcetera::{choose_app_strategy, AppStrategy};
|
||||
use indoc::formatdoc;
|
||||
use serde_json::{json, Value};
|
||||
use std::{
|
||||
@@ -278,9 +279,16 @@ impl DeveloperRouter {
|
||||
},
|
||||
};
|
||||
|
||||
// Check for global hints in ~/.config/goose/.goosehints
|
||||
let global_hints_path =
|
||||
PathBuf::from(shellexpand::tilde("~/.config/goose/.goosehints").to_string());
|
||||
// choose_app_strategy().config_dir()
|
||||
// - macOS/Linux: ~/.config/goose/
|
||||
// - Windows: ~\AppData\Roaming\Block\goose\config\
|
||||
// keep previous behavior of expanding ~/.config in case this fails
|
||||
let global_hints_path = choose_app_strategy(crate::APP_STRATEGY.clone())
|
||||
.map(|strategy| strategy.in_config_dir(".goosehints"))
|
||||
.unwrap_or_else(|_| {
|
||||
PathBuf::from(shellexpand::tilde("~/.config/goose/.goosehints").to_string())
|
||||
});
|
||||
|
||||
// Create the directory if it doesn't exist
|
||||
let _ = std::fs::create_dir_all(global_hints_path.parent().unwrap());
|
||||
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
use etcetera::AppStrategyArgs;
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
pub static APP_STRATEGY: Lazy<AppStrategyArgs> = Lazy::new(|| AppStrategyArgs {
|
||||
top_level_domain: "Block".to_string(),
|
||||
author: "Block".to_string(),
|
||||
app_name: "goose".to_string(),
|
||||
});
|
||||
|
||||
mod computercontroller;
|
||||
mod developer;
|
||||
mod google_drive;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use async_trait::async_trait;
|
||||
use etcetera::{choose_app_strategy, AppStrategy};
|
||||
use indoc::formatdoc;
|
||||
use serde_json::{json, Value};
|
||||
use std::{
|
||||
@@ -178,10 +179,13 @@ impl MemoryRouter {
|
||||
.join(".goose")
|
||||
.join("memory");
|
||||
|
||||
// Check for .config/goose/memory in user's home directory
|
||||
let global_memory_dir = dirs::home_dir()
|
||||
.map(|home| home.join(".config/goose/memory"))
|
||||
.unwrap_or_else(|| PathBuf::from(".config/goose/memory"));
|
||||
// choose_app_strategy().config_dir()
|
||||
// - macOS/Linux: ~/.config/goose/memory/
|
||||
// - Windows: ~\AppData\Roaming\Block\goose\config\memory
|
||||
// if it fails, fall back to `.config/goose/memory` (relative to the current dir)
|
||||
let global_memory_dir = choose_app_strategy(crate::APP_STRATEGY.clone())
|
||||
.map(|strategy| strategy.in_config_dir("memory"))
|
||||
.unwrap_or_else(|_| PathBuf::from(".config/goose/memory"));
|
||||
|
||||
fs::create_dir_all(&global_memory_dir).unwrap();
|
||||
fs::create_dir_all(&local_memory_dir).unwrap();
|
||||
|
||||
Reference in New Issue
Block a user