From 407683324d3f62a2c75b9869766a765c2440048f Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Wed, 11 Jul 2012 10:43:14 +0100 Subject: [PATCH] Updated grabber modules to new EPG api. --- src/epggrab/module/eit.c | 36 +++++++-------- src/epggrab/module/opentv.c | 15 +++--- src/epggrab/module/pyepg.c | 91 ++++++++++++++++++++----------------- src/epggrab/module/xmltv.c | 85 +++++++++++++++++++--------------- src/epggrab/private.h | 3 +- 5 files changed, 126 insertions(+), 104 deletions(-) diff --git a/src/epggrab/module/eit.c b/src/epggrab/module/eit.c index 428664ab..9bdc9e43 100644 --- a/src/epggrab/module/eit.c +++ b/src/epggrab/module/eit.c @@ -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 } diff --git a/src/epggrab/module/opentv.c b/src/epggrab/module/opentv.c index 18c77f7c..a3cf12bf 100644 --- a/src/epggrab/module/opentv.c +++ b/src/epggrab/module/opentv.c @@ -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); } } diff --git a/src/epggrab/module/pyepg.c b/src/epggrab/module/pyepg.c index 3f0679a4..6af08edd 100644 --- a/src/epggrab/module/pyepg.c +++ b/src/epggrab/module/pyepg.c @@ -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; } diff --git a/src/epggrab/module/xmltv.c b/src/epggrab/module/xmltv.c index 774ed73d..983f78bb 100644 --- a/src/epggrab/module/xmltv.c +++ b/src/epggrab/module/xmltv.c @@ -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 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 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); } /* ************************************************************************ diff --git a/src/epggrab/private.h b/src/epggrab/private.h index e1abe0da..6c453753 100644 --- a/src/epggrab/private.h +++ b/src/epggrab/private.h @@ -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__ */