]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
IPTV: bouquet linking - fixes
authorJaroslav Kysela <perex@perex.cz>
Fri, 16 Oct 2015 12:26:48 +0000 (14:26 +0200)
committerJaroslav Kysela <perex@perex.cz>
Fri, 16 Oct 2015 12:26:48 +0000 (14:26 +0200)
src/bouquet.c
src/bouquet.h
src/input/mpegts/dvb_psi.c
src/input/mpegts/iptv.h
src/input/mpegts/iptv/iptv.c

index c12fa210babb784335793262fbe44b5f1d07df69..661950eb1df37ec762345c1da7242a32fc5f45ec 100644 (file)
@@ -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;
 }
index 4df82e76c97c54bc33031f0460296517b0b74b5f..692b4b3f23ddadd856d545ad20850dd24764e398 100644 (file)
@@ -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);
 
index 1746fa683874aba7db90f3ae7e5efeb27cf9192c..2e078feee0618cda15736ea2d8548c8f896eedce 100644 (file)
@@ -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
index 83b998d21308c1b1f595a1fe437f606871ea9585..05c74b2b5c30a690dcd0f3b0f183b2347d078e29 100644 (file)
@@ -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 );
 
index d3b166c78f163add68280166f9122ae3a9816e3c..1d608dda7fc70d2b18cfe660afcf17d1e6faa869 100644 (file)
@@ -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