1
0
Fork 0
mirror of synced 2024-04-25 16:22:07 +12:00
czkawka/czkawka_core/src/common_extensions.rs

77 lines
2.9 KiB
Rust
Raw Normal View History

2021-11-28 08:49:20 +13:00
use std::time::SystemTime;
2020-09-27 03:52:13 +13:00
use crate::common::Common;
use crate::common_messages::Messages;
#[derive(Default)]
2020-09-27 03:52:13 +13:00
pub struct Extensions {
file_extensions: Vec<String>,
2020-09-27 03:52:13 +13:00
}
impl Extensions {
pub fn new() -> Self {
Default::default()
2020-09-27 03:52:13 +13:00
}
/// List of allowed extensions, only files with this extensions will be checking if are duplicates
2020-09-27 06:51:28 +13:00
/// After, extensions cannot contains any dot, commas etc.
2020-09-27 03:52:13 +13:00
pub fn set_allowed_extensions(&mut self, mut allowed_extensions: String, text_messages: &mut Messages) {
let start_time: SystemTime = SystemTime::now();
if allowed_extensions.trim().is_empty() {
2020-09-27 03:52:13 +13:00
return;
}
2021-01-14 04:03:05 +13:00
allowed_extensions = allowed_extensions.replace("IMAGE", "jpg,kra,gif,png,bmp,tiff,hdr,svg");
2020-09-27 03:52:13 +13:00
allowed_extensions = allowed_extensions.replace("VIDEO", "mp4,flv,mkv,webm,vob,ogv,gifv,avi,mov,wmv,mpg,m4v,m4p,mpeg,3gp");
allowed_extensions = allowed_extensions.replace("MUSIC", "mp3,flac,ogg,tta,wma,webm");
allowed_extensions = allowed_extensions.replace("TEXT", "txt,doc,docx,odt,rtf");
let extensions: Vec<String> = allowed_extensions.split(',').map(|e| e.trim()).map(String::from).collect();
2020-09-27 03:52:13 +13:00
for mut extension in extensions {
if extension.is_empty() || extension.replace('.', "").replace(' ', "").trim().is_empty() {
2020-09-27 03:52:13 +13:00
continue;
}
if !extension.starts_with('.') {
extension = format!(".{}", extension);
2020-09-27 03:52:13 +13:00
}
if extension[1..].contains('.') {
text_messages.warnings.push(format!("{} is not valid extension because contains dot inside", extension));
2020-09-27 03:52:13 +13:00
continue;
}
if extension[1..].contains(' ') {
text_messages
.warnings
.push(format!("{} is not valid extension because contains empty space inside", extension));
continue;
}
if !self.file_extensions.contains(&extension) {
self.file_extensions.push(extension);
2020-09-27 03:52:13 +13:00
}
}
if self.file_extensions.is_empty() {
text_messages
.messages
.push("No valid extensions were provided, so allowing all extensions by default.".to_string());
2020-09-27 03:52:13 +13:00
}
Common::print_time(start_time, SystemTime::now(), "set_allowed_extensions".to_string());
}
pub fn matches_filename(&self, file_name: &str) -> bool {
// assert_eq!(file_name, file_name.to_lowercase());
if !self.file_extensions.is_empty() && !self.file_extensions.iter().any(|e| file_name.ends_with(e)) {
return false;
}
true
}
pub fn extend_allowed_extensions(&mut self, file_extensions: &[&str]) {
for extension in file_extensions {
assert!(extension.starts_with('.'));
self.file_extensions.push(extension.to_string());
}
}
2020-09-27 03:52:13 +13:00
}