Split channel matching and linking so we can force linking from the UI.

This commit is contained in:
Adam Sutton 2012-07-31 15:05:35 +01:00
parent dd39b68b26
commit 45a1c7c272
3 changed files with 43 additions and 27 deletions

View file

@ -32,31 +32,44 @@
* EPG Grab Channel functions
* *************************************************************************/
/* Link epggrab channel to real channel */
// returns 1 if link made
int epggrab_channel_link ( epggrab_channel_t *ec, channel_t *ch )
/* Check if channels match */
int epggrab_channel_match ( epggrab_channel_t *ec, channel_t *ch )
{
int match = 0;
if (!ec || !ch) return 0;
if (ec->channel) return 0;
if (ec->channel) return 0; // ignore already paired
if (ec->name && !strcmp(ec->name, ch->ch_name))
match = 1;
if (ec->name && !strcmp(ec->name, ch->ch_name)) return 1;
return 0;
}
if (match) {
tvhlog(LOG_INFO, ec->mod->id, "linking %s to %s",
ec->id, ch->ch_name);
ec->channel = ch;
if (ec->name && epggrab_channel_rename)
channel_rename(ch, ec->name);
if (ec->icon && epggrab_channel_reicon)
channel_set_icon(ch, ec->icon);
if (ec->number>0 && epggrab_channel_renumber)
channel_set_number(ch, ec->number);
}
/* Link epggrab channel to real channel */
void epggrab_channel_link ( epggrab_channel_t *ec, channel_t *ch )
{
/* No change */
if (!ch || ch == ec->channel) return;
return match;
tvhlog(LOG_INFO, ec->mod->id, "linking %s to %s",
ec->id, ch->ch_name);
ec->channel = ch;
if (ec->name && epggrab_channel_rename)
channel_rename(ch, ec->name);
if (ec->icon && epggrab_channel_reicon)
channel_set_icon(ch, ec->icon);
if (ec->number>0 && epggrab_channel_renumber)
channel_set_number(ch, ec->number);
/* Save */
if (ec->mod->ch_save) ec->mod->ch_save(ec->mod, ec);
}
/* Match and link (basically combines two funcs above for ease) */
int epggrab_channel_match_and_link ( epggrab_channel_t *ec, channel_t *ch )
{
int r = epggrab_channel_match(ec, ch);
if (r)
epggrab_channel_link(ec, ch);
return r;
}
/* Set name */
@ -112,7 +125,7 @@ void epggrab_channel_updated ( epggrab_channel_t *ec )
/* Find a link */
if (!ec->channel)
RB_FOREACH(ch, &channel_name_tree, ch_name_link)
if (epggrab_channel_link(ec, ch)) break;
if (epggrab_channel_match_and_link(ec, ch)) break;
/* Save */
if (ec->mod->ch_save) ec->mod->ch_save(ec->mod, ec);
@ -171,8 +184,11 @@ htsmsg_t *epggrab_channel_list ( void )
e = htsmsg_create_map();
htsmsg_add_str(e, "module", mod->id);
htsmsg_add_str(e, "id", ec->id);
htsmsg_add_str(e, "name", ec->name);
sprintf(name, "%s|%s", mod->id, ec->id);
htsmsg_add_str(e, "mod-id", name);
sprintf(name, "%s: %s", mod->name, ec->name);
htsmsg_add_str(e, "name", name);
htsmsg_add_str(e, "mod-name", name);
htsmsg_add_msg(m, NULL, e);
}
}

View file

@ -164,10 +164,7 @@ void epggrab_module_ch_add ( void *m, channel_t *ch )
epggrab_channel_t *egc;
epggrab_module_int_t *mod = m;
RB_FOREACH(egc, mod->channels, link) {
if (epggrab_channel_link(egc, ch)) {
if (mod->ch_save) mod->ch_save(mod, egc);
break;
}
if (epggrab_channel_match_and_link(egc, ch)) break;
}
}

View file

@ -46,7 +46,10 @@ void epggrab_module_channels_load ( epggrab_module_t *m );
* Channel processing
* *************************************************************************/
int epggrab_channel_link ( epggrab_channel_t *ec, struct channel *ch );
void epggrab_channel_link ( epggrab_channel_t *ec, struct channel *ch );
int epggrab_channel_match ( epggrab_channel_t *ec, struct channel *ch );
int epggrab_channel_match_and_link
( epggrab_channel_t *ec, struct channel *ch );
epggrab_channel_t *epggrab_channel_find
( epggrab_channel_tree_t *chs, const char *id, int create, int *save,