Add --create-config flag to cli
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use anyhow::Result;
|
||||
use directories::ProjectDirs;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::fs::{self, File};
|
||||
use std::fs::File;
|
||||
use std::io::{Read, Write};
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::time::Duration;
|
||||
@@ -18,8 +18,6 @@ pub struct Config {
|
||||
|
||||
impl Config {
|
||||
pub fn new(work: u64, short_break: u64, long_break: u64) -> Self {
|
||||
Self::init_directories();
|
||||
|
||||
Config {
|
||||
work_time: Duration::from_secs(work),
|
||||
short_break: Duration::from_secs(short_break),
|
||||
@@ -28,26 +26,8 @@ impl Config {
|
||||
}
|
||||
}
|
||||
|
||||
fn init_directories() {
|
||||
let config_dir = Self::get_config_directory();
|
||||
let data_dir = Self::get_data_directory();
|
||||
|
||||
if !config_dir.exists() {
|
||||
let _ = fs::create_dir_all(config_dir);
|
||||
}
|
||||
|
||||
if !data_dir.exists() {
|
||||
let _ = fs::create_dir_all(data_dir);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn save(config: &Config) -> Result<()> {
|
||||
let config_directory = Self::get_config_directory();
|
||||
|
||||
if !config_directory.exists() {
|
||||
fs::create_dir_all(&config_directory)?;
|
||||
}
|
||||
|
||||
Self::write_to_file(&config_directory.join(SETTINGS_FILE), config)
|
||||
}
|
||||
|
||||
@@ -74,14 +54,14 @@ impl Config {
|
||||
pub fn get_data_directory() -> PathBuf {
|
||||
ProjectDirs::from("moe", "paoda", "domasi")
|
||||
.unwrap()
|
||||
.config_dir()
|
||||
.data_dir()
|
||||
.to_path_buf()
|
||||
}
|
||||
|
||||
fn get_config_directory() -> PathBuf {
|
||||
ProjectDirs::from("moe", "paoda", "domasi")
|
||||
.unwrap()
|
||||
.data_dir()
|
||||
.config_dir()
|
||||
.to_path_buf()
|
||||
}
|
||||
}
|
||||
|
||||
62
src/main.rs
62
src/main.rs
@@ -19,6 +19,12 @@ fn main() {
|
||||
.version("0.1.0")
|
||||
.author("paoda <musukarekai@gmail.com>")
|
||||
.about("Yet another pomodoro timer.")
|
||||
.arg(
|
||||
Arg::with_name("create-config")
|
||||
.short("C")
|
||||
.long("create-config")
|
||||
.help("Creates a Settings.toml and an alert directory"),
|
||||
)
|
||||
.subcommand(
|
||||
SubCommand::with_name("start")
|
||||
.about("Start the Pomodoro Timer")
|
||||
@@ -38,11 +44,48 @@ fn main() {
|
||||
// _ => {}
|
||||
// }
|
||||
|
||||
if matches.is_present("create-config") {
|
||||
create_config()
|
||||
}
|
||||
|
||||
if let ("start", Some(sub_matches)) = matches.subcommand() {
|
||||
start(sub_matches);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn create_config() {
|
||||
let config_dir = Config::get_data_directory();
|
||||
let data_dir = Config::get_data_directory().join("alert");
|
||||
|
||||
if !config_dir.exists() {
|
||||
fs::create_dir_all(&config_dir).unwrap_or_else(|err| {
|
||||
panic!("Failed to create {}: {}", config_dir.to_string_lossy(), err)
|
||||
})
|
||||
}
|
||||
|
||||
if !data_dir.exists() {
|
||||
fs::create_dir_all(&data_dir).unwrap_or_else(|err| {
|
||||
panic!("Failed to create {}: {}", data_dir.to_string_lossy(), err)
|
||||
});
|
||||
}
|
||||
|
||||
let config: Config = Default::default();
|
||||
|
||||
Config::save(&config).unwrap_or_else(|err| {
|
||||
let cfg_path = config_dir.to_string_lossy();
|
||||
panic!("Error while writing settings.toml to {}: {}", cfg_path, err);
|
||||
});
|
||||
|
||||
let data_path = data_dir.to_string_lossy();
|
||||
let settings_path = config_dir.join("settings.toml");
|
||||
let settings_path = settings_path.to_string_lossy();
|
||||
|
||||
println!(
|
||||
"Successfully created \"{}\" and \"{}\"",
|
||||
settings_path, data_path
|
||||
);
|
||||
}
|
||||
|
||||
pub fn start(args: &ArgMatches) {
|
||||
let mut pomodoro = Pomodoro::new();
|
||||
|
||||
@@ -87,7 +130,7 @@ pub fn start(args: &ArgMatches) {
|
||||
None => {
|
||||
// Look in the default locations
|
||||
// check for .mp3, .wav, .ogg, .flac
|
||||
let data_dir = Config::get_data_directory();
|
||||
let data_dir = Config::get_data_directory().join("alert");
|
||||
let data_dir_str = data_dir.to_string_lossy();
|
||||
|
||||
let items = fs::read_dir(&data_dir).unwrap_or_else(|_err| {
|
||||
@@ -119,24 +162,11 @@ fn get_audio_file(items: std::fs::ReadDir) -> Option<PathBuf> {
|
||||
match maybe_entry {
|
||||
Ok(entry) => match entry.path().extension() {
|
||||
Some(ext) => match ext.to_str() {
|
||||
Some("mp3") => {
|
||||
Some("mp3") | Some("wav") | Some("ogg") | Some("flac") => {
|
||||
result = Some(entry.path());
|
||||
break;
|
||||
}
|
||||
Some("wav") => {
|
||||
result = Some(entry.path());
|
||||
break;
|
||||
}
|
||||
Some("ogg") => {
|
||||
result = Some(entry.path());
|
||||
break;
|
||||
}
|
||||
Some("flac") => {
|
||||
result = Some(entry.path());
|
||||
break;
|
||||
}
|
||||
Some(_ext) => continue,
|
||||
None => continue,
|
||||
_ => continue,
|
||||
},
|
||||
None => continue,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user