Split channel matching and linking so we can force linking from the UI.
This commit is contained in:
parent
dd39b68b26
commit
45a1c7c272
3 changed files with 43 additions and 27 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue