|
1 |
| -use crate::archive::filter::ArchiveFilter; |
2 | 1 | use crate::utils::context::Context;
|
3 | 2 | use crate::utils::download::{
|
4 | 3 | DownloadBuilder, DownloadFormat, DownloadFormatMetadata, MergeBehavior,
|
5 | 4 | };
|
6 | 5 | use crate::utils::ffmpeg::FFmpegPreset;
|
7 |
| -use crate::utils::filter::Filter; |
| 6 | +use crate::utils::filter::{Filter, FilterMediaScope}; |
8 | 7 | use crate::utils::format::{Format, SingleFormat};
|
9 | 8 | use crate::utils::locale::{all_locale_in_locales, resolve_locales, LanguageTagging};
|
10 | 9 | use crate::utils::log::progress;
|
@@ -284,9 +283,49 @@ impl Execute for Archive {
|
284 | 283 |
|
285 | 284 | for (i, (media_collection, url_filter)) in parsed_urls.into_iter().enumerate() {
|
286 | 285 | let progress_handler = progress!("Fetching series details");
|
287 |
| - let single_format_collection = ArchiveFilter::new( |
| 286 | + let single_format_collection = Filter::new( |
288 | 287 | url_filter,
|
289 |
| - self.clone(), |
| 288 | + self.audio.clone(), |
| 289 | + self.subtitle.clone(), |
| 290 | + |scope, locales| { |
| 291 | + let audios = locales.into_iter().map(|l| l.to_string()).collect::<Vec<String>>().join(", "); |
| 292 | + match scope { |
| 293 | + FilterMediaScope::Series(series) => warn!("Series {} is not available with {} audio", series.title, audios), |
| 294 | + FilterMediaScope::Season(season) => warn!("Season {} is not available with {} audio", season.season_number, audios), |
| 295 | + FilterMediaScope::Episode(episodes) => { |
| 296 | + if episodes.len() == 1 { |
| 297 | + warn!("Episode {} is not available with {} audio", episodes[0].sequence_number, audios) |
| 298 | + } else if episodes.len() == 2 { |
| 299 | + warn!("Season {} is only available with {} audio from episode {} to {}", episodes[0].season_number, audios, episodes[0].sequence_number, episodes[1].sequence_number) |
| 300 | + } else { |
| 301 | + unimplemented!() |
| 302 | + } |
| 303 | + } |
| 304 | + } |
| 305 | + Ok(true) |
| 306 | + }, |
| 307 | + |scope, locales| { |
| 308 | + let subtitles = locales.into_iter().map(|l| l.to_string()).collect::<Vec<String>>().join(", "); |
| 309 | + match scope { |
| 310 | + FilterMediaScope::Series(series) => warn!("Series {} is not available with {} subtitles", series.title, subtitles), |
| 311 | + FilterMediaScope::Season(season) => warn!("Season {} is not available with {} subtitles", season.season_number, subtitles), |
| 312 | + FilterMediaScope::Episode(episodes) => { |
| 313 | + if episodes.len() == 1 { |
| 314 | + warn!("Episode {} of season {} is not available with {} subtitles", episodes[0].sequence_number, episodes[0].season_title, subtitles) |
| 315 | + } else if episodes.len() == 2 { |
| 316 | + warn!("Season {} of season {} is only available with {} subtitles from episode {} to {}", episodes[0].season_number, episodes[0].season_title, subtitles, episodes[0].sequence_number, episodes[1].sequence_number) |
| 317 | + } else { |
| 318 | + unimplemented!() |
| 319 | + } |
| 320 | + } |
| 321 | + } |
| 322 | + Ok(true) |
| 323 | + }, |
| 324 | + |season| { |
| 325 | + warn!("Skipping premium episodes in season {season}"); |
| 326 | + Ok(()) |
| 327 | + }, |
| 328 | + Format::has_relative_fmt(&self.output), |
290 | 329 | !self.yes,
|
291 | 330 | self.skip_specials,
|
292 | 331 | ctx.crunchy.premium().await,
|
|
0 commit comments