Start to work in priority handling to EIT and OpenTV.

This commit is contained in:
Adam Sutton 2012-07-10 21:52:38 +01:00
parent 1dd4ac3f4a
commit 65ea8555a2
2 changed files with 31 additions and 23 deletions

View file

@ -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 )

View file

@ -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);
}
}