(Re-)enable -l all for archive (#110)

This commit is contained in:
ByteDream 2023-01-15 22:09:23 +01:00
parent 17233f2fd2
commit 3dd8385aac
4 changed files with 27 additions and 10 deletions

View file

@ -1,7 +1,7 @@
use crate::cli::log::tab_info; use crate::cli::log::tab_info;
use crate::cli::utils::{ use crate::cli::utils::{
download_segments, find_multiple_seasons_with_same_number, find_resolution, all_locale_in_locales, download_segments, find_multiple_seasons_with_same_number,
interactive_season_choosing, FFmpegPreset, find_resolution, interactive_season_choosing, FFmpegPreset,
}; };
use crate::utils::context::Context; use crate::utils::context::Context;
use crate::utils::format::Format; use crate::utils::format::Format;
@ -132,7 +132,7 @@ pub struct Archive {
#[async_trait::async_trait(?Send)] #[async_trait::async_trait(?Send)]
impl Execute for Archive { impl Execute for Archive {
fn pre_check(&self) -> Result<()> { fn pre_check(&mut self) -> Result<()> {
if !has_ffmpeg() { if !has_ffmpeg() {
bail!("FFmpeg is needed to run this command") bail!("FFmpeg is needed to run this command")
} else if PathBuf::from(&self.output) } else if PathBuf::from(&self.output)
@ -151,6 +151,9 @@ impl Execute for Archive {
warn!("Skipping 'nvidia' hardware acceleration preset since no other codec preset was specified") warn!("Skipping 'nvidia' hardware acceleration preset since no other codec preset was specified")
} }
self.locale = all_locale_in_locales(self.locale.clone());
self.subtitle = all_locale_in_locales(self.subtitle.clone());
Ok(()) Ok(())
} }

View file

@ -1,7 +1,7 @@
use crate::cli::log::tab_info; use crate::cli::log::tab_info;
use crate::cli::utils::{ use crate::cli::utils::{
download_segments, find_multiple_seasons_with_same_number, find_resolution, download_segments, find_multiple_seasons_with_same_number,
interactive_season_choosing, FFmpegPreset, find_resolution, interactive_season_choosing, FFmpegPreset,
}; };
use crate::utils::context::Context; use crate::utils::context::Context;
use crate::utils::format::Format; use crate::utils::format::Format;
@ -84,7 +84,7 @@ pub struct Download {
#[async_trait::async_trait(?Send)] #[async_trait::async_trait(?Send)]
impl Execute for Download { impl Execute for Download {
fn pre_check(&self) -> Result<()> { fn pre_check(&mut self) -> Result<()> {
if has_ffmpeg() { if has_ffmpeg() {
debug!("FFmpeg detected") debug!("FFmpeg detected")
} else if PathBuf::from(&self.output) } else if PathBuf::from(&self.output)

View file

@ -1,7 +1,7 @@
use crate::utils::context::Context; use crate::utils::context::Context;
use anyhow::{bail, Result}; use anyhow::{bail, Result};
use crunchyroll_rs::media::{Resolution, VariantData, VariantSegment}; use crunchyroll_rs::media::{Resolution, VariantData, VariantSegment};
use crunchyroll_rs::{Media, Season}; use crunchyroll_rs::{Locale, Media, Season};
use indicatif::{ProgressBar, ProgressFinish, ProgressStyle}; use indicatif::{ProgressBar, ProgressFinish, ProgressStyle};
use lazy_static::lazy_static; use lazy_static::lazy_static;
use log::{debug, LevelFilter}; use log::{debug, LevelFilter};
@ -369,6 +369,20 @@ pub(crate) fn find_multiple_seasons_with_same_number(seasons: &Vec<Media<Season>
.collect() .collect()
} }
/// Check if [`Locale::Custom("all")`] is in the provided locale list and return [`Locale::all`] if
/// so. If not, just return the provided locale list.
pub(crate) fn all_locale_in_locales(locales: Vec<Locale>) -> Vec<Locale> {
if locales
.iter()
.find(|l| l.to_string().to_lowercase().trim() == "all")
.is_some()
{
Locale::all()
} else {
locales
}
}
pub(crate) fn interactive_season_choosing(seasons: Vec<Media<Season>>) -> Vec<Media<Season>> { pub(crate) fn interactive_season_choosing(seasons: Vec<Media<Season>>) -> Vec<Media<Season>> {
let input_regex = let input_regex =
Regex::new(r"((?P<single>\d+)|(?P<range_from>\d+)-(?P<range_to>\d+)?)(\s|$)").unwrap(); Regex::new(r"((?P<single>\d+)|(?P<range_from>\d+)-(?P<range_to>\d+)?)(\s|$)").unwrap();

View file

@ -16,10 +16,10 @@ pub use cli::{archive::Archive, download::Download, login::Login};
#[async_trait::async_trait(?Send)] #[async_trait::async_trait(?Send)]
trait Execute { trait Execute {
fn pre_check(&self) -> Result<()> { fn pre_check(&mut self) -> Result<()> {
Ok(()) Ok(())
} }
async fn execute(self, ctx: Context) -> Result<()>; async fn execute(mut self, ctx: Context) -> Result<()>;
} }
#[derive(Debug, Parser)] #[derive(Debug, Parser)]
@ -171,7 +171,7 @@ pub async fn cli_entrypoint() {
/// Cannot be done in the main function. I wanted to return `dyn` [`Execute`] from the match but had to /// Cannot be done in the main function. I wanted to return `dyn` [`Execute`] from the match but had to
/// box it which then conflicts with [`Execute::execute`] which consumes `self` /// box it which then conflicts with [`Execute::execute`] which consumes `self`
async fn execute_executor(executor: impl Execute, ctx: Context) { async fn execute_executor(mut executor: impl Execute, ctx: Context) {
if let Err(err) = executor.pre_check() { if let Err(err) = executor.pre_check() {
error!("Misconfigurations detected: {}", err); error!("Misconfigurations detected: {}", err);
std::process::exit(1) std::process::exit(1)