From: Jaroslav Kysela Date: Fri, 16 Oct 2015 12:26:48 +0000 (+0200) Subject: IPTV: bouquet linking - fixes X-Git-Tag: v4.2.1~1897 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9539fd7ea22353503ea6dafe852add60aa1511e6;p=thirdparty%2Ftvheadend.git IPTV: bouquet linking - fixes --- diff --git a/src/bouquet.c b/src/bouquet.c index c12fa210b..661950eb1 100644 --- a/src/bouquet.c +++ b/src/bouquet.c @@ -536,6 +536,20 @@ bouquet_save(bouquet_t *bq, int notify) idnode_notify_changed(&bq->bq_id); } +/** + * + */ + +void +bouquet_change_comment ( bouquet_t *bq, const char *comment, int replace ) +{ + if (!replace && (bq->bq_comment || bq->bq_comment[0])) + return; + free(bq->bq_comment); + bq->bq_comment = strdup(comment); + bq->bq_saveflag = 1; +} + /* ************************************************************************** * Class definition * **************************************************************************/ @@ -577,6 +591,11 @@ static void bouquet_class_rescan_notify0 ( bouquet_t *bq, const char *lang ) { void mpegts_mux_bouquet_rescan ( const char *src, const char *extra ); + void iptv_bouquet_trigger_by_uuid( const char *uuid ); +#if ENABLE_IPTV + if (bq->bq_src && strncmp(bq->bq_src, "iptv-network://", 15) == 0) + return iptv_bouquet_trigger_by_uuid(bq->bq_src + 15); +#endif mpegts_mux_bouquet_rescan(bq->bq_src, bq->bq_comment); bq->bq_rescan = 0; } diff --git a/src/bouquet.h b/src/bouquet.h index 4df82e76c..692b4b3f2 100644 --- a/src/bouquet.h +++ b/src/bouquet.h @@ -87,6 +87,7 @@ void bouquet_map_to_channels(bouquet_t *bq); void bouquet_notify_channels(bouquet_t *bq); void bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn, uint32_t tag); void bouquet_completed(bouquet_t *bq, uint32_t seen); +void bouquet_change_comment(bouquet_t *bq, const char *comment, int replace); uint64_t bouquet_get_channel_number(bouquet_t *bq, service_t *t); diff --git a/src/input/mpegts/dvb_psi.c b/src/input/mpegts/dvb_psi.c index 1746fa683..2e078feee 100644 --- a/src/input/mpegts/dvb_psi.c +++ b/src/input/mpegts/dvb_psi.c @@ -106,10 +106,8 @@ dvb_bouquet_comment ( bouquet_t *bq, mpegts_mux_t *mm ) if (bq->bq_comment && bq->bq_comment[0]) return; - free(bq->bq_comment); mpegts_mux_nice_name(mm, comment, sizeof(comment)); - bq->bq_comment = strdup(comment); - bq->bq_saveflag = 1; + bouquet_change_comment(bq, comment, 0); } #if ENABLE_MPEGTS_DVB diff --git a/src/input/mpegts/iptv.h b/src/input/mpegts/iptv.h index 83b998d21..05c74b2b5 100644 --- a/src/input/mpegts/iptv.h +++ b/src/input/mpegts/iptv.h @@ -20,6 +20,8 @@ #ifndef __IPTV_H__ #define __IPTV_H__ +void iptv_bouquet_trigger_by_uuid(const char *uuid); + void iptv_init ( void ); void iptv_done ( void ); diff --git a/src/input/mpegts/iptv/iptv.c b/src/input/mpegts/iptv/iptv.c index d3b166c78..1d608dda7 100644 --- a/src/input/mpegts/iptv/iptv.c +++ b/src/input/mpegts/iptv/iptv.c @@ -91,7 +91,7 @@ iptv_bouquet_get (iptv_network_t *in, int create) { char buf[128]; snprintf(buf, sizeof(buf), "iptv-network://%s", idnode_uuid_as_sstr(&in->mn_id)); - return bouquet_find_by_source(in->in_url, buf, create); + return bouquet_find_by_source(in->mn_network_name, buf, create); } static void @@ -104,6 +104,7 @@ iptv_bouquet_update(void *aux) uint32_t seen = 0; if (bq == NULL) return; + bouquet_change_comment(bq, in->in_url, 1); LIST_FOREACH(mm, &in->mn_muxes, mm_network_link) LIST_FOREACH(ms, &mm->mm_services, s_dvb_mux_link) { bouquet_add_service(bq, (service_t *)ms, ((iptv_mux_t *)mm)->mm_iptv_chnum, 0); @@ -118,6 +119,13 @@ iptv_bouquet_trigger(iptv_network_t *in, int timeout) gtimer_arm(&in->in_bouquet_timer, iptv_bouquet_update, in, timeout); } +void +iptv_bouquet_trigger_by_uuid(const char *uuid) +{ + iptv_network_t *in = (iptv_network_t *)idnode_find(uuid, &iptv_network_class, NULL); + iptv_bouquet_trigger(in, 0); +} + /* ************************************************************************** * IPTV input