mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Implemented handling the "Content Descriptor"
This commit is contained in:
171
epg.c
171
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);
|
||||
|
||||
Reference in New Issue
Block a user