Skip to content

Commit 6fe8e7f

Browse files
committed
fix: file name parsing into new function
1 parent ce45f17 commit 6fe8e7f

File tree

1 file changed

+41
-8
lines changed

1 file changed

+41
-8
lines changed

src/media_info.rs

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,31 @@ use regex::Regex;
33
use std::fs;
44
use std::process::Command;
55

6+
fn get_file_parts(file: &str) -> (&str, &str, &str) {
7+
let re = Regex::new(r"(\d{4}(?:-|\.)\d{2}(?:-|\.)\d{2})?(?:-|\.)*(.+).(mp4|mov)")
8+
.expect("File format: YYYY-MM-DD-File.mp4");
9+
let captures = re.captures(file).expect("expect YYYY-MM-DD-File-Name.mp4");
10+
11+
let date = captures.get(1).map_or("No Date", |x| x.as_str());
12+
let extracted_filename = captures.get(2).unwrap().as_str();
13+
let extension = captures.get(3).unwrap().as_str();
14+
15+
(date, extracted_filename, extension)
16+
}
17+
618
pub fn get_media_info(input: &str) -> OutputMetadata {
719
if !fs::metadata(&input).is_ok() {
820
println!("{} is not found.", &input);
921
std::process::exit(1);
1022
}
1123

12-
let re = Regex::new(r"(\d{4}(?:-|\.)\d{2}(?:-|\.)\d{2})?(?:-|\.)*(.+).(mp4|mov)").unwrap();
13-
14-
let captures = re.captures(input).expect("expect YYYY-MM-DD-File-Name.mp4");
15-
16-
let date = captures.get(1).map_or("No Date", |x| x.as_str());
17-
let extracted_filename = captures.get(2).unwrap().as_str();
18-
let extension = captures.get(3).unwrap().as_str();
24+
let (date, extracted_filename, extension) = get_file_parts(input);
1925

2026
let media_info = Command::new("mediainfo")
2127
.arg("--output=JSON")
2228
.arg(format!("{}", input))
2329
.output()
24-
.expect("mediainfo error parsing file");
30+
.expect("mediainfo error parsing file, make sure mediainfo is installed");
2531

2632
// if output.status == std::process::Output::Err(output.status) {
2733
// panic!("Error reading file info");
@@ -71,3 +77,30 @@ pub fn get_media_info(input: &str) -> OutputMetadata {
7177

7278
return metadata;
7379
}
80+
81+
#[test]
82+
fn file_name_with_date() {
83+
let input = "2022-02-02-filename.mp4";
84+
let (date, extracted_filename, extension) = get_file_parts(input);
85+
86+
assert_eq!(date, "2022-02-02");
87+
assert_eq!(extracted_filename, "filename");
88+
assert_eq!(extension, "mp4");
89+
}
90+
91+
#[test]
92+
fn file_name_without_date() {
93+
let input = "filename.mp4";
94+
let (date, extracted_filename, extension) = get_file_parts(input);
95+
96+
assert_eq!(date, "No Date");
97+
assert_eq!(extracted_filename, "filename");
98+
assert_eq!(extension, "mp4");
99+
}
100+
101+
#[test]
102+
#[should_panic]
103+
fn wrong_extension() {
104+
let input = "filename.ext";
105+
let (_date, _extracted_filename, _extension) = get_file_parts(input);
106+
}

0 commit comments

Comments
 (0)