mirror of
https://github.com/xlmnxp/blue-recorder.git
synced 2025-04-02 07:44:54 +03:00
94 lines
2.9 KiB
Rust
Executable File
94 lines
2.9 KiB
Rust
Executable File
{0b3276473286e219d31e9d252827fc5d0d65700a true 2946 config_management.rs 0xc001fb8770}
extern crate glib;
|
|
extern crate ini;
|
|
|
|
use glib::get_user_data_dir;
|
|
use ini::Ini;
|
|
use std::ops::Add;
|
|
use std::path::{Path, PathBuf};
|
|
|
|
pub fn initialize() -> PathBuf {
|
|
let config_path: PathBuf = Path::new(&get_user_data_dir().unwrap())
|
|
.join("blue-recorder")
|
|
.join("config.ini");
|
|
|
|
// fatch and make the config file
|
|
if !&config_path.exists() {
|
|
let config_directories = &mut config_path.to_owned();
|
|
config_directories.pop();
|
|
std::fs::create_dir_all(&config_directories).unwrap_or_default();
|
|
std::fs::File::create(&config_path).unwrap();
|
|
default();
|
|
} else {
|
|
merge_previous_version();
|
|
}
|
|
|
|
config_path
|
|
}
|
|
|
|
fn default() {
|
|
set("default", "frame", "60");
|
|
set("default", "delay", "0");
|
|
set("default", "folder",
|
|
String::from("file://")
|
|
.add(
|
|
glib::get_user_special_dir(glib::UserDirectory::Videos)
|
|
.unwrap_or(PathBuf::from(std::env::var("HOME").unwrap_or("/".to_string()).as_str()))
|
|
.to_str()
|
|
.unwrap(),
|
|
)
|
|
.as_str(),
|
|
);
|
|
set("default", "command", "");
|
|
set("default", "filename", "");
|
|
set("default", "videocheck", "1");
|
|
set("default", "audiocheck", "1");
|
|
set("default", "mousecheck", "1");
|
|
set("default", "followmousecheck", "0");
|
|
}
|
|
|
|
fn merge_previous_version() -> Option<PathBuf> {
|
|
let config_path: PathBuf = Path::new(&get_user_data_dir().unwrap())
|
|
.join("blue-recorder")
|
|
.join("config.ini");
|
|
|
|
// return none if config.ini not exists
|
|
if !&config_path.exists() {
|
|
return None;
|
|
}
|
|
|
|
let mut config_string: String = String::from_utf8(std::fs::read(&config_path).unwrap()).unwrap();
|
|
config_string = config_string.replace("Options", "default").replace("True", "1").replace("False", "0");
|
|
std::fs::write(&config_path, config_string).unwrap();
|
|
Some(config_path)
|
|
}
|
|
|
|
pub fn get(selection: &str, key: &str) -> String {
|
|
let config_path: PathBuf = Path::new(&get_user_data_dir().unwrap())
|
|
.join("blue-recorder")
|
|
.join("config.ini");
|
|
String::from(
|
|
Ini::load_from_file(&config_path)
|
|
.unwrap()
|
|
.with_section(Some(selection))
|
|
.get(key)
|
|
.unwrap_or_default(),
|
|
)
|
|
}
|
|
|
|
pub fn get_bool(selection: &str, key: &str) -> bool {
|
|
get(&selection, &key).eq_ignore_ascii_case("1")
|
|
}
|
|
|
|
pub fn set(selection: &str, key: &str, value: &str) -> bool {
|
|
let config_path: PathBuf = Path::new(&get_user_data_dir().unwrap())
|
|
.join("blue-recorder")
|
|
.join("config.ini");
|
|
let mut config_init = Ini::load_from_file(&config_path).unwrap_or_default();
|
|
config_init.with_section(Some(selection)).set(key, value);
|
|
config_init.write_to_file(&config_path).is_ok()
|
|
}
|
|
|
|
pub fn set_bool(selection: &str, key: &str, value: bool) -> bool {
|
|
set(&selection, &key, if value { "1" } else { "0" })
|
|
}
|