From d42d68198c1e40b5b8431ba28531adada6ad5fdd Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 8 Feb 2010 17:29:19 +0000 Subject: [PATCH] more improvements for extended_event_descriptor --- src/dvb/dvb_tables.c | 7 ++++++- src/epg.c | 48 ++++++++++++++++++++++++++++++++++++++++---- src/epg.h | 5 ++++- 3 files changed, 54 insertions(+), 6 deletions(-) diff --git a/src/dvb/dvb_tables.c b/src/dvb/dvb_tables.c index 89a41e8c..033b9b42 100644 --- a/src/dvb/dvb_tables.c +++ b/src/dvb/dvb_tables.c @@ -611,7 +611,12 @@ dvb_eit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, int desc_number = (ptr[0] & 0xF0) >> 4; //int desc_last = (ptr[0] & 0x0F); - epg_event_set_ext_text(e, desc_number, exttext); + if (strlen(extdesc)) + epg_event_set_ext_desc(e, desc_number, extdesc); + if (strlen(extitem)) + epg_event_set_ext_item(e, desc_number, extitem); + if (strlen(exttext)) + epg_event_set_ext_text(e, desc_number, exttext); } break; default: diff --git a/src/epg.c b/src/epg.c index 2061956d..68ef8c4b 100644 --- a/src/epg.c +++ b/src/epg.c @@ -153,12 +153,52 @@ epg_event_set_desc(event_t *e, const char *desc) /** * */ -void epg_event_set_ext_desc(event_t *e, const char *desc) +void epg_event_set_ext_desc(event_t *e, int ext_dn, const char *desc) { - if(e->e_ext_desc != NULL && !strcmp(e->e_ext_desc, desc)) + if (e->e_ext_desc == NULL && ext_dn != 0) return; - free(e->e_ext_desc); - e->e_ext_desc = strdup(desc); + if (e->e_ext_desc != NULL && strstr(e->e_ext_desc, desc)) + return; + + int len = strlen(desc) + ( e->e_ext_desc ? strlen(e->e_ext_desc) : 0) + 1; + char *tmp = (char*)malloc(len); + + if (e->e_ext_desc) + { + strcpy(tmp, e->e_ext_desc); + strcat(tmp, desc); + free(e->e_ext_desc); + } + else + strcpy(tmp, desc); + + e->e_ext_desc = tmp; + epg_event_changed(e); +} + +/** + * + */ +void epg_event_set_ext_item(event_t *e, int ext_dn, const char *item) +{ + if (e->e_ext_item == NULL && ext_dn != 0) + return; + if (e->e_ext_item != NULL && strstr(e->e_ext_item, item)) + return; + + int len = strlen(item) + ( e->e_ext_item ? strlen(e->e_ext_item) : 0) + 1; + char *tmp = (char*)malloc(len); + + if (e->e_ext_item) + { + strcpy(tmp, e->e_ext_item); + strcat(tmp, item); + free(e->e_ext_item); + } + else + strcpy(tmp, item); + + e->e_ext_item = tmp; epg_event_changed(e); } diff --git a/src/epg.h b/src/epg.h index 9849645a..3946d5ba 100644 --- a/src/epg.h +++ b/src/epg.h @@ -62,6 +62,7 @@ typedef struct event { char *e_title; /* UTF-8 encoded */ char *e_desc; /* UTF-8 encoded */ char *e_ext_desc;/* UTF-8 encoded (from extended descriptor) */ + char *e_ext_item;/* UTF-8 encoded (from extended descriptor) */ char *e_ext_text;/* UTF-8 encoded (from extended descriptor) */ int e_dvb_id; @@ -78,7 +79,9 @@ void epg_event_set_title(event_t *e, const char *title); void epg_event_set_desc(event_t *e, const char *desc); -void epg_event_set_ext_desc(event_t *e, const char *desc); +void epg_event_set_ext_desc(event_t *e, int ext_dn, const char *desc); + +void epg_event_set_ext_item(event_t *e, int ext_dn, const char *item); void epg_event_set_ext_text(event_t *e, int ext_dn, const char *text);