summaryrefslogtreecommitdiff
path: root/epg.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2010-01-03 12:20:37 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2010-01-03 12:20:37 +0100
commit56627cd12d9e01379d9104300fec837a4db8df48 (patch)
tree3a3029da935dfef7b4edee8be35c11cd83e281d5 /epg.c
parent4b5f232e59988e5c043b08210c3940a5bf82b360 (diff)
downloadvdr-56627cd12d9e01379d9104300fec837a4db8df48.tar.gz
vdr-56627cd12d9e01379d9104300fec837a4db8df48.tar.bz2
Implemented handling the "Content Descriptor"
Diffstat (limited to 'epg.c')
-rw-r--r--epg.c171
1 files changed, 170 insertions, 1 deletions
diff --git a/epg.c b/epg.c
index fafd7f8d..83376ac8 100644
--- a/epg.c
+++ b/epg.c
@@ -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);