diff --git a/crunchy-cli-core/src/archive/command.rs b/crunchy-cli-core/src/archive/command.rs index 5dfa3cf..cf24c84 100644 --- a/crunchy-cli-core/src/archive/command.rs +++ b/crunchy-cli-core/src/archive/command.rs @@ -15,7 +15,7 @@ use anyhow::Result; use chrono::Duration; use crunchyroll_rs::media::{Resolution, Subtitle}; use crunchyroll_rs::Locale; -use log::debug; +use log::{debug, warn}; use std::collections::HashMap; use std::path::PathBuf; @@ -29,7 +29,10 @@ pub struct Archive { #[arg(long_help = format!("Audio languages. Can be used multiple times. \ Available languages are:\n{}", Locale::all().into_iter().map(|l| format!("{:<6} → {}", l.to_string(), l.to_human_readable())).collect::>().join("\n ")))] #[arg(short, long, default_values_t = vec![Locale::ja_JP, crate::utils::locale::system_locale()])] - pub(crate) locale: Vec, + pub(crate) audio: Vec, + #[arg(help = "Deprecated. Use '-a' / '--audio' instead")] + #[arg(short, long, default_values_t = vec![Locale::ja_JP, crate::utils::locale::system_locale()])] + locale: Vec, #[arg(help = format!("Subtitle languages. Can be used multiple times. \ Available languages are: {}", Locale::all().into_iter().map(|l| l.to_string()).collect::>().join(", ")))] #[arg(long_help = format!("Subtitle languages. Can be used multiple times. \ @@ -116,7 +119,16 @@ impl Execute for Archive { bail!("File extension is not '.mkv'. Currently only matroska / '.mkv' files are supported") } - self.locale = all_locale_in_locales(self.locale.clone()); + if !self.locale.is_empty() { + warn!("The '-l' / '--locale' flag is deprecated, use '-a' / '--audio' instead"); + for locale in &self.locale { + if !self.audio.contains(locale) { + self.audio.push(locale.clone()) + } + } + } + + self.audio = all_locale_in_locales(self.audio.clone()); self.subtitle = all_locale_in_locales(self.subtitle.clone()); Ok(()) @@ -154,7 +166,7 @@ impl Execute for Archive { .default_subtitle(self.default_subtitle.clone()) .ffmpeg_preset(self.ffmpeg_preset.clone().unwrap_or_default()) .output_format(Some("matroska".to_string())) - .audio_sort(Some(self.locale.clone())) + .audio_sort(Some(self.audio.clone())) .subtitle_sort(Some(self.subtitle.clone())); for single_formats in single_format_collection.into_iter() { @@ -177,10 +189,10 @@ impl Execute for Archive { } format.locales.sort_by(|(a, _), (b, _)| { - self.locale + self.audio .iter() .position(|l| l == a) - .cmp(&self.locale.iter().position(|l| l == b)) + .cmp(&self.audio.iter().position(|l| l == b)) }); for (_, subtitles) in format.locales.iter_mut() { subtitles.sort_by(|a, b| { diff --git a/crunchy-cli-core/src/archive/filter.rs b/crunchy-cli-core/src/archive/filter.rs index 0633320..d135800 100644 --- a/crunchy-cli-core/src/archive/filter.rs +++ b/crunchy-cli-core/src/archive/filter.rs @@ -42,7 +42,7 @@ impl Filter for ArchiveFilter { // `series.audio_locales` isn't always populated b/c of crunchyrolls api. so check if the // audio is matching only if the field is populated if !series.audio_locales.is_empty() { - let missing_audio = missing_locales(&series.audio_locales, &self.archive.locale); + let missing_audio = missing_locales(&series.audio_locales, &self.archive.audio); if !missing_audio.is_empty() { warn!( "Series {} is not available with {} audio", @@ -77,10 +77,10 @@ impl Filter for ArchiveFilter { return Ok(vec![]); } - let mut seasons = season.version(self.archive.locale.clone()).await?; + let mut seasons = season.version(self.archive.audio.clone()).await?; if self .archive - .locale + .audio .iter() .any(|l| season.audio_locales.contains(l)) { @@ -94,7 +94,7 @@ impl Filter for ArchiveFilter { .flatten() .collect(); real_dedup_vec(&mut audio_locales); - let missing_audio = missing_locales(&audio_locales, &self.archive.locale); + let missing_audio = missing_locales(&audio_locales, &self.archive.audio); if !missing_audio.is_empty() { warn!( "Season {} is not available with {} audio", @@ -154,12 +154,12 @@ impl Filter for ArchiveFilter { let mut episodes = vec![]; if !matches!(self.visited, Visited::Series) && !matches!(self.visited, Visited::Season) { - if self.archive.locale.contains(&episode.audio_locale) { + if self.archive.audio.contains(&episode.audio_locale) { episodes.push((episode.clone(), episode.subtitle_locales.clone())) } episodes.extend( episode - .version(self.archive.locale.clone()) + .version(self.archive.audio.clone()) .await? .into_iter() .map(|e| (e.clone(), e.subtitle_locales.clone())), @@ -168,7 +168,7 @@ impl Filter for ArchiveFilter { .iter() .map(|(e, _)| e.audio_locale.clone()) .collect(); - let missing_audio = missing_locales(&audio_locales, &self.archive.locale); + let missing_audio = missing_locales(&audio_locales, &self.archive.audio); if !missing_audio.is_empty() { warn!( "Episode {} is not available with {} audio",