use std::fs::{self, OpenOptions};
use std::io::{BufRead, BufReader, Write};
use std::path::PathBuf;
fn settings_path() -> PathBuf {
let home = std::env::var_os("HOME")
.or_else(|| std::env::var_os("USERPROFILE"))
.map(PathBuf::from)
.unwrap_or_else(|| PathBuf::from("."));
home.join("toolkit-zero").join(".browser-settings")
}
#[derive(Debug, Clone)]
pub struct BrowserSettings {
pub history_recording: bool,
pub session_persistence: bool,
}
impl Default for BrowserSettings {
fn default() -> Self {
BrowserSettings {
history_recording: true,
session_persistence: true,
}
}
}
pub fn load() -> BrowserSettings {
let mut s = BrowserSettings::default();
let Ok(file) = fs::File::open(settings_path()) else { return s };
for line in BufReader::new(file).lines() {
let Ok(line) = line else { continue };
let line = line.trim();
if line.starts_with('#') || line.is_empty() { continue; }
let Some((key, val)) = line.split_once('=') else { continue };
match key.trim() {
"history_recording" => s.history_recording = val.trim() == "true",
"session_persistence" => s.session_persistence = val.trim() == "true",
_ => {}
}
}
s
}
pub fn save(settings: &BrowserSettings) {
let path = settings_path();
if let Some(dir) = path.parent() {
let _ = fs::create_dir_all(dir);
}
let content = format!(
"history_recording={}\nsession_persistence={}\n",
settings.history_recording,
settings.session_persistence,
);
let _ = OpenOptions::new()
.write(true)
.create(true)
.truncate(true)
.open(&path)
.and_then(|mut f| f.write_all(content.as_bytes()));
}