]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Pass through channel name, icon changes and allow EIT to create missing channels...
authorAdam Sutton <dev@adamsutton.me.uk>
Mon, 28 May 2012 15:58:13 +0000 (16:58 +0100)
committerAdam Sutton <dev@adamsutton.me.uk>
Mon, 30 Jul 2012 14:47:21 +0000 (15:47 +0100)
src/epg.c
src/epggrab/eit.c

index 378e233352f3db1b95bd990fe069acc0444f4bb6..a265313e9e88f6b3c0cf49d6dfc7196f9416e8f7 100644 (file)
--- a/src/epg.c
+++ b/src/epg.c
@@ -1162,7 +1162,7 @@ int epg_channel_set_name ( epg_channel_t *channel, const char *name )
   if ( !channel->name || strcmp(channel->name, name) ) {
     if (channel->name) free(channel->name);
     channel->name = strdup(name);
-    // NOTE: does not remap
+    // TODO: need to allow overriding of EIT created channels
     if ( !channel->channel ) {
       LIST_FOREACH(ch, &channel_unmapped, ch_eulink) {
         if ( _epg_channel_cmp(channel, ch) ) {
@@ -1171,11 +1171,31 @@ int epg_channel_set_name ( epg_channel_t *channel, const char *name )
         }
       }
     }
+    // pass through
+    if ( channel->channel ) {
+      save |= channel_rename(channel->channel, name);
+    }
     save |= 1;
   }
   return save;
 }
 
+int epg_channel_set_icon ( epg_channel_t *channel, const char *icon )
+{
+  int save = 0;
+  if ( !channel | !icon ) return 0;
+  if ( !channel->icon || strcmp(channel->icon, icon) ) {
+    if ( channel->icon ) free(channel->icon);
+    channel->icon = strdup(icon);
+    // pass through
+    if ( channel->channel ) {
+      channel_set_icon(channel->channel, icon);
+    }
+    save = 1;
+  }
+  return save;
+}
+
 int epg_channel_set_channel ( epg_channel_t *ec, channel_t *ch )
 {
   int save = 0;
@@ -1204,18 +1224,6 @@ int epg_channel_set_channel ( epg_channel_t *ec, channel_t *ch )
   return save;
 }
 
-int epg_channel_set_icon ( epg_channel_t *channel, const char *icon )
-{
-  int save = 0;
-  if ( !channel | !icon ) return 0;
-  if ( !channel->icon || strcmp(channel->icon, icon) ) {
-    if ( channel->icon ) free(channel->icon);
-    channel->icon = strdup(icon);
-    save = 1;
-  }
-  return save;
-}
-
 epg_broadcast_t *epg_channel_get_broadcast 
   ( epg_channel_t *channel, time_t start, time_t stop, int create, int *save )
 {
index be0763ec457143015a0abfc25411f1db4b46651b..34e2c3aeedcbec3fd39dfbccdedaa9fbef3ae477 100644 (file)
@@ -32,9 +32,9 @@ static const char* _eit_name ( void )
   return "eit";
 }
 
-static void _eit_episode_uri ( char *uri, const char *title, const char *summary )
+static void _eit_episode_uri 
+  ( char *uri, const char *title, const char *summary )
 {
-
 }
 
 // called from dvb_tables.c
@@ -43,6 +43,7 @@ void eit_callback ( channel_t *ch, int id, time_t start, time_t stop,
                     const char *extitem, const char *extdesc,
                     const char *exttext ) {
   int save = 0;
+  epg_channel_t *ec;
   epg_broadcast_t *ebc;
   epg_episode_t *ee;
   const char *summary     = NULL;
@@ -53,10 +54,13 @@ void eit_callback ( channel_t *ch, int id, time_t start, time_t stop,
 //if (epggrab_eit_disabled) return;
 
   /* Channel */
-  if (!ch->ch_epg_channel) {
-    // TODO: create??
-    return;
+  ec = ch->ch_epg_channel;
+  if (!ec) {
+    ec = epg_channel_find_by_uri(ch->ch_name, 1, &save);
+    if (ec)
+      epg_channel_set_channel(ec, ch);
   }
+  if (!ec) return;
 
   /* Find broadcast */
   ebc  = epg_channel_get_broadcast(ch->ch_epg_channel, start, stop, 1, &save);
@@ -67,7 +71,8 @@ void eit_callback ( channel_t *ch, int id, time_t start, time_t stop,
 
   /* Create/Replace episode */
   if ( !ebc->episode ||
-       !epg_episode_fuzzy_match(ebc->episode, uri, title, summary, description) ) {
+       !epg_episode_fuzzy_match(ebc->episode, uri, title,
+                                summary, description) ) {
     
     /* Create episode */
     ee  = epg_episode_find_by_uri(uri, 1, &save);