Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
epggrab: channel - fix the wrong cross-link lists management, fixes #…
…3222
  • Loading branch information
perexg committed Nov 5, 2015
1 parent fcd06dc commit d445d17
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 10 deletions.
26 changes: 18 additions & 8 deletions src/epggrab/channel.c
Expand Up @@ -107,16 +107,26 @@ int epggrab_channel_match_number ( epggrab_channel_t *ec, channel_t *ch )
return 0;
}

/* Delete ilm */
static void
_epgggrab_channel_link_delete(idnode_list_mapping_t *ilm, int delconf)
{
epggrab_channel_t *ec = (epggrab_channel_t *)ilm->ilm_in1;
channel_t *ch = (channel_t *)ilm->ilm_in2;
tvhdebug(ec->mod->id, "unlinking %s from %s",
ec->id, channel_get_name(ch));
idnode_list_unlink(ilm, delconf ? ec : NULL);
}

/* Destroy */
void
epggrab_channel_link_delete
( epggrab_channel_t *ec, channel_t *ch, int delconf )
{
idnode_list_mapping_t *ilm;
LIST_FOREACH(ilm, &ec->channels, ilm_in2_link)
LIST_FOREACH(ilm, &ec->channels, ilm_in1_link)
if (ilm->ilm_in1 == &ec->idnode && ilm->ilm_in2 == &ch->ch_id) {
idnode_list_unlink(ilm, NULL);
_epgggrab_channel_link_delete(ilm, delconf);
return;
}
}
Expand All @@ -126,7 +136,7 @@ static void epggrab_channel_links_delete( epggrab_channel_t *ec, int delconf )
{
idnode_list_mapping_t *ilm;
while ((ilm = LIST_FIRST(&ec->channels)))
idnode_list_unlink(ilm, delconf ? ec : NULL);
_epgggrab_channel_link_delete(ilm, delconf);
}

/* Link epggrab channel to real channel */
Expand All @@ -140,7 +150,7 @@ epggrab_channel_link ( epggrab_channel_t *ec, channel_t *ch, void *origin )
if (!ch || !ch->ch_enabled) return 0;

/* Already linked */
LIST_FOREACH(ilm, &ec->channels, ilm_in2_link)
LIST_FOREACH(ilm, &ec->channels, ilm_in1_link)
if (ilm->ilm_in2 == &ch->ch_id)
return 0;

Expand Down Expand Up @@ -185,7 +195,7 @@ int epggrab_channel_set_name ( epggrab_channel_t *ec, const char *name )
if (ec->name) free(ec->name);
ec->name = strdup(name);
if (epggrab_conf.channel_rename) {
LIST_FOREACH(ilm, &ec->channels, ilm_in2_link) {
LIST_FOREACH(ilm, &ec->channels, ilm_in1_link) {
ch = (channel_t *)ilm->ilm_in2;
if (channel_set_name(ch, name))
channel_save(ch);
Expand All @@ -211,7 +221,7 @@ int epggrab_channel_set_icon ( epggrab_channel_t *ec, const char *icon )
if (ec->icon) free(ec->icon);
ec->icon = strdup(icon);
if (epggrab_conf.channel_reicon) {
LIST_FOREACH(ilm, &ec->channels, ilm_in2_link) {
LIST_FOREACH(ilm, &ec->channels, ilm_in1_link) {
ch = (channel_t *)ilm->ilm_in2;
if (channel_set_icon(ch, icon))
channel_save(ch);
Expand All @@ -235,7 +245,7 @@ int epggrab_channel_set_number ( epggrab_channel_t *ec, int major, int minor )
if (ec->lcn != lcn) {
ec->lcn = lcn;
if (epggrab_conf.channel_renumber) {
LIST_FOREACH(ilm, &ec->channels, ilm_in2_link) {
LIST_FOREACH(ilm, &ec->channels, ilm_in1_link) {
ch = (channel_t *)ilm->ilm_in2;
if (channel_set_number(ch,
lcn / CHANNEL_SPLIT,
Expand Down Expand Up @@ -620,7 +630,7 @@ epggrab_channel_class_only_one_notify ( void *obj, const char *lang )
idnode_list_mapping_t *ilm1, *ilm2;
if (ec->only_one) {
for(ilm1 = LIST_FIRST(&ec->channels); ilm1; ilm1 = ilm2) {
ilm2 = LIST_NEXT(ilm1, ilm_in2_link);
ilm2 = LIST_NEXT(ilm1, ilm_in1_link);
ch = (channel_t *)ilm1->ilm_in2;
if (!first)
first = ch;
Expand Down
2 changes: 1 addition & 1 deletion src/epggrab/module/pyepg.c
Expand Up @@ -355,7 +355,7 @@ static int _pyepg_parse_schedule
HTSMSG_FOREACH(f, tags) {
if (strcmp(f->hmf_name, "broadcast") == 0) {
ec->laststamp = dispatch_clock;
LIST_FOREACH(ilm, &ec->channels, ilm_in2_link) {
LIST_FOREACH(ilm, &ec->channels, ilm_in1_link) {
ch = (channel_t *)ilm->ilm_in2;
if (!ch->ch_enabled || ch->ch_epg_parent) continue;
save |= _pyepg_parse_broadcast(mod, htsmsg_get_map_by_field(f),
Expand Down
2 changes: 1 addition & 1 deletion src/epggrab/module/xmltv.c
Expand Up @@ -597,7 +597,7 @@ static int _xmltv_parse_programme
if(stop <= start || stop <= dispatch_clock) return 0;

ec->laststamp = dispatch_clock;
LIST_FOREACH(ilm, &ec->channels, ilm_in2_link) {
LIST_FOREACH(ilm, &ec->channels, ilm_in1_link) {
ch = (channel_t *)ilm->ilm_in2;
if (!ch->ch_enabled || ch->ch_epg_parent) continue;
save |= _xmltv_parse_programme_tags(mod, ch, tags,
Expand Down

0 comments on commit d445d17

Please sign in to comment.