diff --git a/backend/src/processing/processor/playlist.rs b/backend/src/processing/processor/playlist.rs index b168343f8..c2a0fcb50 100644 --- a/backend/src/processing/processor/playlist.rs +++ b/backend/src/processing/processor/playlist.rs @@ -206,9 +206,11 @@ fn map_channel(mut channel: PlaylistItem, mapping: &Mapping) -> (PlaylistItem, b fn map_channel_with_aliases(channel: PlaylistItem, mapping: &Mapping) -> Vec { if mapping.create_alias { let original = channel.clone(); + let base_uuid = *original.header.get_uuid(); let (mut mapped_channel, matched) = map_channel(channel, mapping); if matched { mapped_channel.header.uuid = create_alias_uuid(original.header.get_uuid(), &mapping.id); + mapped_channel.header.alias_of = Some(base_uuid); vec![original, mapped_channel] } else { vec![mapped_channel] diff --git a/backend/src/processing/processor/xtream.rs b/backend/src/processing/processor/xtream.rs index f7591d133..fb10203c1 100644 --- a/backend/src/processing/processor/xtream.rs +++ b/backend/src/processing/processor/xtream.rs @@ -82,6 +82,9 @@ pub(in crate::processing) fn create_resolve_info_wal_files(cfg: &Config, input: pub(in crate::processing) fn should_update_info(pli: &mut PlaylistItem, processed_provider_ids: &HashMap, field: &str) -> (bool, u32, u64) { let Some(provider_id) = pli.header.get_provider_id() else { return (false, 0, 0) }; let last_modified = pli.header.get_additional_property_as_u64(field); + if pli.header.alias_of.is_some() { + return (false, provider_id, last_modified.unwrap_or(0)); + } let old_timestamp = processed_provider_ids.get(&provider_id); (old_timestamp.is_none() || last_modified.is_none() diff --git a/shared/src/model/playlist.rs b/shared/src/model/playlist.rs index 937ebcf85..e818e9be5 100644 --- a/shared/src/model/playlist.rs +++ b/shared/src/model/playlist.rs @@ -150,6 +150,8 @@ pub trait PlaylistEntry: Send + Sync { pub struct PlaylistItemHeader { #[serde(skip)] pub uuid: UUIDType, // calculated + #[serde(default, skip_serializing_if = "Option::is_none")] + pub alias_of: Option, pub id: String, // provider id pub virtual_id: u32, // virtual id pub name: String,