aboutsummaryrefslogtreecommitdiff
path: root/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config.rs')
-rw-r--r--src/config.rs47
1 files changed, 33 insertions, 14 deletions
diff --git a/src/config.rs b/src/config.rs
index 0be1d09..f38b571 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -1,26 +1,44 @@
use directories::{ProjectDirs, UserDirs};
use serde::{Deserialize, Serialize};
+use std::fs;
+
+use expanduser::expanduser;
#[derive(Serialize, Deserialize)]
pub struct Config {
pub music_roots: Vec<String>,
pub audio_exts: Vec<String>,
pub skip_window_secs: u64,
- pub learning_rate: f32,
- pub decay_rate: f32,
- pub min_score_thresh: f32,
pub temperature: f32,
+ pub low_weight: f32,
+ pub mid_weight: f32,
+ pub high_weight: f32,
+ pub max_weight: f32,
}
-pub fn default_state_path() -> String {
+fn default_config_path() -> String {
+ let name = "mood.json";
ProjectDirs::from("qualifier", "organisation", "mood")
- .and_then(|pd| {
- pd.config_dir()
- .join("mood.ron")
- .to_str()
- .map(|x| x.to_string())
- })
- .unwrap_or("~/.config/mood/mood.ron".to_string())
+ .and_then(|pd| pd.config_dir().join(name).to_str().map(|x| x.to_string()))
+ .unwrap_or(format!("~/.config/mood/{name}"))
+}
+
+impl Config {
+ pub fn try_load() -> Result<Config, String> {
+ expanduser(default_config_path())
+ .map_err(|e| e.to_string())
+ .and_then(|p| fs::read_to_string(p).map_err(|e| e.to_string()))
+ .and_then(|contents| serde_json::from_str(&contents).map_err(|e| e.to_string()))
+ }
+
+ pub fn try_save(&self) -> Result<(), String> {
+ let path = expanduser(default_config_path()).map_err(|e| e.to_string())?;
+ _ = path.parent().map(std::fs::create_dir_all);
+ let serialised = serde_json::to_string_pretty(self)
+ .map_err(|e| format!("Failed to serialize config: {}", e))?;
+ fs::write(&path, serialised).map_err(|e| format!("Failed to write config file: {}", e))?;
+ Ok(())
+ }
}
impl Default for Config {
@@ -39,10 +57,11 @@ impl Default for Config {
.map(String::from)
.collect(),
skip_window_secs: 60,
- learning_rate: 0.1,
- decay_rate: 0.001,
- min_score_thresh: 1e-5,
temperature: 0.6,
+ low_weight: 0.25,
+ mid_weight: 0.5,
+ high_weight: 0.75,
+ max_weight: 1.0,
}
}
}