ayan_player_cli/
utils.rs

1use std::path::Path;
2use colored::Colorize;
3
4pub fn print_help() {
5    println!(
6        "{}: {}",
7        "player-cli".bold().green(),
8        "A simple tool to play videos from the current directory.".yellow()
9    );
10    println!();
11    println!("{}:", "USAGE".bold().blue());
12    println!("    {}", "player-cli [OPTIONS]".cyan());
13    println!();
14    println!("{}:", "OPTIONS".bold().blue());
15    println!(
16        "    {} <{}>         {}",
17        "-v".bold().magenta(),
18        "VOLUME".dimmed(),
19        "Set the volume level (default: 100)".green()
20    );
21    println!(
22        "    {} <{}>          {}",
23        "-s".bold().magenta(),
24        "SPEED".dimmed(),
25        "Set the playback speed (default: 1.0)".green()
26    );
27println!(
28        "    {} <{}>      {}",
29        "-f".bold().magenta(),
30        "EXTENSION".dimmed(),
31        "Only show files with extension (default: All popular video file extensions included)".green()
32    );
33println!(
34        "    {}       {}",
35        "--set-default".bold().magenta(),
36        "Set all other options as default".green()
37    );
38    println!(
39        "    {}, {}          {}",
40        "--h".bold().magenta(),
41        "-help".bold().magenta(),
42        "Print this help message and exit".green()
43    );
44    println!();
45    println!("{}:", "EXAMPLES".bold().blue());
46    println!("    {}", "# Play videos with default settings".dimmed());
47    println!("    {}", "player-cli".cyan());
48    println!();
49    println!("    {}", "# Play videos with volume set to 50".dimmed());
50    println!("    {} {}", "player-cli".cyan(), "-v 50".yellow());
51    println!();
52    println!("    {}", "# Play videos at 1.5x speed".dimmed());
53    println!("    {} {}", "player-cli".cyan(), "-s 1.5".yellow());
54    println!();
55    println!(
56        "    {}",
57        "# Play videos with volume at 70 and speed at 2x".dimmed()
58    );
59    println!(
60        "    {} {} {}",
61        "player-cli".cyan(),
62        "-v 70".yellow(),
63        "-s 2".yellow()
64    );
65println!();
66    println!(
67        "    {}",
68        "# Play videos with volume at 70 and speed at 2x and set them default".dimmed()
69    );
70    println!(
71        "    {} {} {} {}",
72        "player-cli".cyan(),
73        "-v 70".yellow(),
74        "-s 2".yellow(),
75        "--set-default"
76    );
77println!();
78    println!(
79        "    {}",
80        "# Play videos with volume at 70 and speed at 2x, set them default and show only mp4 files (filters will not be set as default)".dimmed()
81    );
82    println!(
83        "    {} {} {} {} {}",
84        "player-cli".cyan(),
85        "-v 70".yellow(),
86        "-s 2".yellow(),
87        "-f mp4",
88        "--set-default"
89    );
90
91}
92
93pub fn print_files(files: &Vec<String>) {
94    for (index, file) in files.iter().enumerate() {
95        let subfolder_count = count_slashes(file) - 1;
96        let name= Path::new(file).file_name().unwrap().to_str().unwrap();
97        println!("{} | {}{}",format_index(index).white(), "/__".repeat(subfolder_count) , name.bold().color(color_for_level(subfolder_count)));
98    }
99}
100
101pub fn count_slashes(s: &str) -> usize {
102        s.chars().filter(|&c| c == '/').count()
103}
104
105// text to Colorize color
106fn color_for_level(level: usize) -> &'static str {
107    match level {
108        0 => "white",
109        1 => "green",
110        2 => "yellow",
111        3 => "blue",
112        4 => "magenta",
113        5 => "cyan",
114        6 => "red",
115        _ => match (level - 7) % 7 {
116            0 => "bright_white",
117            1 => "bright_green",
118            2 => "bright_yellow",
119            3 => "bright_blue",
120            4 => "bright_magenta",
121            5 => "bright_cyan",
122            _ => "bright_red",
123        },
124    }
125}
126
127// Function to format the index based on the requirement
128fn format_index(index: usize) -> String {
129    if index < 10 {
130        format!(" {} ", index)
131    } else if index < 100 {
132        format!(" {}", index)
133    } else {
134        format!("{}", index)
135    }
136}