Updated grabber modules to new EPG api.
This commit is contained in:
parent
10f3d893ad
commit
407683324d
5 changed files with 126 additions and 104 deletions
|
@ -145,7 +145,7 @@ static int _eit_callback
|
|||
( th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
||||
uint8_t tableid, void *opaque )
|
||||
{
|
||||
epggrab_module_ota_t *mod = opaque;
|
||||
epggrab_module_t *mod = opaque;
|
||||
epggrab_ota_mux_t *ota;
|
||||
th_dvb_adapter_t *tda;
|
||||
service_t *svc;
|
||||
|
@ -168,7 +168,7 @@ static int _eit_callback
|
|||
return -1;
|
||||
|
||||
/* Get OTA */
|
||||
ota = epggrab_ota_find(mod, tdmi);
|
||||
ota = epggrab_ota_find((epggrab_module_ota_t*)mod, tdmi);
|
||||
if (!ota || !ota->status) return 0;
|
||||
sta = ota->status;
|
||||
|
||||
|
@ -364,11 +364,11 @@ static int _eit_callback
|
|||
|
||||
/* Metadata */
|
||||
if ( save2 ) {
|
||||
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);
|
||||
save |= epg_broadcast_set_is_subtitled(ebc, st);
|
||||
save |= epg_broadcast_set_is_deafsigned(ebc, ds);
|
||||
save |= epg_broadcast_set_is_hd(ebc, hd, mod);
|
||||
save |= epg_broadcast_set_is_widescreen(ebc, ws, mod);
|
||||
save |= epg_broadcast_set_is_audio_desc(ebc, ad, mod);
|
||||
save |= epg_broadcast_set_is_subtitled(ebc, st, mod);
|
||||
save |= epg_broadcast_set_is_deafsigned(ebc, ds, mod);
|
||||
}
|
||||
|
||||
/* Create episode */
|
||||
|
@ -378,7 +378,7 @@ static int _eit_callback
|
|||
uri = epg_hash(title, summary, desc);
|
||||
if (uri) {
|
||||
if ((ee = epg_episode_find_by_uri(uri, 1, &save2)))
|
||||
save |= epg_broadcast_set_episode(ebc, ee);
|
||||
save |= epg_broadcast_set_episode(ebc, ee, mod);
|
||||
free(uri);
|
||||
}
|
||||
}
|
||||
|
@ -386,18 +386,18 @@ static int _eit_callback
|
|||
|
||||
/* Episode data */
|
||||
if (ee) {
|
||||
save |= epg_episode_set_is_bw(ee, bw);
|
||||
if ( !ee->title && *title )
|
||||
save |= epg_episode_set_title(ee, title);
|
||||
if ( !ee->summary && *summary )
|
||||
save |= epg_episode_set_summary(ee, summary);
|
||||
if ( !ee->description && *desc )
|
||||
save |= epg_episode_set_description(ee, desc);
|
||||
if ( !LIST_FIRST(&ee->genre) && egl )
|
||||
save |= epg_episode_set_genre(ee, egl);
|
||||
save |= epg_episode_set_is_bw(ee, bw, mod);
|
||||
if ( *title )
|
||||
save |= epg_episode_set_title(ee, title, mod);
|
||||
if ( *summary )
|
||||
save |= epg_episode_set_summary(ee, summary, mod);
|
||||
if ( *desc )
|
||||
save |= epg_episode_set_description(ee, desc, mod);
|
||||
if ( egl )
|
||||
save |= epg_episode_set_genre(ee, egl, mod);
|
||||
#if TODO_ADD_EXTRA
|
||||
if ( extra )
|
||||
save |= epg_episode_set_extra(ee, extra);
|
||||
save |= epg_episode_set_extra(ee, extra, mod);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -349,6 +349,7 @@ static int _opentv_parse_event_section
|
|||
epg_episode_t *ee;
|
||||
epg_season_t *es;
|
||||
opentv_event_t ev;
|
||||
epggrab_module_t *src = (epggrab_module_t*)mod;
|
||||
|
||||
/* Channel */
|
||||
cid = ((int)buf[0] << 8) | buf[1];
|
||||
|
@ -398,27 +399,27 @@ static int _opentv_parse_event_section
|
|||
/* Update */
|
||||
if (ee) {
|
||||
if (!ev.title && ebc->episode)
|
||||
save |= epg_episode_set_title(ee, ebc->episode->title);
|
||||
save |= epg_episode_set_title(ee, ebc->episode->title, src);
|
||||
else if (ev.title)
|
||||
save |= epg_episode_set_title(ee, ev.title);
|
||||
save |= epg_episode_set_title(ee, ev.title, src);
|
||||
if (ev.summary)
|
||||
save |= epg_episode_set_summary(ee, ev.summary);
|
||||
save |= epg_episode_set_summary(ee, ev.summary, src);
|
||||
if (ev.desc)
|
||||
save |= epg_episode_set_description(ee, ev.desc);
|
||||
save |= epg_episode_set_description(ee, ev.desc, src);
|
||||
if (ev.cat) {
|
||||
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);
|
||||
save |= epg_episode_set_genre(ee, egl, src);
|
||||
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) {
|
||||
es = _opentv_find_season(mod, cid, ev.series);
|
||||
if (es) save |= epg_episode_set_season(ee, es);
|
||||
if (es) save |= epg_episode_set_season(ee, es, src);
|
||||
}
|
||||
|
||||
save |= epg_broadcast_set_episode(ebc, ee);
|
||||
save |= epg_broadcast_set_episode(ebc, ee, src);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -71,7 +71,8 @@ static epg_genre_list_t
|
|||
return egl;
|
||||
}
|
||||
|
||||
static int _pyepg_parse_channel ( htsmsg_t *data, epggrab_stats_t *stats )
|
||||
static int _pyepg_parse_channel
|
||||
( epggrab_module_t *mod, htsmsg_t *data, epggrab_stats_t *stats )
|
||||
{
|
||||
int save = 0;
|
||||
epggrab_channel_t *ch;
|
||||
|
@ -105,7 +106,8 @@ static int _pyepg_parse_channel ( htsmsg_t *data, epggrab_stats_t *stats )
|
|||
return save;
|
||||
}
|
||||
|
||||
static int _pyepg_parse_brand ( htsmsg_t *data, epggrab_stats_t *stats )
|
||||
static int _pyepg_parse_brand
|
||||
( epggrab_module_t *mod, htsmsg_t *data, epggrab_stats_t *stats )
|
||||
{
|
||||
int save = 0;
|
||||
htsmsg_t *attr, *tags;
|
||||
|
@ -126,24 +128,24 @@ static int _pyepg_parse_brand ( htsmsg_t *data, epggrab_stats_t *stats )
|
|||
|
||||
/* Set title */
|
||||
if ((str = htsmsg_xml_get_cdata_str(tags, "title"))) {
|
||||
save |= epg_brand_set_title(brand, str);
|
||||
save |= epg_brand_set_title(brand, str, mod);
|
||||
}
|
||||
|
||||
/* Set summary */
|
||||
if ((str = htsmsg_xml_get_cdata_str(tags, "summary"))) {
|
||||
save |= epg_brand_set_summary(brand, str);
|
||||
save |= epg_brand_set_summary(brand, str, mod);
|
||||
}
|
||||
|
||||
/* Set image */
|
||||
if ((str = htsmsg_xml_get_cdata_str(tags, "image"))) {
|
||||
save |= epg_brand_set_image(brand, str);
|
||||
save |= epg_brand_set_image(brand, str, mod);
|
||||
} else if ((str = htsmsg_xml_get_cdata_str(tags, "thumb"))) {
|
||||
save |= epg_brand_set_image(brand, str);
|
||||
save |= epg_brand_set_image(brand, str, mod);
|
||||
}
|
||||
|
||||
/* Set season count */
|
||||
if (htsmsg_xml_get_cdata_u32(tags, "series-count", &u32) == 0) {
|
||||
save |= epg_brand_set_season_count(brand, u32);
|
||||
save |= epg_brand_set_season_count(brand, u32, mod);
|
||||
}
|
||||
|
||||
if (save) stats->brands.modified++;
|
||||
|
@ -151,7 +153,8 @@ static int _pyepg_parse_brand ( htsmsg_t *data, epggrab_stats_t *stats )
|
|||
return save;
|
||||
}
|
||||
|
||||
static int _pyepg_parse_season ( htsmsg_t *data, epggrab_stats_t *stats )
|
||||
static int _pyepg_parse_season
|
||||
( epggrab_module_t *mod, htsmsg_t *data, epggrab_stats_t *stats )
|
||||
{
|
||||
int save = 0;
|
||||
htsmsg_t *attr, *tags;
|
||||
|
@ -174,30 +177,30 @@ static int _pyepg_parse_season ( htsmsg_t *data, epggrab_stats_t *stats )
|
|||
/* Set brand */
|
||||
if ((str = htsmsg_get_str(attr, "brand"))) {
|
||||
if ((brand = epg_brand_find_by_uri(str, 0, NULL))) {
|
||||
save |= epg_season_set_brand(season, brand, 1);
|
||||
save |= epg_season_set_brand(season, brand, mod);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set summary */
|
||||
if ((str = htsmsg_xml_get_cdata_str(tags, "summary"))) {
|
||||
save |= epg_season_set_summary(season, str);
|
||||
save |= epg_season_set_summary(season, str, mod);
|
||||
}
|
||||
|
||||
/* Set image */
|
||||
if ((str = htsmsg_xml_get_cdata_str(tags, "image"))) {
|
||||
save |= epg_season_set_image(season, str);
|
||||
save |= epg_season_set_image(season, str, mod);
|
||||
} else if ((str = htsmsg_xml_get_cdata_str(tags, "thumb"))) {
|
||||
save |= epg_season_set_image(season, str);
|
||||
save |= epg_season_set_image(season, str, mod);
|
||||
}
|
||||
|
||||
/* Set season number */
|
||||
if (htsmsg_xml_get_cdata_u32(tags, "number", &u32) == 0) {
|
||||
save |= epg_season_set_number(season, u32);
|
||||
save |= epg_season_set_number(season, u32, mod);
|
||||
}
|
||||
|
||||
/* Set episode count */
|
||||
if (htsmsg_xml_get_cdata_u32(tags, "episode-count", &u32) == 0) {
|
||||
save |= epg_season_set_episode_count(season, u32);
|
||||
save |= epg_season_set_episode_count(season, u32, mod);
|
||||
}
|
||||
|
||||
if(save) stats->seasons.modified++;
|
||||
|
@ -205,7 +208,8 @@ static int _pyepg_parse_season ( htsmsg_t *data, epggrab_stats_t *stats )
|
|||
return save;
|
||||
}
|
||||
|
||||
static int _pyepg_parse_episode ( htsmsg_t *data, epggrab_stats_t *stats )
|
||||
static int _pyepg_parse_episode
|
||||
( epggrab_module_t *mod, htsmsg_t *data, epggrab_stats_t *stats )
|
||||
{
|
||||
int save = 0;
|
||||
htsmsg_t *attr, *tags;
|
||||
|
@ -230,56 +234,56 @@ static int _pyepg_parse_episode ( htsmsg_t *data, epggrab_stats_t *stats )
|
|||
/* Set season */
|
||||
if ((str = htsmsg_get_str(attr, "series"))) {
|
||||
if ((season = epg_season_find_by_uri(str, 0, NULL))) {
|
||||
save |= epg_episode_set_season(episode, season);
|
||||
save |= epg_episode_set_season(episode, season, mod);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set brand */
|
||||
if ((str = htsmsg_get_str(attr, "brand"))) {
|
||||
if ((brand = epg_brand_find_by_uri(str, 0, NULL))) {
|
||||
save |= epg_episode_set_brand(episode, brand);
|
||||
save |= epg_episode_set_brand(episode, brand, mod);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set title/subtitle */
|
||||
if ((str = htsmsg_xml_get_cdata_str(tags, "title"))) {
|
||||
save |= epg_episode_set_title(episode, str);
|
||||
save |= epg_episode_set_title(episode, str, mod);
|
||||
}
|
||||
if ((str = htsmsg_xml_get_cdata_str(tags, "subtitle"))) {
|
||||
save |= epg_episode_set_subtitle(episode, str);
|
||||
save |= epg_episode_set_subtitle(episode, str, mod);
|
||||
}
|
||||
|
||||
/* Set summary */
|
||||
if ((str = htsmsg_xml_get_cdata_str(tags, "summary"))) {
|
||||
save |= epg_episode_set_summary(episode, str);
|
||||
save |= epg_episode_set_summary(episode, str, mod);
|
||||
}
|
||||
|
||||
/* Number */
|
||||
if (htsmsg_xml_get_cdata_u32(tags, "number", &u32) == 0) {
|
||||
save |= epg_episode_set_number(episode, u32);
|
||||
save |= epg_episode_set_number(episode, u32, mod);
|
||||
}
|
||||
if (!htsmsg_xml_get_cdata_u32(tags, "part-number", &pn)) {
|
||||
pc = 0;
|
||||
htsmsg_xml_get_cdata_u32(tags, "part-count", &pc);
|
||||
save |= epg_episode_set_part(episode, pn, pc);
|
||||
save |= epg_episode_set_part(episode, pn, pc, mod);
|
||||
}
|
||||
|
||||
/* Set image */
|
||||
if ((str = htsmsg_xml_get_cdata_str(tags, "image"))) {
|
||||
save |= epg_episode_set_image(episode, str);
|
||||
save |= epg_episode_set_image(episode, str, mod);
|
||||
} else if ((str = htsmsg_xml_get_cdata_str(tags, "thumb"))) {
|
||||
save |= epg_episode_set_image(episode, str);
|
||||
save |= epg_episode_set_image(episode, str, mod);
|
||||
}
|
||||
|
||||
/* Genre */
|
||||
if ((egl = _pyepg_parse_genre(tags))) {
|
||||
save |= epg_episode_set_genre(episode, egl);
|
||||
save |= epg_episode_set_genre(episode, egl, mod);
|
||||
epg_genre_list_destroy(egl);
|
||||
}
|
||||
|
||||
/* Content */
|
||||
if ((htsmsg_get_map(tags, "blackandwhite")))
|
||||
save |= epg_episode_set_is_bw(episode, 1);
|
||||
save |= epg_episode_set_is_bw(episode, 1, mod);
|
||||
|
||||
if (save) stats->episodes.modified++;
|
||||
|
||||
|
@ -287,7 +291,8 @@ static int _pyepg_parse_episode ( htsmsg_t *data, epggrab_stats_t *stats )
|
|||
}
|
||||
|
||||
static int _pyepg_parse_broadcast
|
||||
( htsmsg_t *data, channel_t *channel, epggrab_stats_t *stats )
|
||||
( epggrab_module_t *mod, htsmsg_t *data, channel_t *channel,
|
||||
epggrab_stats_t *stats )
|
||||
{
|
||||
int save = 0;
|
||||
htsmsg_t *attr, *tags;
|
||||
|
@ -320,31 +325,32 @@ static int _pyepg_parse_broadcast
|
|||
if ( save ) stats->broadcasts.created++;
|
||||
|
||||
/* Set episode */
|
||||
save |= epg_broadcast_set_episode(broadcast, episode);
|
||||
save |= epg_broadcast_set_episode(broadcast, episode, mod);
|
||||
|
||||
/* Quality */
|
||||
u32 = htsmsg_get_map(tags, "hd") ? 1 : 0;
|
||||
save |= epg_broadcast_set_is_hd(broadcast, u32);
|
||||
save |= epg_broadcast_set_is_hd(broadcast, u32, mod);
|
||||
u32 = htsmsg_get_map(tags, "widescreen") ? 1 : 0;
|
||||
save |= epg_broadcast_set_is_widescreen(broadcast, u32);
|
||||
save |= epg_broadcast_set_is_widescreen(broadcast, u32, mod);
|
||||
// TODO: lines, aspect
|
||||
|
||||
/* Accessibility */
|
||||
// Note: reuse XMLTV parse code as this is the same
|
||||
xmltv_parse_accessibility(broadcast, tags);
|
||||
xmltv_parse_accessibility(mod, broadcast, tags);
|
||||
|
||||
/* New/Repeat */
|
||||
u32 = htsmsg_get_map(tags, "new") || htsmsg_get_map(tags, "premiere");
|
||||
save |= epg_broadcast_set_is_new(broadcast, u32);
|
||||
save |= epg_broadcast_set_is_new(broadcast, u32, mod);
|
||||
u32 = htsmsg_get_map(tags, "repeat") ? 1 : 0;
|
||||
save |= epg_broadcast_set_is_repeat(broadcast, u32);
|
||||
save |= epg_broadcast_set_is_repeat(broadcast, u32, mod);
|
||||
|
||||
if (save) stats->broadcasts.modified++;
|
||||
|
||||
return save;
|
||||
}
|
||||
|
||||
static int _pyepg_parse_schedule ( htsmsg_t *data, epggrab_stats_t *stats )
|
||||
static int _pyepg_parse_schedule
|
||||
( epggrab_module_t *mod, htsmsg_t *data, epggrab_stats_t *stats )
|
||||
{
|
||||
int save = 0;
|
||||
htsmsg_t *attr, *tags;
|
||||
|
@ -362,7 +368,7 @@ static int _pyepg_parse_schedule ( htsmsg_t *data, epggrab_stats_t *stats )
|
|||
|
||||
HTSMSG_FOREACH(f, tags) {
|
||||
if (strcmp(f->hmf_name, "broadcast") == 0) {
|
||||
save |= _pyepg_parse_broadcast(htsmsg_get_map_by_field(f),
|
||||
save |= _pyepg_parse_broadcast(mod, htsmsg_get_map_by_field(f),
|
||||
ec->channel, stats);
|
||||
}
|
||||
}
|
||||
|
@ -370,7 +376,8 @@ static int _pyepg_parse_schedule ( htsmsg_t *data, epggrab_stats_t *stats )
|
|||
return save;
|
||||
}
|
||||
|
||||
static int _pyepg_parse_epg ( htsmsg_t *data, epggrab_stats_t *stats )
|
||||
static int _pyepg_parse_epg
|
||||
( epggrab_module_t *mod, htsmsg_t *data, epggrab_stats_t *stats )
|
||||
{
|
||||
int save = 0;
|
||||
htsmsg_t *tags;
|
||||
|
@ -380,15 +387,15 @@ static int _pyepg_parse_epg ( htsmsg_t *data, epggrab_stats_t *stats )
|
|||
|
||||
HTSMSG_FOREACH(f, tags) {
|
||||
if (strcmp(f->hmf_name, "channel") == 0 ) {
|
||||
save |= _pyepg_parse_channel(htsmsg_get_map_by_field(f), stats);
|
||||
save |= _pyepg_parse_channel(mod, htsmsg_get_map_by_field(f), stats);
|
||||
} else if (strcmp(f->hmf_name, "brand") == 0 ) {
|
||||
save |= _pyepg_parse_brand(htsmsg_get_map_by_field(f), stats);
|
||||
save |= _pyepg_parse_brand(mod, htsmsg_get_map_by_field(f), stats);
|
||||
} else if (strcmp(f->hmf_name, "series") == 0 ) {
|
||||
save |= _pyepg_parse_season(htsmsg_get_map_by_field(f), stats);
|
||||
save |= _pyepg_parse_season(mod, htsmsg_get_map_by_field(f), stats);
|
||||
} else if (strcmp(f->hmf_name, "episode") == 0 ) {
|
||||
save |= _pyepg_parse_episode(htsmsg_get_map_by_field(f), stats);
|
||||
save |= _pyepg_parse_episode(mod, htsmsg_get_map_by_field(f), stats);
|
||||
} else if (strcmp(f->hmf_name, "schedule") == 0 ) {
|
||||
save |= _pyepg_parse_schedule(htsmsg_get_map_by_field(f), stats);
|
||||
save |= _pyepg_parse_schedule(mod, htsmsg_get_map_by_field(f), stats);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -404,7 +411,7 @@ static int _pyepg_parse
|
|||
|
||||
/* PyEPG format */
|
||||
if ((epg = htsmsg_get_map(tags, "epg")) != NULL)
|
||||
return _pyepg_parse_epg(epg, stats);
|
||||
return _pyepg_parse_epg(mod, epg, stats);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -214,7 +214,9 @@ get_episode_info
|
|||
* job
|
||||
*/
|
||||
static int
|
||||
parse_vid_quality ( epg_broadcast_t *ebc, epg_episode_t *ee, htsmsg_t *m )
|
||||
parse_vid_quality
|
||||
( epggrab_module_t *mod, epg_broadcast_t *ebc, epg_episode_t *ee,
|
||||
htsmsg_t *m )
|
||||
{
|
||||
int save = 0;
|
||||
int hd = 0, lines = 0, aspect = 0;
|
||||
|
@ -222,7 +224,7 @@ parse_vid_quality ( epg_broadcast_t *ebc, epg_episode_t *ee, htsmsg_t *m )
|
|||
if (!ebc || !m) return 0;
|
||||
|
||||
if ((str = htsmsg_xml_get_cdata_str(m, "colour")))
|
||||
save |= epg_episode_set_is_bw(ee, strcmp(str, "no") ? 0 : 1);
|
||||
save |= epg_episode_set_is_bw(ee, strcmp(str, "no") ? 0 : 1, mod);
|
||||
if ((str = htsmsg_xml_get_cdata_str(m, "quality"))) {
|
||||
if (strstr(str, "HD")) {
|
||||
hd = 1;
|
||||
|
@ -248,13 +250,13 @@ parse_vid_quality ( epg_broadcast_t *ebc, epg_episode_t *ee, htsmsg_t *m )
|
|||
aspect = (100 * w) / h;
|
||||
}
|
||||
}
|
||||
save |= epg_broadcast_set_is_hd(ebc, hd);
|
||||
save |= epg_broadcast_set_is_hd(ebc, hd, mod);
|
||||
if (aspect) {
|
||||
save |= epg_broadcast_set_is_widescreen(ebc, hd || aspect > 137);
|
||||
save |= epg_broadcast_set_aspect(ebc, aspect);
|
||||
save |= epg_broadcast_set_is_widescreen(ebc, hd || aspect > 137, mod);
|
||||
save |= epg_broadcast_set_aspect(ebc, aspect, mod);
|
||||
}
|
||||
if (lines)
|
||||
save |= epg_broadcast_set_lines(ebc, lines);
|
||||
save |= epg_broadcast_set_lines(ebc, lines, mod);
|
||||
|
||||
return save;
|
||||
}
|
||||
|
@ -263,7 +265,8 @@ parse_vid_quality ( epg_broadcast_t *ebc, epg_episode_t *ee, htsmsg_t *m )
|
|||
* Parse accessibility data
|
||||
*/
|
||||
int
|
||||
xmltv_parse_accessibility ( epg_broadcast_t *ebc, htsmsg_t *m )
|
||||
xmltv_parse_accessibility
|
||||
( epggrab_module_t *mod, epg_broadcast_t *ebc, htsmsg_t *m )
|
||||
{
|
||||
int save = 0;
|
||||
htsmsg_t *tag;
|
||||
|
@ -275,12 +278,12 @@ xmltv_parse_accessibility ( epg_broadcast_t *ebc, htsmsg_t *m )
|
|||
if ((tag = htsmsg_get_map_by_field(f))) {
|
||||
str = htsmsg_xml_get_attr_str(tag, "type");
|
||||
if (str && !strcmp(str, "teletext"))
|
||||
save |= epg_broadcast_set_is_subtitled(ebc, 1);
|
||||
save |= epg_broadcast_set_is_subtitled(ebc, 1, mod);
|
||||
else if (str && !strcmp(str, "deaf-signed"))
|
||||
save |= epg_broadcast_set_is_deafsigned(ebc, 1);
|
||||
save |= epg_broadcast_set_is_deafsigned(ebc, 1, mod);
|
||||
}
|
||||
} else if (!strcmp(f->hmf_name, "audio-described")) {
|
||||
save |= epg_broadcast_set_is_audio_desc(ebc, 1);
|
||||
save |= epg_broadcast_set_is_audio_desc(ebc, 1, mod);
|
||||
}
|
||||
}
|
||||
return save;
|
||||
|
@ -307,9 +310,9 @@ static epg_genre_list_t
|
|||
/**
|
||||
* Parse tags inside of a programme
|
||||
*/
|
||||
static int
|
||||
_xmltv_parse_programme_tags(channel_t *ch, htsmsg_t *tags,
|
||||
time_t start, time_t stop, epggrab_stats_t *stats)
|
||||
static int _xmltv_parse_programme_tags
|
||||
(epggrab_module_t *mod, channel_t *ch, htsmsg_t *tags,
|
||||
time_t start, time_t stop, epggrab_stats_t *stats)
|
||||
{
|
||||
int save = 0, save2 = 0;
|
||||
epg_episode_t *ee;
|
||||
|
@ -325,24 +328,33 @@ _xmltv_parse_programme_tags(channel_t *ch, htsmsg_t *tags,
|
|||
/* Ignore */
|
||||
if (!title) return 0;
|
||||
|
||||
/* Build episode */
|
||||
uri = md5sum(desc ?: title);
|
||||
/*
|
||||
* Episode
|
||||
*/
|
||||
|
||||
uri = epg_hash(title, NULL, desc);
|
||||
ee = epg_episode_find_by_uri(uri, 1, &save);
|
||||
free(uri);
|
||||
if (!ee) return 0;
|
||||
stats->episodes.total++;
|
||||
if (save) stats->episodes.created++;
|
||||
|
||||
if (title) save |= epg_episode_set_title(ee, title);
|
||||
if (desc) save |= epg_episode_set_description(ee, desc);
|
||||
if (title)
|
||||
save |= epg_episode_set_title(ee, title, mod);
|
||||
if (desc)
|
||||
save |= epg_episode_set_description(ee, desc, mod);
|
||||
if ((egl = _xmltv_parse_categories(tags))) {
|
||||
save |= epg_episode_set_genre(ee, egl);
|
||||
save |= epg_episode_set_genre(ee, egl, mod);
|
||||
epg_genre_list_destroy(egl);
|
||||
}
|
||||
if (pn) save |= epg_episode_set_part(ee, pn, pc);
|
||||
if (en) save |= epg_episode_set_number(ee, en);
|
||||
if (pn) save |= epg_episode_set_part(ee, pn, pc, mod);
|
||||
if (en) save |= epg_episode_set_number(ee, en, mod);
|
||||
if (save) stats->episodes.modified++;
|
||||
|
||||
/*
|
||||
* Broadcast
|
||||
*/
|
||||
|
||||
// TODO: need to handle certification and ratings
|
||||
// TODO: need to handle season numbering!
|
||||
// TODO: need to handle onscreen numbering
|
||||
|
@ -353,20 +365,20 @@ _xmltv_parse_programme_tags(channel_t *ch, htsmsg_t *tags,
|
|||
if ( ebc ) {
|
||||
stats->broadcasts.total++;
|
||||
if (save2) stats->broadcasts.created++;
|
||||
save2 |= epg_broadcast_set_episode(ebc, ee);
|
||||
save2 |= epg_broadcast_set_episode(ebc, ee, mod);
|
||||
|
||||
/* Quality metadata */
|
||||
save2 |= parse_vid_quality(ebc, ee, htsmsg_get_map(tags, "video"));
|
||||
save2 |= parse_vid_quality(mod, ebc, ee, htsmsg_get_map(tags, "video"));
|
||||
|
||||
/* Accessibility */
|
||||
save2 |= xmltv_parse_accessibility(ebc, tags);
|
||||
save2 |= xmltv_parse_accessibility(mod, ebc, tags);
|
||||
|
||||
/* Misc */
|
||||
if (htsmsg_get_map(tags, "previously-shown"))
|
||||
save |= epg_broadcast_set_is_repeat(ebc, 1);
|
||||
save |= epg_broadcast_set_is_repeat(ebc, 1, mod);
|
||||
else if (htsmsg_get_map(tags, "premiere") ||
|
||||
htsmsg_get_map(tags, "new"))
|
||||
save |= epg_broadcast_set_is_new(ebc, 1);
|
||||
save |= epg_broadcast_set_is_new(ebc, 1, mod);
|
||||
|
||||
/* Stats */
|
||||
if (save2) stats->broadcasts.modified++;
|
||||
|
@ -378,8 +390,8 @@ _xmltv_parse_programme_tags(channel_t *ch, htsmsg_t *tags,
|
|||
/**
|
||||
* Parse a <programme> tag from xmltv
|
||||
*/
|
||||
static int
|
||||
_xmltv_parse_programme(htsmsg_t *body, epggrab_stats_t *stats)
|
||||
static int _xmltv_parse_programme
|
||||
(epggrab_module_t *mod, htsmsg_t *body, epggrab_stats_t *stats)
|
||||
{
|
||||
int save = 0;
|
||||
htsmsg_t *attribs, *tags;
|
||||
|
@ -397,19 +409,20 @@ _xmltv_parse_programme(htsmsg_t *body, epggrab_stats_t *stats)
|
|||
if((s = htsmsg_get_str(attribs, "start")) == NULL) return 0;
|
||||
start = _xmltv_str2time(s);
|
||||
if((s = htsmsg_get_str(attribs, "stop")) == NULL) return 0;
|
||||
stop = _xmltv_str2time(s);
|
||||
stop = _xmltv_str2time(s);
|
||||
|
||||
if(stop <= start || stop < dispatch_clock) return 0;
|
||||
|
||||
save |= _xmltv_parse_programme_tags(ch->channel, tags, start, stop, stats);
|
||||
save |= _xmltv_parse_programme_tags(mod, ch->channel, tags,
|
||||
start, stop, stats);
|
||||
return save;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a <channel> tag from xmltv
|
||||
*/
|
||||
static int
|
||||
_xmltv_parse_channel(htsmsg_t *body, epggrab_stats_t *stats)
|
||||
static int _xmltv_parse_channel
|
||||
(epggrab_module_t *mod, htsmsg_t *body, epggrab_stats_t *stats)
|
||||
{
|
||||
int save =0;
|
||||
htsmsg_t *attribs, *tags, *subtag;
|
||||
|
@ -444,8 +457,8 @@ _xmltv_parse_channel(htsmsg_t *body, epggrab_stats_t *stats)
|
|||
/**
|
||||
*
|
||||
*/
|
||||
static int
|
||||
_xmltv_parse_tv(htsmsg_t *body, epggrab_stats_t *stats)
|
||||
static int _xmltv_parse_tv
|
||||
(epggrab_module_t *mod, htsmsg_t *body, epggrab_stats_t *stats)
|
||||
{
|
||||
int save = 0;
|
||||
htsmsg_t *tags;
|
||||
|
@ -456,9 +469,9 @@ _xmltv_parse_tv(htsmsg_t *body, epggrab_stats_t *stats)
|
|||
|
||||
HTSMSG_FOREACH(f, tags) {
|
||||
if(!strcmp(f->hmf_name, "channel")) {
|
||||
save |= _xmltv_parse_channel(htsmsg_get_map_by_field(f), stats);
|
||||
save |= _xmltv_parse_channel(mod, htsmsg_get_map_by_field(f), stats);
|
||||
} else if(!strcmp(f->hmf_name, "programme")) {
|
||||
save |= _xmltv_parse_programme(htsmsg_get_map_by_field(f), stats);
|
||||
save |= _xmltv_parse_programme(mod, htsmsg_get_map_by_field(f), stats);
|
||||
}
|
||||
}
|
||||
return save;
|
||||
|
@ -475,7 +488,7 @@ static int _xmltv_parse
|
|||
if((tv = htsmsg_get_map(tags, "tv")) == NULL)
|
||||
return 0;
|
||||
|
||||
return _xmltv_parse_tv(tv, stats);
|
||||
return _xmltv_parse_tv(mod, tv, stats);
|
||||
}
|
||||
|
||||
/* ************************************************************************
|
||||
|
|
|
@ -155,6 +155,7 @@ void xmltv_init ( void );
|
|||
void xmltv_load ( void );
|
||||
|
||||
/* Note: this is reused by pyepg since they share a common format */
|
||||
int xmltv_parse_accessibility ( epg_broadcast_t *ebc, htsmsg_t *m );
|
||||
int xmltv_parse_accessibility
|
||||
( epggrab_module_t *mod, epg_broadcast_t *ebc, htsmsg_t *m );
|
||||
|
||||
#endif /* __EPGGRAB_PRIVATE_H__ */
|
||||
|
|
Loading…
Add table
Reference in a new issue