aboutsummaryrefslogtreecommitdiff
path: root/src/commands/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/mod.rs')
-rw-r--r--src/commands/mod.rs88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/commands/mod.rs b/src/commands/mod.rs
new file mode 100644
index 0000000..b1c5f51
--- /dev/null
+++ b/src/commands/mod.rs
@@ -0,0 +1,88 @@
+use std::{
+ fs,
+ io::{self,Result,Write},
+ path::PathBuf,
+};
+
+mod sync;
+
+use crate::{Config,Entry};
+use crate::arguments::*;
+
+fn save_config(config: &Config, path: &PathBuf) -> Result<()> {
+ let toml = toml::to_string(config).unwrap();
+ fs::write(path.join("configs.toml"), toml)?;
+ Ok(())
+}
+
+pub fn modify_command(
+ config: &mut Config,
+ args: ModifyArgs,
+ configs_path: &PathBuf,
+) -> Result<()> {
+
+ if config.contains_key(&args.name) { loop {
+ let mut input = String::new();
+
+ print!("Entry already exists for {}. Overwrite it? (y/n) ", &args.name);
+ let _ = io::stdout().flush();
+ io::stdin()
+ .read_line(&mut input)
+ .expect("Failed to read user input.");
+
+ match input.to_lowercase().trim() {
+ "y" => break,
+ "n" => return Ok(()),
+ _ => {
+ println!("Try again :)");
+ continue;
+ },
+ };
+ }}
+
+ let entry = Entry { file: args.file, parent: args.dest };
+ config.insert(args.name, entry);
+ save_config(&config, configs_path)?;
+
+ Ok(())
+}
+
+pub fn remove_command(
+ config: &mut Config,
+ args: RemoveArgs,
+ configs_path: &PathBuf
+) -> Result<()> {
+
+ if !config.contains_key(&args.name) {
+ panic!("Such an entry does not exist.");
+ }
+ config.remove(&args.name);
+ save_config(&config, configs_path)?;
+
+ Ok(())
+}
+
+pub fn list_command(config: &Config) {
+ for (key,entry) in config {
+ println!(r#""{}" - src: {}, dest: {}"#, key, entry.file.to_str().unwrap(), entry.parent.to_str().unwrap());
+ }
+}
+
+pub fn sync_command(config: &Config, args: SyncArgs, configs_path: &PathBuf) {
+ if args.all {
+ sync::sync_all(config, configs_path, args.force);
+ return
+ }
+
+ for name in &args.names {
+ let entry = match config.get(name) {
+ Some(e) => e,
+ None => {
+ eprintln!(r#"Entry "{name}" not found."#);
+ continue;
+ },
+ };
+
+ sync::sync_config(name, entry, configs_path, &args.force);
+ }
+}