diff --git a/Cargo.lock b/Cargo.lock index eab8ca3..9712d56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,11 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +[[package]] +name = "ahash" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" + [[package]] name = "anyhow" version = "1.0.38" @@ -45,6 +51,7 @@ dependencies = [ "gio", "glib", "gtk", + "rust-ini", ] [[package]] @@ -79,6 +86,27 @@ version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "dlv-list" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b391911b9a786312a10cb9d2b3d0735adfd5a8113eb3648de26a75e91b0826c" +dependencies = [ + "rand", +] + [[package]] name = "either" version = "1.6.1" @@ -245,6 +273,17 @@ dependencies = [ "system-deps", ] +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi", +] + [[package]] name = "gio" version = "0.9.1" @@ -381,6 +420,15 @@ dependencies = [ "system-deps", ] +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +dependencies = [ + "ahash", +] + [[package]] name = "heck" version = "0.3.2" @@ -417,6 +465,16 @@ version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" +[[package]] +name = "ordered-multimap" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c672c7ad9ec066e428c00eb917124a06f08db19e2584de982cc34b1f4c12485" +dependencies = [ + "dlv-list", + "hashbrown", +] + [[package]] name = "pango" version = "0.9.1" @@ -462,6 +520,12 @@ version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" +[[package]] +name = "ppv-lite86" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" + [[package]] name = "proc-macro-crate" version = "0.1.5" @@ -525,6 +589,57 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom", + "libc", + "rand_chacha", + "rand_core", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rust-ini" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55b134767a87e0b086f73a4ce569ac9ce7d202f39c8eab6caa266e2617e73ac6" +dependencies = [ + "cfg-if 0.1.10", + "ordered-multimap", +] + [[package]] name = "serde" version = "1.0.123" @@ -634,6 +749,12 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index a099640..56594bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,7 @@ edition = "2018" [dependencies] glib = "0.10.3" +rust-ini = "0.16" [dependencies.gtk] version = "0.9.0" diff --git a/src/config_management.rs b/src/config_management.rs new file mode 100644 index 0000000..4ced15b --- /dev/null +++ b/src/config_management.rs @@ -0,0 +1,68 @@ +extern crate ini; +extern crate glib; + +use glib::get_user_data_dir; +use ini::Ini; +use std::path::{Path, PathBuf}; +use std::ops::Add; + +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(); + } + + config_path +} + +fn default() { + set("default", "frame", "50"); + set("default", "delay", "0"); + set( + "default", + "folder", + String::from("file://") + .add( + glib::get_user_special_dir(glib::UserDirectory::Videos) + .expect(std::env::var("HOME").expect("/").as_str()) + .to_str().unwrap(), + ) + .as_str(), + ); + set("default", "command", ""); + set("default", "filename", ""); + set("default", "videocheck", "true"); + set("default", "audiocheck", "true"); + set("default", "mousecheck", "true"); + set("default", "followmousecheck", "false"); +} + +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 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() +} diff --git a/src/main.rs b/src/main.rs index e44ad35..5adba78 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,12 +1,10 @@ extern crate gio; extern crate gtk; -extern crate glib; +mod config_management; -use std::path::PathBuf; use gio::prelude::*; use gtk::prelude::*; use gtk::{Builder, Window}; -use glib::get_user_data_dir; use std::path::Path; fn main() { if gtk::init().is_err() { @@ -14,16 +12,9 @@ fn main() { return; } let builder: Builder = Builder::from_file(Path::new("windows/ui.glade")); - - // fatch and make the config file - let config_path = Path::new(&get_user_data_dir().unwrap()).join("blue-recorder").join("config.ini"); - 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(); - } + config_management::initialize(); + config_management::set("default", "frame", "30"); // get Objects from UI let main_window: Window = builder.get_object("window1").unwrap();