diff options
Diffstat (limited to 'src/config.rs')
-rw-r--r-- | src/config.rs | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/src/config.rs b/src/config.rs index e1049d1..f0eb8f7 100644 --- a/src/config.rs +++ b/src/config.rs | |||
@@ -4,9 +4,12 @@ use std::{ | |||
4 | path::Path, | 4 | path::Path, |
5 | }; | 5 | }; |
6 | 6 | ||
7 | use indicatif::{ProgressBar, ProgressStyle}; | ||
7 | use serde::{Deserialize, Serialize}; | 8 | use serde::{Deserialize, Serialize}; |
8 | 9 | ||
9 | use crate::{db::db_setup, error::MLE, Modloader, VersionLevel, check_game_versions}; | 10 | use crate::{ |
11 | check_game_versions, db::db_setup, error::MLE, Modloader, VersionLevel, | ||
12 | }; | ||
10 | 13 | ||
11 | #[derive(Debug, Clone, Serialize, Deserialize)] | 14 | #[derive(Debug, Clone, Serialize, Deserialize)] |
12 | pub struct Cfg { | 15 | pub struct Cfg { |
@@ -31,7 +34,7 @@ pub struct Defaults { | |||
31 | impl Cfg { | 34 | impl Cfg { |
32 | pub async fn init(path: Option<String>) -> MLE<Self> { | 35 | pub async fn init(path: Option<String>) -> MLE<Self> { |
33 | let configfile = match path.clone() { | 36 | let configfile = match path.clone() { |
34 | Some(p) => String::from(p), | 37 | Some(p) => p, |
35 | None => dirs::config_dir() | 38 | None => dirs::config_dir() |
36 | .unwrap() | 39 | .unwrap() |
37 | .join("modlist") | 40 | .join("modlist") |
@@ -43,7 +46,8 @@ impl Cfg { | |||
43 | let mut file = match File::open(&configfile) { | 46 | let mut file = match File::open(&configfile) { |
44 | Ok(file) => file, | 47 | Ok(file) => file, |
45 | Err(err) => { | 48 | Err(err) => { |
46 | if err.kind() == std::io::ErrorKind::NotFound && path.is_none() { | 49 | if err.kind() == std::io::ErrorKind::NotFound && path.is_none() |
50 | { | ||
47 | create_config(&configfile)?; | 51 | create_config(&configfile)?; |
48 | File::open(&configfile)? | 52 | File::open(&configfile)? |
49 | } else { | 53 | } else { |
@@ -71,16 +75,18 @@ impl Cfg { | |||
71 | Err(..) => { | 75 | Err(..) => { |
72 | create_versions_dummy(&versionfile).await?; | 76 | create_versions_dummy(&versionfile).await?; |
73 | check_game_versions(&versionfile, true).await?; | 77 | check_game_versions(&versionfile, true).await?; |
74 | }, | 78 | } |
75 | } | 79 | } |
80 | |||
76 | Ok(config) | 81 | Ok(config) |
77 | } | 82 | } |
78 | } | 83 | } |
79 | 84 | ||
80 | fn create_config(path: &str) -> MLE<()> { | 85 | fn create_config(path: &str) -> MLE<()> { |
81 | print!("No config file found, create default"); | 86 | let p = ProgressBar::new(1); |
82 | //Force flush of stdout, else print! doesn't print instantly | 87 | p.set_style(ProgressStyle::with_template("{wide_msg}").unwrap()); |
83 | std::io::stdout().flush()?; | 88 | p.set_message("Create default config"); |
89 | |||
84 | let cache_dir = dirs::cache_dir() | 90 | let cache_dir = dirs::cache_dir() |
85 | .unwrap() | 91 | .unwrap() |
86 | .join("modlist") | 92 | .join("modlist") |
@@ -89,10 +95,10 @@ fn create_config(path: &str) -> MLE<()> { | |||
89 | let default_cfg = Cfg { | 95 | let default_cfg = Cfg { |
90 | data: cache_dir.clone(), | 96 | data: cache_dir.clone(), |
91 | cache: format!("{}/cache", cache_dir), | 97 | cache: format!("{}/cache", cache_dir), |
92 | versions: cache_dir.clone(), | 98 | versions: cache_dir, |
93 | defaults: Defaults { | 99 | defaults: Defaults { |
94 | modloader: Modloader::Fabric, | 100 | modloader: Modloader::Fabric, |
95 | version: VersionLevel::Release | 101 | version: VersionLevel::Release, |
96 | }, | 102 | }, |
97 | apis: Apis { | 103 | apis: Apis { |
98 | modrinth: String::from("https://api.modrinth.com/v2/"), | 104 | modrinth: String::from("https://api.modrinth.com/v2/"), |
@@ -101,37 +107,36 @@ fn create_config(path: &str) -> MLE<()> { | |||
101 | create_dir_all(path.split("config.toml").collect::<Vec<&str>>()[0])?; | 107 | create_dir_all(path.split("config.toml").collect::<Vec<&str>>()[0])?; |
102 | let mut file = File::create(path)?; | 108 | let mut file = File::create(path)?; |
103 | file.write_all(toml::to_string(&default_cfg)?.as_bytes())?; | 109 | file.write_all(toml::to_string(&default_cfg)?.as_bytes())?; |
104 | println!(" ✓"); | 110 | p.finish_with_message(format!("Created default config ({})", path)); |
105 | Ok(()) | 111 | Ok(()) |
106 | } | 112 | } |
107 | 113 | ||
108 | fn create_database(path: &str) -> MLE<()> { | 114 | fn create_database(path: &str) -> MLE<()> { |
109 | print!("No database found, create base"); | 115 | let p = ProgressBar::new(1); |
110 | //Force flush of stdout, else print! doesn't print instantly | 116 | p.set_style(ProgressStyle::with_template("{wide_msg}").unwrap()); |
111 | std::io::stdout().flush()?; | 117 | p.set_message("Create database"); |
112 | 118 | ||
113 | File::create(path)?; | 119 | File::create(path)?; |
114 | db_setup(path)?; | 120 | db_setup(path)?; |
115 | println!(" ✓"); | 121 | p.finish_with_message(format!("Created database ({})", path)); |
116 | Ok(()) | 122 | Ok(()) |
117 | } | 123 | } |
118 | 124 | ||
119 | fn create_cache(path: &str) -> MLE<()> { | 125 | fn create_cache(path: &str) -> MLE<()> { |
120 | print!("No cache direcory found, create one"); | 126 | let p = ProgressBar::new(1); |
121 | //Force flush of stdout, else print! doesn't print instantly | 127 | p.set_style(ProgressStyle::with_template("{wide_msg}").unwrap()); |
122 | std::io::stdout().flush()?; | 128 | p.set_message("Create cache"); |
123 | 129 | ||
124 | create_dir_all(path)?; | 130 | create_dir_all(path)?; |
125 | println!(" ✓"); | 131 | p.finish_with_message(format!("Created cache ({})", path)); |
126 | Ok(()) | 132 | Ok(()) |
127 | } | 133 | } |
128 | 134 | ||
129 | async fn create_versions_dummy(path: &str) -> MLE<()> { | 135 | async fn create_versions_dummy(path: &str) -> MLE<()> { |
130 | print!("No version file found, create dummy"); | 136 | let p = ProgressBar::new(1); |
131 | //Force flush of stdout, else print! doesn't print instantly | 137 | p.set_style(ProgressStyle::with_template("{wide_msg}").unwrap()); |
132 | std::io::stdout().flush()?; | 138 | p.set_message("Create version file"); |
133 | |||
134 | File::create(path)?; | 139 | File::create(path)?; |
135 | println!(" ✓"); | 140 | p.finish_with_message(format!("Created version file ({})", path)); |
136 | Ok(()) | 141 | Ok(()) |
137 | } | 142 | } |