diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2010-01-03 12:20:37 +0100 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2010-01-03 12:20:37 +0100 |
commit | 56627cd12d9e01379d9104300fec837a4db8df48 (patch) | |
tree | 3a3029da935dfef7b4edee8be35c11cd83e281d5 /epg.c | |
parent | 4b5f232e59988e5c043b08210c3940a5bf82b360 (diff) | |
download | vdr-56627cd12d9e01379d9104300fec837a4db8df48.tar.gz vdr-56627cd12d9e01379d9104300fec837a4db8df48.tar.bz2 |
Implemented handling the "Content Descriptor"
Diffstat (limited to 'epg.c')
-rw-r--r-- | epg.c | 171 |
1 files changed, 170 insertions, 1 deletions
@@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>. * - * $Id: epg.c 2.2 2009/12/05 16:17:08 kls Exp $ + * $Id: epg.c 2.3 2010/01/03 11:28:38 kls Exp $ */ #include "epg.h" @@ -112,6 +112,7 @@ cEvent::cEvent(tEventID EventID) shortText = NULL; description = NULL; components = NULL; + memset(contents, 0, sizeof(contents)); startTime = 0; duration = 0; vps = 0; @@ -186,6 +187,12 @@ void cEvent::SetComponents(cComponents *Components) components = Components; } +void cEvent::SetContents(uchar *Contents) +{ + for (int i = 0; i < MAXEVCONTENTS; i++) + contents[i] = Contents[i]; +} + void cEvent::SetStartTime(time_t StartTime) { if (startTime != StartTime) { @@ -234,6 +241,148 @@ bool cEvent::IsRunning(bool OrAboutToStart) const return runningStatus >= (OrAboutToStart ? SI::RunningStatusStartsInAFewSeconds : SI::RunningStatusPausing); } +const char *cEvent::ContentToString(uchar Content) +{ + switch (Content & 0xF0) { + case EVCONTENTMASK_MOVIEDRAMA: + switch (Content & 0x0F) { + default: + case 0x00: return tr("Content$Movie/Drama"); + case 0x01: return tr("Content$Detective/Thriller"); + case 0x02: return tr("Content$Adventure/Western/War"); + case 0x03: return tr("Content$Science Fiction/Fantasy/Horror"); + case 0x04: return tr("Content$Comedy"); + case 0x05: return tr("Content$Soap/Melodrama/Folkloric"); + case 0x06: return tr("Content$Romance"); + case 0x07: return tr("Content$Serious/Classical/Religious/Historical Movie/Drama"); + case 0x08: return tr("Content$Adult Movie/Drama"); + } + break; + case EVCONTENTMASK_NEWSCURRENTAFFAIRS: + switch (Content & 0x0F) { + default: + case 0x00: return tr("Content$News/Current Affairs"); + case 0x01: return tr("Content$News/Weather Report"); + case 0x02: return tr("Content$News Magazine"); + case 0x03: return tr("Content$Documentary"); + case 0x04: return tr("Content$Discussion/Inverview/Debate"); + } + break; + case EVCONTENTMASK_SHOW: + switch (Content & 0x0F) { + default: + case 0x00: return tr("Content$Show/Game Show"); + case 0x01: return tr("Content$Game Show/Quiz/Contest"); + case 0x02: return tr("Content$Variety Show"); + case 0x03: return tr("Content$Talk Show"); + } + break; + case EVCONTENTMASK_SPORTS: + switch (Content & 0x0F) { + default: + case 0x00: return tr("Content$Sports"); + case 0x01: return tr("Content$Special Event"); + case 0x02: return tr("Content$Sport Magazine"); + case 0x03: return tr("Content$Football/Soccer"); + case 0x04: return tr("Content$Tennis/Squash"); + case 0x05: return tr("Content$Team Sports"); + case 0x06: return tr("Content$Athletics"); + case 0x07: return tr("Content$Motor Sport"); + case 0x08: return tr("Content$Water Sport"); + case 0x09: return tr("Content$Winter Sports"); + case 0x0A: return tr("Content$Equestrian"); + case 0x0B: return tr("Content$Martial Sports"); + } + break; + case EVCONTENTMASK_CHILDRENYOUTH: + switch (Content & 0x0F) { + default: + case 0x00: return tr("Content$Children's/Youth Programme"); + case 0x01: return tr("Content$Pre-school Children's Programme"); + case 0x02: return tr("Content$Entertainment Programme for 6 to 14"); + case 0x03: return tr("Content$Entertainment Programme for 10 to 16"); + case 0x04: return tr("Content$Informational/Educational/School Programme"); + case 0x05: return tr("Content$Cartoons/Puppets"); + } + break; + case EVCONTENTMASK_MUSICBALLETDANCE: + switch (Content & 0x0F) { + default: + case 0x00: return tr("Content$Music/Ballet/Dance"); + case 0x01: return tr("Content$Rock/Pop"); + case 0x02: return tr("Content$Serious/Classical Music"); + case 0x03: return tr("Content$Folk/Tradional Music"); + case 0x04: return tr("Content$Jazz"); + case 0x05: return tr("Content$Musical/Opera"); + case 0x06: return tr("Content$Ballet"); + } + break; + case EVCONTENTMASK_ARTSCULTURE: + switch (Content & 0x0F) { + default: + case 0x00: return tr("Content$Arts/Culture"); + case 0x01: return tr("Content$Performing Arts"); + case 0x02: return tr("Content$Fine Arts"); + case 0x03: return tr("Content$Religion"); + case 0x04: return tr("Content$Popular Culture/Traditional Arts"); + case 0x05: return tr("Content$Literature"); + case 0x06: return tr("Content$Film/Cinema"); + case 0x07: return tr("Content$Experimental Film/Video"); + case 0x08: return tr("Content$Broadcasting/Press"); + case 0x09: return tr("Content$New Media"); + case 0x0A: return tr("Content$Arts/Culture Magazine"); + case 0x0B: return tr("Content$Fashion"); + } + break; + case EVCONTENTMASK_SOCIALPOLITICALECONOMICS: + switch (Content & 0x0F) { + default: + case 0x00: return tr("Content$Social/Political/Economics"); + case 0x01: return tr("Content$Magazine/Report/Documentary"); + case 0x02: return tr("Content$Economics/Social Advisory"); + case 0x03: return tr("Content$Remarkable People"); + } + break; + case EVCONTENTMASK_EDUCATIONALSCIENCE: + switch (Content & 0x0F) { + default: + case 0x00: return tr("Content$Education/Science/Factual"); + case 0x01: return tr("Content$Nature/Animals/Environment"); + case 0x02: return tr("Content$Technology/Natural Sciences"); + case 0x03: return tr("Content$Medicine/Physiology/Psychology"); + case 0x04: return tr("Content$Foreign Countries/Expeditions"); + case 0x05: return tr("Content$Social/Spiritual Sciences"); + case 0x06: return tr("Content$Further Education"); + case 0x07: return tr("Content$Languages"); + } + break; + case EVCONTENTMASK_LEISUREHOBBIES: + switch (Content & 0x0F) { + default: + case 0x00: return tr("Content$Leisure/Hobbies"); + case 0x01: return tr("Content$Tourism/Travel"); + case 0x02: return tr("Content$Handicraft"); + case 0x03: return tr("Content$Motoring"); + case 0x04: return tr("Content$Fitness & Health"); + case 0x05: return tr("Content$Cooking"); + case 0x06: return tr("Content$Advertisement/Shopping"); + case 0x07: return tr("Content$Gardening"); + } + break; + case EVCONTENTMASK_SPECIAL: + switch (Content & 0x0F) { + case 0x00: return tr("Content$Original Language"); + case 0x01: return tr("Content$Black & White"); + case 0x02: return tr("Content$Unpublished"); + case 0x03: return tr("Content$Live Broadcast"); + default: ; + } + break; + default: ; + } + return ""; +} + cString cEvent::GetDateString(void) const { return DateString(startTime); @@ -270,6 +419,12 @@ void cEvent::Dump(FILE *f, const char *Prefix, bool InfoOnly) const fprintf(f, "%sD %s\n", Prefix, description); strreplace(description, '|', '\n'); } + if (contents[0]) { + fprintf(f, "%sG", Prefix); + for (int i = 0; Contents(i); i++) + fprintf(f, " %02X", Contents(i)); + fprintf(f, "\n"); + } if (components) { for (int i = 0; i < components->NumComponents(); i++) { tComponent *p = components->Component(i); @@ -296,6 +451,20 @@ bool cEvent::Parse(char *s) case 'D': strreplace(t, '|', '\n'); SetDescription(t); break; + case 'G': { + memset(contents, 0, sizeof(contents)); + for (int i = 0; i < MAXEVCONTENTS; i++) { + char *tail = NULL; + int c = strtol(t, &tail, 16); + if (0x00 < c && c <= 0xFF) { + contents[i] = c; + t = tail; + } + else + break; + } + } + break; case 'X': if (!components) components = new cComponents; components->SetComponent(components->NumComponents(), t); |