mirror of
https://github.com/crunchy-labs/crunchy-cli.git
synced 2026-01-21 04:02:00 -06:00
Bypass stream limits
This commit is contained in:
parent
301dac478f
commit
f7ce888329
3 changed files with 25 additions and 13 deletions
|
|
@ -520,7 +520,9 @@ async fn get_format(
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
format_pairs.push((single_format, video.clone(), audio, subtitles.clone()));
|
format_pairs.push((single_format, video.clone(), audio, subtitles.clone()));
|
||||||
single_format_to_format_pairs.push((single_format.clone(), video, subtitles))
|
single_format_to_format_pairs.push((single_format.clone(), video, subtitles));
|
||||||
|
|
||||||
|
stream.invalidate().await?
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut download_formats = vec![];
|
let mut download_formats = vec![];
|
||||||
|
|
|
||||||
|
|
@ -434,5 +434,7 @@ async fn get_format(
|
||||||
subs.push(download.subtitle.clone().unwrap())
|
subs.push(download.subtitle.clone().unwrap())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stream.invalidate().await?;
|
||||||
|
|
||||||
Ok((download_format, format))
|
Ok((download_format, format))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ use crate::utils::filter::real_dedup_vec;
|
||||||
use crate::utils::locale::LanguageTagging;
|
use crate::utils::locale::LanguageTagging;
|
||||||
use crate::utils::log::tab_info;
|
use crate::utils::log::tab_info;
|
||||||
use crate::utils::os::{is_special_file, sanitize};
|
use crate::utils::os::{is_special_file, sanitize};
|
||||||
use anyhow::{bail, Result};
|
use anyhow::Result;
|
||||||
use chrono::{Datelike, Duration};
|
use chrono::{Datelike, Duration};
|
||||||
use crunchyroll_rs::media::{Resolution, SkipEvents, Stream, StreamData, Subtitle};
|
use crunchyroll_rs::media::{Resolution, SkipEvents, Stream, StreamData, Subtitle};
|
||||||
use crunchyroll_rs::{Concert, Episode, Locale, MediaCollection, Movie, MusicVideo};
|
use crunchyroll_rs::{Concert, Episode, Locale, MediaCollection, Movie, MusicVideo};
|
||||||
|
|
@ -166,19 +166,27 @@ impl SingleFormat {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn stream(&self) -> Result<Stream> {
|
pub async fn stream(&self) -> Result<Stream> {
|
||||||
|
let mut i = 0;
|
||||||
|
loop {
|
||||||
let stream = match &self.source {
|
let stream = match &self.source {
|
||||||
MediaCollection::Episode(e) => e.stream_maybe_without_drm().await?,
|
MediaCollection::Episode(e) => e.stream_maybe_without_drm().await,
|
||||||
MediaCollection::Movie(m) => m.stream_maybe_without_drm().await?,
|
MediaCollection::Movie(m) => m.stream_maybe_without_drm().await,
|
||||||
MediaCollection::MusicVideo(mv) => mv.stream_maybe_without_drm().await?,
|
MediaCollection::MusicVideo(mv) => mv.stream_maybe_without_drm().await,
|
||||||
MediaCollection::Concert(c) => c.stream_maybe_without_drm().await?,
|
MediaCollection::Concert(c) => c.stream_maybe_without_drm().await,
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
|
|
||||||
if stream.session.uses_stream_limits {
|
// sometimes the request to get streams fails with an 403 and the message "JWT error",
|
||||||
bail!("Found a stream which probably uses DRM. DRM downloads aren't supported")
|
// even if the jwt (i guess the auth bearer token is meant by that) is perfectly valid.
|
||||||
|
// it's retried the request 3 times if this specific error occurs
|
||||||
|
if let Err(crunchyroll_rs::error::Error::Request { message, .. }) = &stream {
|
||||||
|
if message == "JWT error" && i < 3 {
|
||||||
|
i += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return Ok(stream?);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(stream)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn skip_events(&self) -> Result<Option<SkipEvents>> {
|
pub async fn skip_events(&self) -> Result<Option<SkipEvents>> {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue