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
105fn 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
127fn 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}