2026-02-12 15:06:57 +01:00
|
|
|
mod playlist;
|
2025-02-05 20:01:49 +01:00
|
|
|
mod xtream;
|
2025-05-23 00:27:35 +02:00
|
|
|
// mod affix;
|
2025-02-05 20:01:49 +01:00
|
|
|
mod xtream_vod;
|
|
|
|
|
mod xtream_series;
|
2026-02-12 15:06:57 +01:00
|
|
|
mod epg;
|
2025-05-04 10:59:08 +02:00
|
|
|
mod sort;
|
2026-02-12 15:06:57 +01:00
|
|
|
mod trakt;
|
2025-12-16 16:23:15 +01:00
|
|
|
mod library;
|
2026-02-12 15:06:57 +01:00
|
|
|
mod stream_probe;
|
|
|
|
|
pub use self::playlist::*;
|
|
|
|
|
pub use self::epg::*;
|
|
|
|
|
pub use self::xtream::*;
|
|
|
|
|
pub use self::xtream_vod::*;
|
|
|
|
|
pub use self::xtream_series::*;
|
|
|
|
|
pub use self::stream_probe::*;
|
2026-02-14 17:52:35 +01:00
|
|
|
use shared::create_bitset;
|
2026-02-12 15:06:57 +01:00
|
|
|
|
2026-02-14 17:52:35 +01:00
|
|
|
create_bitset!(u8, ResolveOptionsFlags, Resolve, TmdbMissing, Probe, Background);
|
2026-02-12 15:06:57 +01:00
|
|
|
|
|
|
|
|
pub struct ResolveOptions {
|
2026-02-14 17:52:35 +01:00
|
|
|
flags: ResolveOptionsFlagsSet,
|
2026-02-12 15:06:57 +01:00
|
|
|
pub resolve_delay: u16,
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-14 17:52:35 +01:00
|
|
|
impl ResolveOptions {
|
|
|
|
|
#[inline]
|
|
|
|
|
pub fn has_flag(&self, flag: ResolveOptionsFlags) -> bool {
|
|
|
|
|
self.flags.contains(flag)
|
|
|
|
|
}
|
|
|
|
|
#[inline]
|
|
|
|
|
pub fn unset_flag(&mut self, flag: ResolveOptionsFlags) {
|
|
|
|
|
self.flags.unset(flag);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-12 15:06:57 +01:00
|
|
|
impl Default for ResolveOptions {
|
|
|
|
|
fn default() -> Self {
|
|
|
|
|
Self {
|
|
|
|
|
flags: ResolveOptionsFlagsSet::from_variants(&[ResolveOptionsFlags::Background]),
|
2026-02-14 17:52:35 +01:00
|
|
|
resolve_delay: default_resolve_delay_secs(),
|
2026-02-12 15:06:57 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-05 20:01:49 +01:00
|
|
|
|
2025-12-17 09:03:07 +01:00
|
|
|
//
|
2026-02-12 15:06:57 +01:00
|
|
|
// fn get_resolve_<cluster>_options(target: &ConfigTarget, fpl: &FetchedPlaylist) -> bool
|
2025-12-17 09:03:07 +01:00
|
|
|
//
|
2025-02-05 20:01:49 +01:00
|
|
|
#[macro_export]
|
|
|
|
|
macro_rules! create_resolve_options_function_for_xtream_target {
|
|
|
|
|
($cluster:ident) => {
|
|
|
|
|
paste::paste! {
|
2026-02-12 15:06:57 +01:00
|
|
|
fn [<get_resolve_ $cluster _options>](target: &ConfigTarget, fpl: &FetchedPlaylist) -> $crate::processing::processor::ResolveOptions {
|
2025-03-10 13:28:22 +01:00
|
|
|
match target.get_xtream_output() {
|
2026-02-14 17:52:35 +01:00
|
|
|
Some(_) => {
|
|
|
|
|
let input_options = fpl.input.options.as_ref();
|
|
|
|
|
let input_is_xtream = fpl.input.input_type.is_xtream();
|
|
|
|
|
|
|
|
|
|
let (
|
|
|
|
|
resolve_tmdb_missing,
|
|
|
|
|
input_resolve_enabled,
|
|
|
|
|
input_probe_enabled,
|
|
|
|
|
input_resolve_delay,
|
|
|
|
|
resolve_background
|
|
|
|
|
) = if let Some(options) = input_options {
|
|
|
|
|
(
|
|
|
|
|
options.has_flag($crate::model::ConfigInputFlags::ResolveTmdb),
|
|
|
|
|
options.has_flag($crate::model::ConfigInputFlags::[<Resolve $cluster:camel>]),
|
|
|
|
|
options.has_flag($crate::model::ConfigInputFlags::[<Probe $cluster:camel>]),
|
|
|
|
|
options.resolve_delay,
|
|
|
|
|
options.has_flag($crate::model::ConfigInputFlags::ResolveBackground)
|
|
|
|
|
)
|
|
|
|
|
} else {
|
|
|
|
|
(
|
|
|
|
|
false,
|
|
|
|
|
false,
|
|
|
|
|
false,
|
|
|
|
|
shared::utils::default_resolve_delay_secs(),
|
|
|
|
|
shared::utils::default_resolve_background(),
|
|
|
|
|
)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let resolve_enabled = input_resolve_enabled;
|
|
|
|
|
let probe_enabled = input_probe_enabled;
|
|
|
|
|
let resolve_delay = input_resolve_delay;
|
|
|
|
|
|
2026-02-12 15:06:57 +01:00
|
|
|
let mut flags = $crate::processing::processor::ResolveOptionsFlagsSet::new();
|
2026-02-14 17:52:35 +01:00
|
|
|
if resolve_enabled && input_is_xtream {
|
|
|
|
|
flags.set($crate::processing::processor::ResolveOptionsFlags::Resolve);
|
2026-02-12 15:06:57 +01:00
|
|
|
}
|
|
|
|
|
if resolve_tmdb_missing {
|
2026-02-14 17:52:35 +01:00
|
|
|
flags.set($crate::processing::processor::ResolveOptionsFlags::TmdbMissing);
|
2026-02-12 15:06:57 +01:00
|
|
|
}
|
2026-02-14 17:52:35 +01:00
|
|
|
if input_is_xtream && probe_enabled {
|
|
|
|
|
flags.set($crate::processing::processor::ResolveOptionsFlags::Probe);
|
2026-02-12 15:06:57 +01:00
|
|
|
}
|
2026-02-14 17:52:35 +01:00
|
|
|
if resolve_background {
|
|
|
|
|
flags.set($crate::processing::processor::ResolveOptionsFlags::Background);
|
2026-02-12 15:06:57 +01:00
|
|
|
}
|
|
|
|
|
$crate::processing::processor::ResolveOptions {
|
|
|
|
|
flags,
|
2026-02-14 17:52:35 +01:00
|
|
|
resolve_delay,
|
2026-02-12 15:06:57 +01:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
None => $crate::processing::processor::ResolveOptions::default(),
|
2025-03-10 13:28:22 +01:00
|
|
|
}
|
2025-02-05 20:01:49 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
use create_resolve_options_function_for_xtream_target;
|
2026-02-14 17:52:35 +01:00
|
|
|
use shared::utils::default_resolve_delay_secs;
|