]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
bouquet: prepare storage for tags
authorJaroslav Kysela <perex@perex.cz>
Fri, 7 Nov 2014 10:03:38 +0000 (11:03 +0100)
committerJaroslav Kysela <perex@perex.cz>
Sat, 8 Nov 2014 20:05:39 +0000 (21:05 +0100)
docs/html/config_bouquet.html
src/bouquet.c
src/bouquet.h
src/input/mpegts/dvb_psi.c

index 9aaa11f4b07821be45845e338ca76592e0b22fbf..1970e73e0a1e917ecd1c4d47101dbcb9acc11a9f 100644 (file)
@@ -5,7 +5,7 @@ The bouquets are obtained automatically from the DVB source during
 the mux scan period. Note that bouquets may use more muxes and only
 services from scanned muxes are added. The mux with bouquets might
 require another scan when all muxes are discovered (manually using
-a stream for the mux or reset the mux scan state to pending).
+the rescan checkbox).
 </p>
 
 <p>
index 13d6bc656a13883ed3a553aa4fef122b4f6a462f..b0840f7363f17a7ae43d135c0ae6aa321fddd920 100644 (file)
@@ -247,7 +247,7 @@ bouquet_map_channel(bouquet_t *bq, service_t *t)
  *
  */
 void
-bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn)
+bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn, uint32_t tag)
 {
   service_lcn_t *tl;
   channel_service_mapping_t *csm;
@@ -465,6 +465,15 @@ bouquet_get_channel_number(bouquet_t *bq, service_t *t)
   return 0;
 }
 
+/*
+ *
+ */
+static uint32_t
+bouquet_get_tag_number(bouquet_t *bq, service_t *t)
+{
+  return 0;
+}
+
 /**
  *
  */
@@ -692,16 +701,22 @@ bouquet_class_chtag_ref_set ( void *obj, const void *p )
 static const void *
 bouquet_class_services_get ( void *obj )
 {
-  htsmsg_t *m = htsmsg_create_map();
+  htsmsg_t *m = htsmsg_create_map(), *e;
   bouquet_t *bq = obj;
   service_t *t;
+  int64_t lcn;
+  uint32_t tag;
   size_t z;
 
   /* Add all */
   for (z = 0; z < bq->bq_services->is_count; z++) {
     t = (service_t *)bq->bq_services->is_array[z];
-    htsmsg_add_s64(m, idnode_uuid_as_str(&t->s_id),
-                   bouquet_get_channel_number0(bq, t));
+    e = htsmsg_create_map();
+    if ((lcn = bouquet_get_channel_number0(bq, t)) != 0)
+      htsmsg_add_s64(e, "lcn", lcn);
+    if ((tag = bouquet_get_tag_number(bq, t)) != 0)
+      htsmsg_add_s64(e, "tag", lcn);
+    htsmsg_add_msg(m, idnode_uuid_as_str(&t->s_id), e);
   }
 
   return m;
@@ -888,9 +903,11 @@ void
 bouquet_service_resolve(void)
 {
   bouquet_t *bq;
+  htsmsg_t *e;
   htsmsg_field_t *f;
   service_t *s;
-  uint32_t lcn;
+  int64_t lcn;
+  uint32_t tag;
   int saveflag;
 
   lock_assert(&global_lock);
@@ -901,10 +918,12 @@ bouquet_service_resolve(void)
     saveflag = bq->bq_saveflag;
     if (bq->bq_enabled) {
       HTSMSG_FOREACH(f, bq->bq_services_waiting) {
-        if (htsmsg_field_get_u32(f, &lcn)) continue;
+        if ((e = htsmsg_field_get_map(f)) == NULL) continue;
+        lcn = htsmsg_get_s64_or_default(e, "lcn", 0);
+        tag = htsmsg_get_u32_or_default(e, "tag", 0);
         s = service_find_by_identifier(f->hmf_name);
         if (s)
-          bouquet_add_service(bq, s, lcn);
+          bouquet_add_service(bq, s, lcn, tag);
       }
     }
     htsmsg_destroy(bq->bq_services_waiting);
index 0a992f2627d4acef8bd6e3d6030c5bbc7df279b9..bf37c1924756aea8fb8fff80b59613fbc0b9ef1a 100644 (file)
@@ -82,7 +82,7 @@ bouquet_t * bouquet_find_by_source(const char *name, const char *src, int create
 
 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);
+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);
 
 uint64_t bouquet_get_channel_number(bouquet_t *bq, service_t *t);
index bf3dde8f62ce7c5cc2f86302644c7f1b2800ab95..27a694c766b4df439c9cc900db23e2a6e2d7e57d 100644 (file)
@@ -399,7 +399,7 @@ dvb_desc_service_list
         bs->svc = s;
         TAILQ_INSERT_TAIL(&bi->services, bs, link);
       } else if (bq) {
-        bouquet_add_service(bq, (service_t *)s, 0);
+        bouquet_add_service(bq, (service_t *)s, 0, 0);
       }
       if (save)
         s->s_config_save((service_t*)s);
@@ -527,7 +527,7 @@ dvb_freesat_add_service
     snprintf(name, sizeof(name), "%s: %s", bi->name, fr->name);
     fr->bouquet = bouquet_find_by_source(name, src, 1);
   }
-  bouquet_add_service(fr->bouquet, (service_t *)s, (int64_t)lcn * CHANNEL_SPLIT);
+  bouquet_add_service(fr->bouquet, (service_t *)s, (int64_t)lcn * CHANNEL_SPLIT, 0);
 }
 
 static void
@@ -1178,7 +1178,7 @@ dvb_bat_completed
     dvb_bouquet_comment(bq, bi->mm);
 
     TAILQ_FOREACH(bs, &bi->services, link)
-      bouquet_add_service(bq, (service_t *)bs->svc, 0);
+      bouquet_add_service(bq, (service_t *)bs->svc, 0, 0);
 
     bouquet_completed(bq, bi->services_count);
 
@@ -1747,7 +1747,7 @@ dvb_fs_sdt_callback
     s       = mpegts_service_find(mux, service_id, 0, 1, &save);
     charset = dvb_charset_find(mn, mux, s);
     if (bq && s) {
-      bouquet_add_service(bq, (service_t *)s, 0);
+      bouquet_add_service(bq, (service_t *)s, 0, 0);
     } else {
       tvhtrace(mt->mt_name, "    service not found (bq %p, svc %p)", bq, s);
     }