diff --git a/src/epggrab/module/eit.c b/src/epggrab/module/eit.c index c2082de2..a1e9c2ff 100644 --- a/src/epggrab/module/eit.c +++ b/src/epggrab/module/eit.c @@ -162,6 +162,7 @@ static int _eit_callback char summary[256]; char desc[5000]; htsmsg_t *extra; + int update; /* Invalid */ if(tableid < 0x4e || tableid > 0x6f || len < 11) @@ -361,8 +362,9 @@ static int _eit_callback len -= dlen; ptr += dlen; dllen -= dlen; } - /* Metadata */ - if ( save2 ) { + /* Broadcast Metadata */ + update = epg_broadcast_set_grabber(ebc, (epggrab_module_t*)mod, &save); + if (update) { save |= epg_broadcast_set_is_hd(ebc, hd); save |= epg_broadcast_set_is_widescreen(ebc, ws); save |= epg_broadcast_set_is_audio_desc(ebc, ad); @@ -376,7 +378,7 @@ static int _eit_callback char *uri; uri = epg_hash(title, summary, desc); if (uri) { - if ((ee = epg_episode_find_by_uri(uri, 1, &save2))) + if ((ee = epg_episode_find_by_uri(uri, 1, &save2)) && update) save |= epg_broadcast_set_episode(ebc, ee); free(uri); } @@ -385,14 +387,16 @@ static int _eit_callback /* Episode data */ if (ee) { - save |= epg_episode_set_is_bw(ee, bw); - if ( !ee->title && *title ) + update = epg_episode_set_grabber(ee, (epggrab_module_t*)mod, &save); + if (update) + save |= epg_episode_set_is_bw(ee, bw); + if ( *title && (update || !ee->title) ) save |= epg_episode_set_title(ee, title); - if ( !ee->summary && *summary ) + if ( *summary && (update || !ee->summary) ) save |= epg_episode_set_summary(ee, summary); - if ( !ee->description && *desc ) + if ( *desc && (update || !ee->description) ) save |= epg_episode_set_description(ee, desc); - if ( !LIST_FIRST(&ee->genre) && egl ) + if ( egl && (update || !LIST_FIRST(&ee->genre)) ) save |= epg_episode_set_genre(ee, egl); #if TODO_ADD_EXTRA if ( extra ) diff --git a/src/epggrab/module/opentv.c b/src/epggrab/module/opentv.c index 18c77f7c..355d1844 100644 --- a/src/epggrab/module/opentv.c +++ b/src/epggrab/module/opentv.c @@ -341,7 +341,7 @@ static int _opentv_parse_event_section ( opentv_module_t *mod, opentv_status_t *sta, uint8_t *buf, int len, int type ) { - int i, cid, save = 0; + int i, cid, update, save = 0; time_t mjd; char *uri; epggrab_channel_t *ec; @@ -381,10 +381,11 @@ static int _opentv_parse_event_section /* Find episode */ if (ebc) { - ee = NULL; + update = epg_broadcast_set_grabber(ebc, (epggrab_module_t*)mod, &save); + ee = NULL; /* Find episode */ - if (ev.type & OPENTV_SUMMARY || !ebc->episode) { + if ((update && (ev.type & OPENTV_SUMMARY)) || !ebc->episode) { uri = epg_hash(ev.title, ev.summary, ev.desc); if (uri) { ee = epg_episode_find_by_uri(uri, 1, &save); @@ -392,33 +393,36 @@ static int _opentv_parse_event_section } } + /* Copy existing title */ + if (!ev.title && ebc->episode && ebc->episode->title) + ev.title = strdup(ebc->episode->title); + /* Use existing */ - if (!ee) ee = ebc->episode; + if (!ee) + ee = ebc->episode; + else if (update || !ebc->episode) + save |= epg_broadcast_set_episode(ebc, ee); /* Update */ if (ee) { - if (!ev.title && ebc->episode) - save |= epg_episode_set_title(ee, ebc->episode->title); - else if (ev.title) + update = epg_episode_set_grabber(ee, (epggrab_module_t*)mod, &save); + + if (ev.title && (update || !ee->title)) save |= epg_episode_set_title(ee, ev.title); - if (ev.summary) + if (ev.summary && (update || !ee->summary)) save |= epg_episode_set_summary(ee, ev.summary); - if (ev.desc) + if (ev.desc && (update || !ee->description)) save |= epg_episode_set_description(ee, ev.desc); - if (ev.cat) { + if (ev.cat && (update || !LIST_FIRST(&ee->genre))) { epg_genre_list_t *egl = calloc(1, sizeof(epg_genre_list_t)); epg_genre_list_add_by_eit(egl, ev.cat); save |= epg_episode_set_genre(ee, egl); epg_genre_list_destroy(egl); } - // Note: don't override the season (since the ID is channel specific - // it'll keep changing! - if (ev.series && !ee->season) { + if (ev.series && (update || !ee->season)) { es = _opentv_find_season(mod, cid, ev.series); if (es) save |= epg_episode_set_season(ee, es); } - - save |= epg_broadcast_set_episode(ebc, ee); } }