summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAkshay <nerdy@peppe.rs>2020-08-02 17:30:51 +0530
committerAkshay <nerdy@peppe.rs>2020-08-02 17:30:51 +0530
commit3cc2fafe84ec2c8f40a9348f9fe9a5408606db6e (patch)
tree7b5e05c85ce5c34766cc0e28bde7b931c698c6f7
parent83cba9dae6e4cc6a348ef0b9ee7e2c7f747409f5 (diff)
parent7f65b6960b300727bc16dedc39d5793d4ea83a0a (diff)
Merge branch 'load-config-json-app-config' of https://github.com/jjn2009/dijo into feature/config-file
-rw-r--r--src/utils.rs43
-rw-r--r--src/views.rs6
2 files changed, 40 insertions, 9 deletions
diff --git a/src/utils.rs b/src/utils.rs
index e6ec6ac..b45bbf3 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -1,8 +1,14 @@
use cursive::theme::{BaseColor, Color};
use directories::ProjectDirs;
+use serde::Deserialize;
+use std;
use std::fs;
+use std::fs::File;
+use std::io::Read;
use std::path::PathBuf;
+#[derive(Deserialize)]
+#[serde(default = "default_config")]
pub struct AppConfig {
pub true_chr: char,
pub false_chr: char,
@@ -14,13 +20,33 @@ pub struct AppConfig {
// app dimensions
pub grid_width: usize,
+}
- pub reached_color: Color,
- pub todo_color: Color,
- pub future_color: Color,
+impl AppConfig {
+ // TODO: implement string parsing from config.json
+ pub fn reached_color(&self) -> Color {
+ return Color::Dark(BaseColor::Cyan);
+ }
+ pub fn todo_color(&self) -> Color {
+ return Color::Dark(BaseColor::Magenta);
+ }
+ pub fn future_color(&self) -> Color {
+ return Color::Dark(BaseColor::Magenta);
+ }
}
pub fn load_configuration_file() -> AppConfig {
+ let config_f = config_file();
+ if let Ok(ref mut f) = File::open(config_f) {
+ let mut j = String::new();
+ f.read_to_string(&mut j);
+ return serde_json::from_str(&j).unwrap();
+ } else {
+ return default_config();
+ }
+}
+
+pub fn default_config() -> AppConfig {
return AppConfig {
true_chr: '·',
false_chr: '·',
@@ -28,9 +54,6 @@ pub fn load_configuration_file() -> AppConfig {
view_width: 25,
view_height: 8,
grid_width: 3,
- reached_color: Color::Dark(BaseColor::Cyan),
- todo_color: Color::Dark(BaseColor::Magenta),
- future_color: Color::Light(BaseColor::Black),
};
}
@@ -39,6 +62,14 @@ fn project_dirs() -> ProjectDirs {
.unwrap_or_else(|| panic!("Invalid home directory!"))
}
+pub fn config_file() -> PathBuf {
+ let proj_dirs = project_dirs();
+ let mut data_file = PathBuf::from(proj_dirs.data_dir());
+ fs::create_dir_all(&data_file);
+ data_file.push("config.json");
+ return data_file;
+}
+
pub fn habit_file() -> PathBuf {
let proj_dirs = project_dirs();
let mut data_file = PathBuf::from(proj_dirs.data_dir());
diff --git a/src/views.rs b/src/views.rs
index da077ac..7adf8c6 100644
--- a/src/views.rs
+++ b/src/views.rs
@@ -36,9 +36,9 @@ where
let year = now.year();
let month = now.month();
- let goal_reached_style = Style::from(CONFIGURATION.reached_color);
- let todo_style = Style::from(CONFIGURATION.todo_color);
- let future_style = Style::from(CONFIGURATION.future_color);
+ let goal_reached_style = Style::from(CONFIGURATION.reached_color());
+ let todo_style = Style::from(CONFIGURATION.todo_color());
+ let future_style = Style::from(CONFIGURATION.future_color());
let strikethrough = Style::from(Effect::Strikethrough);