Filled out a bit more of the EPG metadata parsing in pyepg and fixed a problem with is_bw being in the wrong object.
This commit is contained in:
parent
32dd556cc8
commit
ae0cde8b50
5 changed files with 48 additions and 24 deletions
20
src/epg.c
20
src/epg.c
|
@ -1082,6 +1082,12 @@ int epg_episode_set_genre_str ( epg_episode_t *ee, const char **gstr )
|
|||
return epg_episode_set_genre(ee, genre, gcnt);
|
||||
}
|
||||
|
||||
int epg_episode_set_is_bw ( epg_episode_t *e, uint8_t bw )
|
||||
{
|
||||
if (!e) return 0;
|
||||
return _epg_object_set_u8(e, &e->is_bw, bw);
|
||||
}
|
||||
|
||||
static void _epg_episode_add_broadcast
|
||||
( epg_episode_t *episode, epg_broadcast_t *broadcast )
|
||||
{
|
||||
|
@ -1182,6 +1188,8 @@ htsmsg_t *epg_episode_serialize ( epg_episode_t *episode )
|
|||
htsmsg_add_str(m, "brand", episode->brand->uri);
|
||||
if (episode->season)
|
||||
htsmsg_add_str(m, "season", episode->season->uri);
|
||||
if (episode->is_bw)
|
||||
htsmsg_add_u32(m, "is_bw", 1);
|
||||
return m;
|
||||
}
|
||||
|
||||
|
@ -1226,6 +1234,8 @@ epg_episode_t *epg_episode_deserialize ( htsmsg_t *m, int create, int *save )
|
|||
if ( (eb = epg_brand_find_by_uri(str, 0, NULL)) )
|
||||
*save |= epg_episode_set_brand(ee, eb);
|
||||
|
||||
*save |= epg_episode_set_is_bw(ee, htsmsg_get_u32_or_default(m , "is_bw", 0));
|
||||
|
||||
return ee;
|
||||
}
|
||||
|
||||
|
@ -1461,12 +1471,6 @@ int epg_broadcast_set_is_hd ( epg_broadcast_t *b, uint8_t hd )
|
|||
return _epg_object_set_u8(b, &b->is_hd, hd);
|
||||
}
|
||||
|
||||
int epg_broadcast_set_is_bw ( epg_broadcast_t *b, uint8_t bw )
|
||||
{
|
||||
if (!b) return 0;
|
||||
return _epg_object_set_u8(b, &b->is_bw, bw);
|
||||
}
|
||||
|
||||
int epg_broadcast_set_lines ( epg_broadcast_t *b, uint16_t lines )
|
||||
{
|
||||
if (!b) return 0;
|
||||
|
@ -1532,8 +1536,6 @@ htsmsg_t *epg_broadcast_serialize ( epg_broadcast_t *broadcast )
|
|||
htsmsg_add_u32(m, "is_widescreen", 1);
|
||||
if (broadcast->is_hd)
|
||||
htsmsg_add_u32(m, "is_hd", 1);
|
||||
if (broadcast->is_bw)
|
||||
htsmsg_add_u32(m, "is_widescreen", 1);
|
||||
if (broadcast->lines)
|
||||
htsmsg_add_u32(m, "lines", broadcast->lines);
|
||||
if (broadcast->aspect)
|
||||
|
@ -1589,8 +1591,6 @@ epg_broadcast_t *epg_broadcast_deserialize
|
|||
(*ebc)->is_widescreen = 1;
|
||||
if (!htsmsg_get_u32(m, "is_hd", &u32))
|
||||
(*ebc)->is_hd = 1;
|
||||
if (!htsmsg_get_u32(m , "is_bw", &u32))
|
||||
(*ebc)->is_bw = 1;
|
||||
if (!htsmsg_get_u32(m, "lines", &u32))
|
||||
(*ebc)->lines = u32;
|
||||
if (!htsmsg_get_u32(m, "aspect", &u32))
|
||||
|
|
|
@ -205,7 +205,9 @@ struct epg_episode
|
|||
// Note: do not use epnum directly! use the accessor routine
|
||||
char *image; ///< Episode image
|
||||
|
||||
uint8_t is_bw; ///< Is black and white
|
||||
// TODO: certification and rating
|
||||
// TODO: film/year
|
||||
|
||||
LIST_ENTRY(epg_episode) blink; ///< Brand link
|
||||
LIST_ENTRY(epg_episode) slink; ///< Season link
|
||||
|
@ -246,6 +248,8 @@ int epg_episode_set_genre_str ( epg_episode_t *e, const char **s )
|
|||
__attribute__((warn_unused_result));
|
||||
int epg_episode_set_image ( epg_episode_t *e, const char *i )
|
||||
__attribute__((warn_unused_result));
|
||||
int epg_episode_set_is_bw ( epg_episode_t *b, uint8_t bw )
|
||||
__attribute__((warn_unused_result));
|
||||
|
||||
// Note: this does NOT strdup the text field
|
||||
void epg_episode_get_epnum
|
||||
|
@ -293,7 +297,6 @@ struct epg_broadcast
|
|||
/* Some quality info */
|
||||
uint8_t is_widescreen; ///< Is widescreen
|
||||
uint8_t is_hd; ///< Is HD
|
||||
uint8_t is_bw; ///< Is black and white
|
||||
uint16_t lines; ///< Lines in image (quality)
|
||||
uint16_t aspect; ///< Aspect ratio (*100)
|
||||
|
||||
|
@ -326,8 +329,6 @@ int epg_broadcast_set_is_widescreen ( epg_broadcast_t *b, uint8_t ws )
|
|||
__attribute__((warn_unused_result));
|
||||
int epg_broadcast_set_is_hd ( epg_broadcast_t *b, uint8_t hd )
|
||||
__attribute__((warn_unused_result));
|
||||
int epg_broadcast_set_is_bw ( epg_broadcast_t *b, uint8_t bw )
|
||||
__attribute__((warn_unused_result));
|
||||
int epg_broadcast_set_lines ( epg_broadcast_t *b, uint16_t lines )
|
||||
__attribute__((warn_unused_result));
|
||||
int epg_broadcast_set_aspect ( epg_broadcast_t *b, uint16_t aspect )
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "spawn.h"
|
||||
#include "epg.h"
|
||||
#include "epggrab/pyepg.h"
|
||||
#include "epggrab/xmltv.h"
|
||||
#include "channels.h"
|
||||
|
||||
static epggrab_channel_tree_t _pyepg_channels;
|
||||
|
@ -293,7 +294,9 @@ static int _pyepg_parse_episode ( htsmsg_t *data, epggrab_stats_t *stats )
|
|||
save |= epg_episode_set_genre(episode, genre, genre_cnt);
|
||||
}
|
||||
|
||||
/* TODO: extra metadata */
|
||||
/* Content */
|
||||
if ((htsmsg_get_map(tags, "blackandwhite")))
|
||||
save |= epg_episode_set_is_bw(episode, 1);
|
||||
|
||||
if (save) stats->episodes.modified++;
|
||||
|
||||
|
@ -304,11 +307,12 @@ static int _pyepg_parse_broadcast
|
|||
( htsmsg_t *data, channel_t *channel, epggrab_stats_t *stats )
|
||||
{
|
||||
int save = 0;
|
||||
htsmsg_t *attr;//, *tags;
|
||||
htsmsg_t *attr, *tags;
|
||||
epg_episode_t *episode;
|
||||
epg_broadcast_t *broadcast;
|
||||
const char *id, *start, *stop;
|
||||
time_t tm_start, tm_stop;
|
||||
uint32_t u32;
|
||||
|
||||
if ( data == NULL || channel == NULL ) return 0;
|
||||
|
||||
|
@ -316,6 +320,7 @@ static int _pyepg_parse_broadcast
|
|||
if ((id = htsmsg_get_str(attr, "episode")) == NULL) return 0;
|
||||
if ((start = htsmsg_get_str(attr, "start")) == NULL ) return 0;
|
||||
if ((stop = htsmsg_get_str(attr, "stop")) == NULL ) return 0;
|
||||
if ((tags = htsmsg_get_map(data, "tags")) == NULL) return 0;
|
||||
|
||||
/* Find episode */
|
||||
if ((episode = epg_episode_find_by_uri(id, 1, &save)) == NULL) return 0;
|
||||
|
@ -333,8 +338,23 @@ static int _pyepg_parse_broadcast
|
|||
/* Set episode */
|
||||
save |= epg_broadcast_set_episode(broadcast, episode);
|
||||
|
||||
/* TODO: extra metadata */
|
||||
|
||||
/* Quality */
|
||||
u32 = htsmsg_get_map(tags, "hd") ? 1 : 0;
|
||||
save |= epg_broadcast_set_is_hd(broadcast, u32);
|
||||
u32 = htsmsg_get_map(tags, "widescreen") ? 1 : 0;
|
||||
save |= epg_broadcast_set_is_widescreen(broadcast, u32);
|
||||
// TODO: lines, aspect
|
||||
|
||||
/* Accessibility */
|
||||
// Note: reuse XMLTV parse code as this is the same
|
||||
xmltv_parse_accessibility(broadcast, tags);
|
||||
|
||||
/* New/Repeat */
|
||||
u32 = htsmsg_get_map(tags, "new") || htsmsg_get_map(tags, "premiere");
|
||||
save |= epg_broadcast_set_is_new(broadcast, u32);
|
||||
u32 = htsmsg_get_map(tags, "repeat") ? 1 : 0;
|
||||
save |= epg_broadcast_set_is_repeat(broadcast, u32);
|
||||
|
||||
if (save) stats->broadcasts.modified++;
|
||||
|
||||
return save;
|
||||
|
|
|
@ -211,7 +211,7 @@ get_episode_info
|
|||
* job
|
||||
*/
|
||||
static int
|
||||
parse_vid_quality ( epg_broadcast_t *ebc, htsmsg_t *m )
|
||||
parse_vid_quality ( epg_broadcast_t *ebc, epg_episode_t *ee, htsmsg_t *m )
|
||||
{
|
||||
int save = 0;
|
||||
int hd = 0, lines = 0, aspect = 0;
|
||||
|
@ -219,7 +219,7 @@ parse_vid_quality ( epg_broadcast_t *ebc, htsmsg_t *m )
|
|||
if (!ebc || !m) return 0;
|
||||
|
||||
if ((str = htsmsg_xml_get_cdata_str(m, "colour")))
|
||||
save |= epg_broadcast_set_is_bw(ebc, strcmp(str, "no") ? 0 : 1);
|
||||
save |= epg_episode_set_is_bw(ee, strcmp(str, "no") ? 0 : 1);
|
||||
if ((str = htsmsg_xml_get_cdata_str(m, "quality"))) {
|
||||
if (strstr(str, "HD")) {
|
||||
hd = 1;
|
||||
|
@ -259,8 +259,8 @@ parse_vid_quality ( epg_broadcast_t *ebc, htsmsg_t *m )
|
|||
/*
|
||||
* Parse accessibility data
|
||||
*/
|
||||
static int
|
||||
parse_accessibility ( epg_broadcast_t *ebc, htsmsg_t *m )
|
||||
int
|
||||
xmltv_parse_accessibility ( epg_broadcast_t *ebc, htsmsg_t *m )
|
||||
{
|
||||
int save = 0;
|
||||
htsmsg_t *tag;
|
||||
|
@ -328,16 +328,16 @@ _xmltv_parse_programme_tags(channel_t *ch, htsmsg_t *tags,
|
|||
|
||||
/* Create/Find broadcast */
|
||||
ebc = epg_broadcast_find_by_time(ch, start, stop, 1, &save2);
|
||||
if ( ebc != NULL ) {
|
||||
if ( ebc ) {
|
||||
stats->broadcasts.total++;
|
||||
if (save2) stats->broadcasts.created++;
|
||||
save2 |= epg_broadcast_set_episode(ebc, ee);
|
||||
|
||||
/* Quality metadata */
|
||||
save2 |= parse_vid_quality(ebc, htsmsg_get_map(tags, "video"));
|
||||
save2 |= parse_vid_quality(ebc, ee, htsmsg_get_map(tags, "video"));
|
||||
|
||||
/* Accessibility */
|
||||
save2 |= parse_accessibility(ebc, tags);
|
||||
save2 |= xmltv_parse_accessibility(ebc, tags);
|
||||
|
||||
/* Misc */
|
||||
if (htsmsg_get_map(tags, "previously-shown"))
|
||||
|
|
|
@ -25,4 +25,7 @@
|
|||
void xmltv_init ( epggrab_module_list_t *list );
|
||||
void xmltv_load ( void );
|
||||
|
||||
// reused by pyepg
|
||||
int xmltv_parse_accessibility ( epg_broadcast_t *ebc, htsmsg_t *m );
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue