Fix file name sanitizing

This commit is contained in:
bytedream 2022-12-19 15:22:45 +01:00
parent 67bbc00d87
commit 8bb2c9c750
4 changed files with 23 additions and 19 deletions

View file

@ -237,6 +237,7 @@ impl Execute for Archive {
} }
.to_string(), .to_string(),
primary, primary,
true,
)), )),
); );

View file

@ -209,6 +209,7 @@ impl Execute for Download {
} }
.to_string(), .to_string(),
&format, &format,
true,
)), )),
); );

View file

@ -63,15 +63,24 @@ impl Format {
} }
} }
pub fn format_string(s: String, format: &Format) -> String { /// Formats the given string if it has specific pattern in it. It's possible to sanitize it which
s.replace("{title}", &format.title) /// removes characters which can cause failures if the output string is used as a file name.
.replace("{series_name}", &format.series_name) pub fn format_string(s: String, format: &Format, sanitize: bool) -> String {
.replace("{season_name}", &format.season_title) let sanitize_func = if sanitize {
.replace("{audio}", &format.audio.to_string()) |s: &str| sanitize_filename::sanitize(s)
.replace("{resolution}", &format.stream.resolution.to_string()) } else {
.replace("{season_number}", &format.season_number.to_string()) // converting this to a string is actually unnecessary
.replace("{episode_number}", &format.number.to_string()) |s: &str| s.to_string()
.replace("{series_id}", &format.series_id) };
.replace("{season_id}", &format.season_id)
.replace("{episode_id}", &format.id) s.replace("{title}", &sanitize_func(&format.title))
.replace("{series_name}", &sanitize_func(&format.series_name))
.replace("{season_name}", &sanitize_func(&format.season_title))
.replace("{audio}", &sanitize_func(&format.audio.to_string()))
.replace("{resolution}", &sanitize_func(&format.stream.resolution.to_string()))
.replace("{season_number}", &sanitize_func(&format.season_number.to_string()))
.replace("{episode_number}", &sanitize_func(&format.number.to_string()))
.replace("{series_id}", &sanitize_func(&format.series_id))
.replace("{season_id}", &sanitize_func(&format.season_id))
.replace("{episode_id}", &sanitize_func(&format.id))
} }

View file

@ -50,12 +50,5 @@ pub fn free_file(mut path: PathBuf) -> PathBuf {
path.set_file_name(format!("{} ({}).{}", filename, i, ext)) path.set_file_name(format!("{} ({}).{}", filename, i, ext))
} }
sanitize_file(path) path
}
/// Sanitizes the given path to not contain any invalid file character.
pub fn sanitize_file(path: PathBuf) -> PathBuf {
path.with_file_name(sanitize_filename::sanitize(
path.file_name().unwrap().to_string_lossy(),
))
} }