mirror of
https://github.com/SinTan1729/movie-rename.git
synced 2024-12-25 11:48:37 -06:00
new: Autocomplete files generation
This commit is contained in:
parent
b4073357f7
commit
83bf1f7af6
7 changed files with 86 additions and 43 deletions
10
Cargo.lock
generated
10
Cargo.lock
generated
|
@ -173,6 +173,15 @@ dependencies = [
|
|||
"strsim",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_complete"
|
||||
version = "4.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "885e4d7d5af40bfb99ae6f9433e292feac98d452dcb3ec3d25dfe7552b77da8c"
|
||||
dependencies = [
|
||||
"clap",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_lex"
|
||||
version = "0.7.0"
|
||||
|
@ -550,6 +559,7 @@ name = "movie-rename"
|
|||
version = "2.2.2"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"clap_complete",
|
||||
"inquire",
|
||||
"load_file",
|
||||
"tmdb-api",
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
[package]
|
||||
name = "movie-rename"
|
||||
version = "2.2.2"
|
||||
build = "build.rs"
|
||||
edition = "2021"
|
||||
authors = ["Sayantan Santra <sayantan[dot]santra689[at]gmail[dot]com"]
|
||||
license = "GPL-3.0"
|
||||
|
@ -22,6 +23,10 @@ load_file = "1.0.1"
|
|||
tokio = { version = "1.32.0", features = ["macros", "rt-multi-thread"] }
|
||||
clap = { version = "4.5.1", features = ["cargo"] }
|
||||
|
||||
[build-dependencies]
|
||||
clap = { version = "4.5.1", features = ["cargo"] }
|
||||
clap_complete = "4.5.1"
|
||||
|
||||
[profile.release]
|
||||
strip = true
|
||||
opt-level = "z"
|
||||
|
|
2
Makefile
2
Makefile
|
@ -19,6 +19,6 @@ uninstall:
|
|||
rm -f "$(DESTDIR)$(PREFIX)/man/man1/$(PKGNAME).1"
|
||||
|
||||
aur: build
|
||||
tar --transform 's/.*\///g' -czf $(PKGNAME).tar.gz target/release/$(PKGNAME) $(PKGNAME).1
|
||||
tar --transform 's/.*\///g' -czf $(PKGNAME).tar.gz target/release/$(PKGNAME) target/autocomplete/* $(PKGNAME).1
|
||||
|
||||
.PHONY: build build-debug install clean uninstall aur
|
||||
|
|
21
build.rs
Normal file
21
build.rs
Normal file
|
@ -0,0 +1,21 @@
|
|||
use clap_complete::generate_to;
|
||||
use clap_complete::shells::{Bash, Fish, Zsh};
|
||||
use std::env;
|
||||
use std::ffi::OsString;
|
||||
use std::fs::{create_dir, remove_dir_all};
|
||||
use std::io::Error;
|
||||
|
||||
include!("src/args.rs");
|
||||
|
||||
fn main() -> Result<(), Error> {
|
||||
let target = "./target/autocomplete";
|
||||
remove_dir_all(target).ok();
|
||||
create_dir(target)?;
|
||||
let outdir = OsString::from(target);
|
||||
|
||||
let mut cmd = get_command();
|
||||
generate_to(Bash, &mut cmd, "movie-rename", &outdir)?;
|
||||
generate_to(Fish, &mut cmd, "movie-rename", &outdir)?;
|
||||
generate_to(Zsh, &mut cmd, "movie-rename", &outdir)?;
|
||||
Ok(())
|
||||
}
|
46
src/args.rs
Normal file
46
src/args.rs
Normal file
|
@ -0,0 +1,46 @@
|
|||
use clap::{arg, command, ArgAction, Command, ValueHint};
|
||||
use std::collections::HashMap;
|
||||
|
||||
// Bare command generation function to help with autocompletion
|
||||
pub fn get_command() -> Command {
|
||||
command!()
|
||||
.name("movie-rename")
|
||||
.author("Sayantan Santra <sayantan.santra@gmail.com>")
|
||||
.about("A simple tool to rename movies, written in Rust.")
|
||||
.arg(arg!(-d --directory "Run in directory mode").action(ArgAction::SetTrue))
|
||||
.arg(arg!(-n --"dry-run" "Do a dry run").action(ArgAction::SetTrue))
|
||||
.arg(arg!(-l --"i-feel-lucky" "Always choose the first option").action(ArgAction::SetTrue))
|
||||
.arg(
|
||||
arg!([entries] "The files/directories to be processed")
|
||||
.trailing_var_arg(true)
|
||||
.num_args(1..)
|
||||
.value_hint(ValueHint::AnyPath)
|
||||
.required(true),
|
||||
)
|
||||
// Use -v instead of -V for version
|
||||
.disable_version_flag(true)
|
||||
.arg(arg!(-v --version "Print version").action(ArgAction::Version))
|
||||
.arg_required_else_help(true)
|
||||
}
|
||||
|
||||
// Function to process the passed arguments
|
||||
pub fn process_args() -> (Vec<String>, HashMap<String, bool>) {
|
||||
let matches = get_command().get_matches();
|
||||
|
||||
// Generate the settings HashMap from read flags
|
||||
let mut settings = HashMap::new();
|
||||
for id in matches.ids().map(|x| x.as_str()) {
|
||||
if id != "entries" {
|
||||
settings.insert(id.to_string(), matches.get_flag(id));
|
||||
}
|
||||
}
|
||||
|
||||
// Every unmatched argument should be treated as a file entry
|
||||
let entries: Vec<String> = matches
|
||||
.get_many::<String>("entries")
|
||||
.expect("No entries provided!")
|
||||
.cloned()
|
||||
.collect();
|
||||
|
||||
(entries, settings)
|
||||
}
|
|
@ -1,4 +1,3 @@
|
|||
use clap::{arg, command, ArgAction};
|
||||
use inquire::{
|
||||
ui::{Color, IndexPrefix, RenderConfig, Styled},
|
||||
InquireError, Select,
|
||||
|
@ -206,45 +205,6 @@ pub async fn process_file(
|
|||
(filename_without_ext, Some(new_name_base), true)
|
||||
}
|
||||
|
||||
// Function to process the passed arguments
|
||||
pub fn process_args() -> (Vec<String>, HashMap<String, bool>) {
|
||||
let matches = command!()
|
||||
.name("movie-rename")
|
||||
.author("Sayantan Santra <sayantan.santra@gmail.com>")
|
||||
.about("A simple tool to rename movies, written in Rust.")
|
||||
.arg(arg!(-d --directory "Run in directory mode").action(ArgAction::SetTrue))
|
||||
.arg(arg!(-n --"dry-run" "Do a dry run").action(ArgAction::SetTrue))
|
||||
.arg(arg!(-l --"i-feel-lucky" "Always choose the first option").action(ArgAction::SetTrue))
|
||||
.arg(
|
||||
arg!([entries] "The files/directories to be processed")
|
||||
.trailing_var_arg(true)
|
||||
.num_args(1..)
|
||||
.required(true),
|
||||
)
|
||||
// Use -v instead of -V for version
|
||||
.disable_version_flag(true)
|
||||
.arg(arg!(-v --version "Print version").action(ArgAction::Version))
|
||||
.arg_required_else_help(true)
|
||||
.get_matches();
|
||||
|
||||
// Generate the settings HashMap from read flags
|
||||
let mut settings = HashMap::new();
|
||||
for id in matches.ids().map(|x| x.as_str()) {
|
||||
if id != "entries" {
|
||||
settings.insert(id.to_string(), matches.get_flag(id));
|
||||
}
|
||||
}
|
||||
|
||||
// Every unmatched argument should be treated as a file entry
|
||||
let entries: Vec<String> = matches
|
||||
.get_many::<String>("entries")
|
||||
.expect("No entries provided!")
|
||||
.cloned()
|
||||
.collect();
|
||||
|
||||
(entries, settings)
|
||||
}
|
||||
|
||||
// RenderConfig for the menu items
|
||||
fn get_render_config() -> RenderConfig {
|
||||
let mut render_config = RenderConfig::default();
|
||||
|
|
|
@ -4,13 +4,14 @@ use tmdb_api::Client;
|
|||
|
||||
// Import all the modules
|
||||
mod functions;
|
||||
use functions::{process_args, process_file};
|
||||
use functions::process_file;
|
||||
mod args;
|
||||
mod structs;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
// Process the passed arguments
|
||||
let (entries, settings) = process_args();
|
||||
let (entries, settings) = args::process_args();
|
||||
let flag_dry_run = settings["dry-run"];
|
||||
let flag_directory = settings["directory"];
|
||||
let flag_lucky = settings["i-feel-lucky"];
|
||||
|
|
Loading…
Reference in a new issue