Show fractal in relative_sequence_number if present

This commit is contained in:
bytedream 2023-10-15 23:34:22 +02:00
parent 685c79d673
commit d0fe7f54f6
3 changed files with 20 additions and 6 deletions

View file

@ -2,7 +2,7 @@ use crate::archive::command::Archive;
use crate::utils::filter::{real_dedup_vec, Filter}; use crate::utils::filter::{real_dedup_vec, Filter};
use crate::utils::format::{Format, SingleFormat, SingleFormatCollection}; use crate::utils::format::{Format, SingleFormat, SingleFormatCollection};
use crate::utils::interactive_select::{check_for_duplicated_seasons, get_duplicated_seasons}; use crate::utils::interactive_select::{check_for_duplicated_seasons, get_duplicated_seasons};
use crate::utils::parse::UrlFilter; use crate::utils::parse::{fract, UrlFilter};
use anyhow::Result; use anyhow::Result;
use crunchyroll_rs::{Concert, Episode, Locale, Movie, MovieListing, MusicVideo, Season, Series}; use crunchyroll_rs::{Concert, Episode, Locale, Movie, MovieListing, MusicVideo, Season, Series};
use log::{info, warn}; use log::{info, warn};
@ -321,8 +321,10 @@ impl Filter for ArchiveFilter {
} }
if ep.id == episode.id { if ep.id == episode.id {
relative_episode_number = Some(i + 1); relative_episode_number = Some(i + 1);
relative_sequence_number = relative_sequence_number = Some(
Some((i + 1 - non_integer_sequence_number_count) as f32); (i + 1 - non_integer_sequence_number_count) as f32
+ fract(ep.sequence_number),
);
break; break;
} }
} }

View file

@ -2,7 +2,7 @@ use crate::download::Download;
use crate::utils::filter::Filter; use crate::utils::filter::Filter;
use crate::utils::format::{Format, SingleFormat, SingleFormatCollection}; use crate::utils::format::{Format, SingleFormat, SingleFormatCollection};
use crate::utils::interactive_select::{check_for_duplicated_seasons, get_duplicated_seasons}; use crate::utils::interactive_select::{check_for_duplicated_seasons, get_duplicated_seasons};
use crate::utils::parse::UrlFilter; use crate::utils::parse::{fract, UrlFilter};
use anyhow::{bail, Result}; use anyhow::{bail, Result};
use crunchyroll_rs::{Concert, Episode, Movie, MovieListing, MusicVideo, Season, Series}; use crunchyroll_rs::{Concert, Episode, Movie, MovieListing, MusicVideo, Season, Series};
use log::{error, info, warn}; use log::{error, info, warn};
@ -211,8 +211,10 @@ impl Filter for DownloadFilter {
} }
if ep.id == episode.id { if ep.id == episode.id {
relative_episode_number = Some(i + 1); relative_episode_number = Some(i + 1);
relative_sequence_number = relative_sequence_number = Some(
Some((i + 1 - non_integer_sequence_number_count) as f32); (i + 1 - non_integer_sequence_number_count) as f32
+ fract(ep.sequence_number),
);
break; break;
} }
} }

View file

@ -192,3 +192,13 @@ pub fn parse_resolution(mut resolution: String) -> Result<Resolution> {
bail!("Could not find resolution") bail!("Could not find resolution")
} }
} }
/// Dirty implementation of [`f32::fract`] with more accuracy.
pub fn fract(input: f32) -> f32 {
if input.fract() == 0.0 {
return 0.0;
}
format!("0.{}", input.to_string().split('.').last().unwrap())
.parse::<f32>()
.unwrap()
}