]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Start to work in priority handling to EIT and OpenTV.
authorAdam Sutton <dev@adamsutton.me.uk>
Tue, 10 Jul 2012 20:52:38 +0000 (21:52 +0100)
committerAdam Sutton <dev@adamsutton.me.uk>
Mon, 30 Jul 2012 14:58:40 +0000 (15:58 +0100)
src/epggrab/module/eit.c
src/epggrab/module/opentv.c

index c2082de2abb929d7aa327bb4bbe0f5974cff7891..a1e9c2ff3276db8e6b60a37309a0a7aab6cf8745 100644 (file)
@@ -162,6 +162,7 @@ static int _eit_callback
   char summary[256];
   char desc[5000];
   htsmsg_t *extra;
+  int update;
 
   /* Invalid */
   if(tableid < 0x4e || tableid > 0x6f || len < 11)
@@ -361,8 +362,9 @@ static int _eit_callback
       len -= dlen; ptr += dlen; dllen -= dlen;
     }
 
-    /* Metadata */
-    if ( save2 ) {
+    /* Broadcast Metadata */
+    update = epg_broadcast_set_grabber(ebc, (epggrab_module_t*)mod, &save);
+    if (update) {
       save |= epg_broadcast_set_is_hd(ebc, hd);
       save |= epg_broadcast_set_is_widescreen(ebc, ws);
       save |= epg_broadcast_set_is_audio_desc(ebc, ad);
@@ -376,7 +378,7 @@ static int _eit_callback
       char *uri;
       uri   = epg_hash(title, summary, desc);
       if (uri) {
-        if ((ee    = epg_episode_find_by_uri(uri, 1, &save2)))
+        if ((ee = epg_episode_find_by_uri(uri, 1, &save2)) && update)
           save |= epg_broadcast_set_episode(ebc, ee);
         free(uri);
       }
@@ -385,14 +387,16 @@ static int _eit_callback
 
     /* Episode data */
     if (ee) {
-      save |= epg_episode_set_is_bw(ee, bw);
-      if ( !ee->title && *title )
+      update = epg_episode_set_grabber(ee, (epggrab_module_t*)mod, &save);
+      if (update)
+        save |= epg_episode_set_is_bw(ee, bw);
+      if ( *title   && (update || !ee->title) )
         save |= epg_episode_set_title(ee, title);
-      if ( !ee->summary && *summary )
+      if ( *summary && (update || !ee->summary) )
         save |= epg_episode_set_summary(ee, summary);
-      if ( !ee->description && *desc )
+      if ( *desc && (update || !ee->description) )
         save |= epg_episode_set_description(ee, desc);
-      if ( !LIST_FIRST(&ee->genre) && egl )
+      if ( egl   && (update || !LIST_FIRST(&ee->genre)) )
         save |= epg_episode_set_genre(ee, egl);
 #if TODO_ADD_EXTRA
       if ( extra )
index 18c77f7c7e5118b174e8fd896a95c1d6daf1e171..355d18442e277cf76f71b003ffd0f841178bb0b2 100644 (file)
@@ -341,7 +341,7 @@ static int _opentv_parse_event_section
   ( opentv_module_t *mod, opentv_status_t *sta,
     uint8_t *buf, int len, int type )
 {
-  int i, cid, save = 0;
+  int i, cid, update, save = 0;
   time_t mjd;
   char *uri;
   epggrab_channel_t *ec;
@@ -381,10 +381,11 @@ static int _opentv_parse_event_section
 
     /* Find episode */
     if (ebc) {
-      ee = NULL;
+      update = epg_broadcast_set_grabber(ebc, (epggrab_module_t*)mod, &save);
+      ee     = NULL;
 
       /* Find episode */
-      if (ev.type & OPENTV_SUMMARY || !ebc->episode) {
+      if ((update && (ev.type & OPENTV_SUMMARY)) || !ebc->episode) {
         uri = epg_hash(ev.title, ev.summary, ev.desc);
         if (uri) {
           ee = epg_episode_find_by_uri(uri, 1, &save);
@@ -392,33 +393,36 @@ static int _opentv_parse_event_section
         }
       }
 
+      /* Copy existing title */
+      if (!ev.title && ebc->episode && ebc->episode->title)
+        ev.title = strdup(ebc->episode->title);
+
       /* Use existing */
-      if (!ee) ee = ebc->episode;
+      if (!ee) 
+        ee = ebc->episode;
+      else if (update || !ebc->episode)
+        save |= epg_broadcast_set_episode(ebc, ee);
 
       /* Update */
       if (ee) {
-        if (!ev.title && ebc->episode)
-          save |= epg_episode_set_title(ee, ebc->episode->title);
-        else if (ev.title)
+        update = epg_episode_set_grabber(ee, (epggrab_module_t*)mod, &save);
+
+        if (ev.title && (update || !ee->title))
           save |= epg_episode_set_title(ee, ev.title);
-        if (ev.summary)
+        if (ev.summary && (update || !ee->summary))
           save |= epg_episode_set_summary(ee, ev.summary);
-        if (ev.desc)
+        if (ev.desc && (update || !ee->description))
           save |= epg_episode_set_description(ee, ev.desc);
-        if (ev.cat) {
+        if (ev.cat && (update || !LIST_FIRST(&ee->genre))) {
           epg_genre_list_t *egl = calloc(1, sizeof(epg_genre_list_t));
           epg_genre_list_add_by_eit(egl, ev.cat);
           save |= epg_episode_set_genre(ee, egl);
           epg_genre_list_destroy(egl);
         }
-        // Note: don't override the season (since the ID is channel specific
-        //       it'll keep changing!
-        if (ev.series && !ee->season) {
+        if (ev.series && (update || !ee->season)) {
           es = _opentv_find_season(mod, cid, ev.series);
           if (es) save |= epg_episode_set_season(ee, es);
         }
-
-        save |= epg_broadcast_set_episode(ebc, ee);
       }
     }