From 20097dd255cdb57960b63a17893d77ad315368bb Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Mon, 28 May 2012 16:58:13 +0100 Subject: [PATCH] Pass through channel name, icon changes and allow EIT to create missing channels (however these need to be overidden) --- src/epg.c | 34 +++++++++++++++++++++------------- src/epggrab/eit.c | 17 +++++++++++------ 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/epg.c b/src/epg.c index 378e2333..a265313e 100644 --- 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 ) { diff --git a/src/epggrab/eit.c b/src/epggrab/eit.c index be0763ec..34e2c3ae 100644 --- a/src/epggrab/eit.c +++ b/src/epggrab/eit.c @@ -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);