Implemented handling the "Content Descriptor"

This commit is contained in:
Klaus Schmidinger
2010-01-03 12:20:37 +01:00
parent 4b5f232e59
commit 56627cd12d
35 changed files with 6193 additions and 34 deletions

171
epg.c
View File

@@ -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);