From ba57d3c25d261249d921b5f146fd7c706e38fc1e Mon Sep 17 00:00:00 2001 From: bocchi <121779542+hitorilabs@users.noreply.github.com> Date: Mon, 6 Feb 2023 03:11:52 -0500 Subject: [PATCH 1/4] bugfix: btreemap skips duplicate ep nums --- crunchy-cli-core/src/cli/archive.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crunchy-cli-core/src/cli/archive.rs b/crunchy-cli-core/src/cli/archive.rs index ff13128..b189406 100644 --- a/crunchy-cli-core/src/cli/archive.rs +++ b/crunchy-cli-core/src/cli/archive.rs @@ -383,7 +383,7 @@ async fn formats_from_series( } #[allow(clippy::type_complexity)] - let mut result: BTreeMap, Vec)>> = BTreeMap::new(); + let mut result: BTreeMap, Vec)>> = BTreeMap::new(); let mut primary_season = true; for season in seasons { let episodes = season.episodes().await?; @@ -414,7 +414,7 @@ async fn formats_from_series( let (ref mut formats, subtitles) = result .entry(season.metadata.season_number) .or_insert_with(BTreeMap::new) - .entry(episode.metadata.episode_number) + .entry(episode.metadata.episode.clone()) .or_insert_with(|| (vec![], vec![])); subtitles.extend(archive.subtitle.iter().filter_map(|l| { let stream_subtitle = streams.subtitles.get(l).cloned()?; From 264d943a2c0eeb8f8b7e7116989dc018ef539b55 Mon Sep 17 00:00:00 2001 From: bocchi <121779542+hitorilabs@users.noreply.github.com> Date: Mon, 6 Feb 2023 03:22:04 -0500 Subject: [PATCH 2/4] use episode id instead --- crunchy-cli-core/src/cli/archive.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crunchy-cli-core/src/cli/archive.rs b/crunchy-cli-core/src/cli/archive.rs index b189406..82e70f7 100644 --- a/crunchy-cli-core/src/cli/archive.rs +++ b/crunchy-cli-core/src/cli/archive.rs @@ -414,7 +414,7 @@ async fn formats_from_series( let (ref mut formats, subtitles) = result .entry(season.metadata.season_number) .or_insert_with(BTreeMap::new) - .entry(episode.metadata.episode.clone()) + .entry(episode.id.clone()) .or_insert_with(|| (vec![], vec![])); subtitles.extend(archive.subtitle.iter().filter_map(|l| { let stream_subtitle = streams.subtitles.get(l).cloned()?; From cba921f1a8352704874fe30fb3cc067885150037 Mon Sep 17 00:00:00 2001 From: bocchi <121779542+hitorilabs@users.noreply.github.com> Date: Mon, 6 Feb 2023 04:04:26 -0500 Subject: [PATCH 3/4] use sequence_number instead of episode_number --- crunchy-cli-core/src/cli/archive.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crunchy-cli-core/src/cli/archive.rs b/crunchy-cli-core/src/cli/archive.rs index 82e70f7..9b6ac4b 100644 --- a/crunchy-cli-core/src/cli/archive.rs +++ b/crunchy-cli-core/src/cli/archive.rs @@ -383,7 +383,7 @@ async fn formats_from_series( } #[allow(clippy::type_complexity)] - let mut result: BTreeMap, Vec)>> = BTreeMap::new(); + let mut result: BTreeMap, Vec)>> = BTreeMap::new(); let mut primary_season = true; for season in seasons { let episodes = season.episodes().await?; @@ -414,7 +414,7 @@ async fn formats_from_series( let (ref mut formats, subtitles) = result .entry(season.metadata.season_number) .or_insert_with(BTreeMap::new) - .entry(episode.id.clone()) + .entry((episode.metadata.sequence_number * 100.0) as u32) .or_insert_with(|| (vec![], vec![])); subtitles.extend(archive.subtitle.iter().filter_map(|l| { let stream_subtitle = streams.subtitles.get(l).cloned()?; From 03dd1c5264c0e304ec7ab6843b8faf9944032f61 Mon Sep 17 00:00:00 2001 From: bocchi <121779542+hitorilabs@users.noreply.github.com> Date: Tue, 7 Feb 2023 11:04:41 -0500 Subject: [PATCH 4/4] get rid of btreemap in archive --- crunchy-cli-core/src/cli/archive.rs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/crunchy-cli-core/src/cli/archive.rs b/crunchy-cli-core/src/cli/archive.rs index 9b6ac4b..e500f21 100644 --- a/crunchy-cli-core/src/cli/archive.rs +++ b/crunchy-cli-core/src/cli/archive.rs @@ -16,7 +16,6 @@ use anyhow::{bail, Result}; use crunchyroll_rs::media::Resolution; use crunchyroll_rs::{Locale, Media, MediaCollection, Series}; use log::{debug, error, info}; -use std::collections::BTreeMap; use std::path::PathBuf; use std::process::{Command, Stdio}; use tempfile::TempPath; @@ -383,7 +382,7 @@ async fn formats_from_series( } #[allow(clippy::type_complexity)] - let mut result: BTreeMap, Vec)>> = BTreeMap::new(); + let mut result: Vec<(Vec, Vec)> = Vec::new(); let mut primary_season = true; for season in seasons { let episodes = season.episodes().await?; @@ -411,11 +410,8 @@ async fn formats_from_series( ) }; - let (ref mut formats, subtitles) = result - .entry(season.metadata.season_number) - .or_insert_with(BTreeMap::new) - .entry((episode.metadata.sequence_number * 100.0) as u32) - .or_insert_with(|| (vec![], vec![])); + let mut formats: Vec = Vec::new(); + let mut subtitles: Vec = Vec::new(); subtitles.extend(archive.subtitle.iter().filter_map(|l| { let stream_subtitle = streams.subtitles.get(l).cloned()?; let subtitle = Subtitle { @@ -428,12 +424,14 @@ async fn formats_from_series( Some(subtitle) })); formats.push(Format::new_from_episode(episode, &episodes, stream, vec![])); + + result.push((formats, subtitles)); } primary_season = false; } - Ok(result.into_values().flat_map(|v| v.into_values()).collect()) + Ok(result) } async fn download_video(ctx: &Context, format: &Format, only_audio: bool) -> Result {