mirror of
https://github.com/euzu/tuliprox.git
synced 2026-10-31 03:02:24 +01:00
epg fix (#537)
New Features Aliases can now be individually enabled or disabled to manage active sources. Bug Fixes Improved channel identification accuracy in XMLTV outputs. Style Disabled aliases display with strikethrough text for better visibility.
This commit is contained in:
@@ -197,7 +197,7 @@ async fn serve_epg_with_rewrites(
|
||||
let (user_start, user_stop) = apply_user_offset(programme.start, programme.stop, epg_processing_options.offset_minutes);
|
||||
elem.push_attribute(("start", format_xmltv_time_utc(user_start).as_str()));
|
||||
elem.push_attribute(("stop", format_xmltv_time_utc(user_stop).as_str()));
|
||||
elem.push_attribute(("channel", &programme.channel[..]));
|
||||
elem.push_attribute(("channel", channel.id.as_ref()));
|
||||
continue_on_err!(writer.write_event_async(Event::Start(elem)).await);
|
||||
|
||||
if let Some(title) = &programme.title {
|
||||
@@ -267,18 +267,18 @@ fn apply_user_offset(start: i64, stop: i64, offset_minutes: i32) -> (i64, i64) {
|
||||
(user_start, user_end)
|
||||
}
|
||||
|
||||
fn from_programme(stream_id: &Arc<str>, programme: &EpgProgramme, epg_processing_options: &EpgProcessingOptions) -> ShortEpgDto {
|
||||
fn from_programme(stream_id: &Arc<str>, epg_id: &Arc<str>, programme: &EpgProgramme, epg_processing_options: &EpgProcessingOptions) -> ShortEpgDto {
|
||||
let (user_start, user_end) = apply_user_offset(programme.start, programme.stop, epg_processing_options.offset_minutes);
|
||||
|
||||
ShortEpgDto {
|
||||
id: Arc::clone(stream_id),
|
||||
epg_id: Arc::clone(&programme.channel),
|
||||
epg_id: Arc::clone(epg_id),
|
||||
title: programme.title.as_ref().map_or_else(String::new, ToString::to_string),
|
||||
lang: String::new(),
|
||||
start: format_xmltv_time(user_start),
|
||||
end: format_xmltv_time(user_end),
|
||||
description: programme.desc.as_ref().map_or_else(String::new, ToString::to_string),
|
||||
channel_id: Arc::clone(&programme.channel),
|
||||
channel_id: Arc::clone(epg_id),
|
||||
start_timestamp: user_start.to_string(),
|
||||
stop_timestamp: user_end.to_string(),
|
||||
stream_id: Arc::clone(stream_id),
|
||||
@@ -300,9 +300,9 @@ pub async fn serve_short_epg(
|
||||
let epg_processing_options = get_epg_processing_options(app_state, user, target);
|
||||
ShortEpgResultDto {
|
||||
epg_listings: if limit > 0 {
|
||||
epg_channel.get_programme_with_limit(limit).iter().map(|p| from_programme(&stream_id, p, &epg_processing_options)).collect()
|
||||
epg_channel.get_programme_with_limit(limit).iter().map(|p| from_programme(&stream_id, channel_id, p, &epg_processing_options)).collect()
|
||||
} else {
|
||||
epg_channel.programmes.iter().map(|p| from_programme(&stream_id, p, &epg_processing_options)).collect()
|
||||
epg_channel.programmes.iter().map(|p| from_programme(&stream_id, channel_id, p, &epg_processing_options)).collect()
|
||||
},
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -67,7 +67,7 @@ impl ActiveProviderManager {
|
||||
}
|
||||
|
||||
fn get_config_inputs(cfg: &AppConfig) -> Vec<Arc<ConfigInput>> {
|
||||
cfg.sources.load().inputs.iter().map(Arc::clone).collect()
|
||||
cfg.sources.load().inputs.iter().filter(|i| i.enabled).map(Arc::clone).collect()
|
||||
}
|
||||
|
||||
fn get_grace_options(cfg: &AppConfig) -> (u64, u64) {
|
||||
|
||||
@@ -247,7 +247,7 @@ impl MultiProviderLineup {
|
||||
) -> Self {
|
||||
let input_connection = get_or_create_provider_connection(provider_connections, &cfg_input.name);
|
||||
let mut inputs = vec![ProviderConfigWrapper::new(ProviderConfig::new(cfg_input, input_connection, Arc::clone(connection_change)))];
|
||||
if let Some(aliases) = &cfg_input.aliases {
|
||||
if let Some(aliases) = cfg_input.get_enabled_aliases() {
|
||||
for alias in aliases {
|
||||
let alias_connection = get_or_create_provider_connection(provider_connections, &alias.name);
|
||||
inputs.push(ProviderConfigWrapper::new(ProviderConfig::new_alias(
|
||||
@@ -540,7 +540,7 @@ impl ProviderLineupManager {
|
||||
event_manager.send_provider_event(name, connections);
|
||||
});
|
||||
|
||||
if cfg_input.aliases.as_ref().is_some_and(|a| !a.is_empty()) {
|
||||
if cfg_input.has_enabled_aliases() {
|
||||
ProviderLineup::Multi(MultiProviderLineup::new(cfg_input, provider_connections, &on_connection_change))
|
||||
} else {
|
||||
let connection = get_or_create_provider_connection(provider_connections, &cfg_input.name);
|
||||
@@ -575,6 +575,7 @@ impl ProviderLineupManager {
|
||||
};
|
||||
|
||||
if a_alias.max_connections != b_alias.max_connections
|
||||
|| a_alias.enabled != b_alias.enabled
|
||||
|| a_alias.priority != b_alias.priority
|
||||
|| a_alias.username != b_alias.username
|
||||
|| a_alias.password != b_alias.password
|
||||
|
||||
@@ -1364,6 +1364,7 @@ async fn patch_source_yml_add_alias(
|
||||
priority: 0,
|
||||
max_connections: 1,
|
||||
exp_date,
|
||||
enabled: true,
|
||||
};
|
||||
|
||||
input.upsert_alias(alias)?;
|
||||
@@ -1632,6 +1633,7 @@ fn apply_sources_yml_patches(
|
||||
priority: 0,
|
||||
max_connections: 1,
|
||||
exp_date: *exp_date,
|
||||
enabled: true,
|
||||
};
|
||||
alias.prepare(next_index, &input_type)?;
|
||||
aliases.push(alias);
|
||||
|
||||
Reference in New Issue
Block a user