Files
SoulStream/src-tauri/src/paths.rs
T

37 lines
1.7 KiB
Rust

//! Where this instance keeps everything it writes.
//!
//! One directory holds the library, the caches and the whole Freenet side —
//! persona, ledgers, node config and data. In a **debug build** the
//! `SOULSTREAM_DATA_DIR` environment variable moves it, and that is what makes
//! a second instance possible on one machine.
//!
//! That matters more than a convenience: most of the Community track is
//! two-sided and cannot be exercised with one account at all. Accepting a
//! friend request, a Space invitation and the join that answers it, removing a
//! member, rotating an epoch key, a proposal ping actually arriving — every one
//! of those had only unit tests until there was a second instance to talk to.
//!
//! A release build ignores the variable. An app whose data directory can be
//! redirected from the environment is an app whose identity can be redirected
//! from the environment, and the persona lives down there.
//!
//! A second instance also needs its own **node port** (`freenet_ws_port` in its
//! config, which the app now passes through to the peer it spawns) and, for
//! CDP, its own `SOULSTREAM_CDP_PORT`. Nothing else is shared: two instances
//! must never point at one library.db.
use std::path::PathBuf;
use tauri::Manager;
/// The root this instance writes under.
pub fn app_data(app: &tauri::AppHandle) -> Result<PathBuf, String> {
#[cfg(debug_assertions)]
if let Some(dir) = std::env::var_os("SOULSTREAM_DATA_DIR") {
let dir = PathBuf::from(dir);
std::fs::create_dir_all(&dir).map_err(|e| format!("SOULSTREAM_DATA_DIR: {e}"))?;
return Ok(dir);
}
app.path().app_data_dir().map_err(|e| e.to_string())
}