Skip to content
This repository was archived by the owner on Jul 4, 2024. It is now read-only.

Commit 127e6d9

Browse files
committed
Rework episode filtering
1 parent e7ac6d8 commit 127e6d9

File tree

11 files changed

+513
-835
lines changed

11 files changed

+513
-835
lines changed

Cargo.lock

+8-8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crunchy-cli-core/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ anyhow = "1.0"
1616
async-speed-limit = "0.4"
1717
clap = { version = "4.5", features = ["derive", "string"] }
1818
chrono = "0.4"
19-
crunchyroll-rs = { version = "0.11.3", features = ["experimental-stabilizations", "tower"] }
19+
crunchyroll-rs = { version = "0.11.4", features = ["experimental-stabilizations", "tower"] }
2020
ctrlc = "3.4"
2121
dialoguer = { version = "0.11", default-features = false }
2222
dirs = "5.0"

crunchy-cli-core/src/archive/command.rs

+43-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
use crate::archive::filter::ArchiveFilter;
21
use crate::utils::context::Context;
32
use crate::utils::download::{
43
DownloadBuilder, DownloadFormat, DownloadFormatMetadata, MergeBehavior,
54
};
65
use crate::utils::ffmpeg::FFmpegPreset;
7-
use crate::utils::filter::Filter;
6+
use crate::utils::filter::{Filter, FilterMediaScope};
87
use crate::utils::format::{Format, SingleFormat};
98
use crate::utils::locale::{all_locale_in_locales, resolve_locales, LanguageTagging};
109
use crate::utils::log::progress;
@@ -284,9 +283,49 @@ impl Execute for Archive {
284283

285284
for (i, (media_collection, url_filter)) in parsed_urls.into_iter().enumerate() {
286285
let progress_handler = progress!("Fetching series details");
287-
let single_format_collection = ArchiveFilter::new(
286+
let single_format_collection = Filter::new(
288287
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),
290329
!self.yes,
291330
self.skip_specials,
292331
ctx.crunchy.premium().await,

0 commit comments

Comments
 (0)