76 lines
No EOL
2.5 KiB
Rust
76 lines
No EOL
2.5 KiB
Rust
use std::fs;
|
|
use std::io::ErrorKind;
|
|
use std::path::PathBuf;
|
|
use std::sync::OnceLock;
|
|
use directories::ProjectDirs;
|
|
use serde_derive::{Deserialize, Serialize};
|
|
|
|
pub static CONFIG_DIR: OnceLock<PathBuf> = OnceLock::new();
|
|
pub static CONFIG_FILE: OnceLock<PathBuf> = OnceLock::new();
|
|
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
pub struct Paths {
|
|
pub runelite_path: String,
|
|
pub java_path: String,
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
pub struct Versions {
|
|
pub runelite_version: String,
|
|
pub runelite_hash: String,
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
pub struct Config {
|
|
pub paths: Paths,
|
|
pub versions: Versions,
|
|
}
|
|
|
|
impl Config {
|
|
pub fn new() -> Config {
|
|
let mut runelite_path = CONFIG_DIR.get().unwrap().clone();
|
|
runelite_path.push("runelite.jar");
|
|
|
|
let new_config = Config {
|
|
paths: Paths { runelite_path: runelite_path.into_os_string().into_string().unwrap(), java_path: "java".to_string() },
|
|
versions: Versions { runelite_version: "".to_string(), runelite_hash: "".to_string() },
|
|
};
|
|
|
|
new_config.save_config();
|
|
|
|
new_config
|
|
}
|
|
|
|
pub fn get_config() -> Config {
|
|
let binding = ProjectDirs::from("sex", "gaycatgirl", "osrs-luncher").expect("Could not generate config path");
|
|
let expected_config_dir = binding.config_dir();
|
|
CONFIG_DIR.set(expected_config_dir.to_path_buf()).expect("Failed to set config dir");
|
|
|
|
let expected_config_file = expected_config_dir.join("config.toml");
|
|
CONFIG_FILE.set(expected_config_file.to_path_buf()).expect("Failed to set config file");
|
|
|
|
// check to see if a config already exists at the expected path
|
|
match fs::read_to_string(&expected_config_file) {
|
|
Ok(config_contents) => {
|
|
toml::from_str::<Config>(&config_contents).unwrap_or_else(|_| Config::new())
|
|
}
|
|
Err(error) => {
|
|
match error.kind() {
|
|
ErrorKind::NotFound => {
|
|
// config doesn't exist, create
|
|
Config::new()
|
|
}
|
|
_ => panic!("Could not read config file: {}", error),
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn save_config(&self) {
|
|
let file_path = CONFIG_FILE.get().unwrap().clone();
|
|
|
|
fs::create_dir_all(file_path.parent().unwrap()).expect("Could not create config directory");
|
|
fs::write(file_path, toml::to_string_pretty(self).expect("Failed to generate config string")).expect("Could not write config file");
|
|
}
|
|
} |