@@ -3,25 +3,31 @@ use regex::Regex;
3
3
use std:: fs;
4
4
use std:: process:: Command ;
5
5
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
+
6
18
pub fn get_media_info ( input : & str ) -> OutputMetadata {
7
19
if !fs:: metadata ( & input) . is_ok ( ) {
8
20
println ! ( "{} is not found." , & input) ;
9
21
std:: process:: exit ( 1 ) ;
10
22
}
11
23
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) ;
19
25
20
26
let media_info = Command :: new ( "mediainfo" )
21
27
. arg ( "--output=JSON" )
22
28
. arg ( format ! ( "{}" , input) )
23
29
. output ( )
24
- . expect ( "mediainfo error parsing file" ) ;
30
+ . expect ( "mediainfo error parsing file, make sure mediainfo is installed " ) ;
25
31
26
32
// if output.status == std::process::Output::Err(output.status) {
27
33
// panic!("Error reading file info");
@@ -71,3 +77,30 @@ pub fn get_media_info(input: &str) -> OutputMetadata {
71
77
72
78
return metadata;
73
79
}
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