summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--maps.h2
-rw-r--r--parse.cpp62
-rw-r--r--parse.h6
-rw-r--r--po/de_DE.po11
-rw-r--r--po/it_IT.po8
-rw-r--r--setup.cpp30
-rw-r--r--setup.h1
-rw-r--r--xmltv2vdr.cpp1
8 files changed, 100 insertions, 21 deletions
diff --git a/maps.h b/maps.h
index 989a945..cf022f3 100644
--- a/maps.h
+++ b/maps.h
@@ -23,7 +23,7 @@
#define USE_LONGTEXT 0x2
#define USE_COUNTRYDATE 0x4
#define USE_ORIGTITLE 0x8
-#define USE_CATEGORY 0x10
+#define USE_CATEGORIES 0x10
#define USE_CREDITS 0x20
#define USE_RATING 0x40
#define USE_REVIEW 0x80
diff --git a/parse.cpp b/parse.cpp
index 9fc9733..6ace8e7 100644
--- a/parse.cpp
+++ b/parse.cpp
@@ -104,6 +104,11 @@ void cXMLTVEvent::SetRating(const char *System, const char *Rating)
if (rating) rating=compactspace(rating);
}
+void cXMLTVEvent::AddCategory(const char *Category)
+{
+ categories.Append(compactspace(strdup(Category)));
+ categories.Sort();
+}
void cXMLTVEvent::AddCredits(const char *CreditType, const char *Credit, const char *Addendum)
{
@@ -168,6 +173,7 @@ void cXMLTVEvent::Clear()
vps= (time_t) 0;
eventid=0;
credits.Clear();
+ categories.Clear();
}
cXMLTVEvent::cXMLTVEvent()
@@ -425,6 +431,25 @@ bool cParse::PutEvent(cSchedule* schedule, cEvent *event, cXMLTVEvent *xevent, c
{
if ((map->Flags() & OPT_APPEND)==OPT_APPEND)
{
+ /* checking the event sequence */
+ cEvent *last=NULL;
+ if (schedule->Index()) last=schedule->Events()->Last();
+ if (last)
+ {
+ if (xevent->StartTime()<last->StartTime())
+ {
+ esyslog("xmltv2vdr: '%s' ERROR xmltv data overlaps",name);
+ return false;
+ }
+ /* set duration, if it doesn't exist */
+ if (!last->Duration()) last->SetDuration((int) difftime(xevent->StartTime(),last->StartTime()));
+ if (xevent->StartTime()!=last->EndTime())
+ {
+ esyslog("xmltv2vdr: '%s' detected gap of %is between events",name,
+ (int) difftime(xevent->StartTime(),last->EndTime()));
+ }
+ }
+ /* add event */
start=xevent->StartTime();
event=new cEvent(xevent->EventID());
if (!event) return false;
@@ -560,18 +585,31 @@ bool cParse::PutEvent(cSchedule* schedule, cEvent *event, cXMLTVEvent *xevent, c
}
if (((map->Flags() & USE_ORIGTITLE)==USE_ORIGTITLE) && (xevent->OrigTitle()))
{
- cTEXTMapping *text;
- text=TEXTMapping("originaltitle");
+ cTEXTMapping *text=TEXTMapping("originaltitle");
if (text) addExt=xevent->Add2Description(text->Value(),xevent->OrigTitle());
}
+ if (((map->Flags() & USE_CATEGORIES)==USE_CATEGORIES) && (xevent->Categories()->Size()))
+ {
+ cTEXTMapping *text=TEXTMapping("category");
+ if (text)
+ {
+ cStringList *categories=xevent->Categories();
+ addExt=xevent->Add2Description(text->Value(),(*categories)[0]);
+ for (int i=1; i<categories->Size(); i++)
+ {
+ // prevent duplicates
+ if (strcasecmp((*categories)[i],(*categories)[i-1]))
+ addExt=xevent->Add2Description(text->Value(),(*categories)[i]);
+ }
+ }
+ }
if (((map->Flags() & USE_RATING)==USE_RATING) && (xevent->Rating()) && (xevent->RatingSystem()))
{
addExt=xevent->Add2Description(xevent->RatingSystem(),xevent->Rating());
}
if (((map->Flags() & USE_REVIEW)==USE_REVIEW) && (xevent->Review()))
{
- cTEXTMapping *text;
- text=TEXTMapping("review");
+ cTEXTMapping *text=TEXTMapping("review");
if (text) addExt=xevent->Add2Description(text->Value(),xevent->Review());
}
if (addExt) event->SetDescription(xevent->Description());
@@ -710,6 +748,7 @@ bool cParse::FetchEvent(xmlNodePtr enode)
}
else
{
+ xevent.AddCategory(conv->Convert((const char *) content));
}
xmlFree(content);
}
@@ -904,12 +943,15 @@ bool cParse::Process(char *buffer, int bufsize)
oldmap=map;
xmlFree(channelid);
- xmlChar *vpsstart=xmlGetProp(node,(const xmlChar *) "vps-start");
- if (vpsstart)
+ if ((map->Flags() & OPT_VPS)==OPT_VPS)
{
- time_t vps=ConvertXMLTVTime2UnixTime((char *) vpsstart);
- xevent.SetVps(vps);
- xmlFree(vpsstart);
+ xmlChar *vpsstart=xmlGetProp(node,(const xmlChar *) "vps-start");
+ if (vpsstart)
+ {
+ time_t vps=ConvertXMLTVTime2UnixTime((char *) vpsstart);
+ xevent.SetVps(vps);
+ xmlFree(vpsstart);
+ }
}
xevent.SetStartTime(starttime);
@@ -919,7 +961,7 @@ bool cParse::Process(char *buffer, int bufsize)
node=node->next;
continue;
}
- cSchedulesLock *schedulesLock = new cSchedulesLock(true,2000); // to be safe ;)
+ cSchedulesLock *schedulesLock = new cSchedulesLock(true,5000); // to be safe ;)
const cSchedules *schedules = cSchedules::Schedules(*schedulesLock);
if (!schedules)
{
diff --git a/parse.h b/parse.h
index 7d597fc..7940622 100644
--- a/parse.h
+++ b/parse.h
@@ -32,6 +32,7 @@ private:
time_t vps;
tEventID eventid;
cStringList credits;
+ cStringList categories;
#if VDRVERSNUM >= 10711
uchar parentalRating;
uchar contents[MaxEventContents];
@@ -49,6 +50,7 @@ public:
void SetShortText(const char *ShortText);
void SetDescription(const char *Description);
void AddCredits(const char *CreditType, const char *Credit, const char *Addendum=NULL);
+ void AddCategory(const char *Category);
void SetCountry(const char *Country);
void SetReview(const char *Review);
void SetRating(const char *System, const char *Rating);
@@ -128,6 +130,10 @@ public:
{
return &credits;
}
+ cStringList *Categories(void)
+ {
+ return &categories;
+ }
};
class cParse
diff --git a/po/de_DE.po b/po/de_DE.po
index bfaeea9..758ee81 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -4,7 +4,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2011-07-05 20:47+0200\n"
+"POT-Creation-Date: 2011-07-06 20:45+0200\n"
"PO-Revision-Date: 2010-12-23 23:59+0100\n"
"Last-Translator: Jochen Dolze <vdr@dolze.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -93,6 +93,9 @@ msgstr "Gaststar"
msgid "review"
msgstr "Kritik"
+msgid "category"
+msgstr "Kategorie"
+
msgid "country and date"
msgstr "Ort und Jahr"
@@ -132,9 +135,6 @@ msgstr "Langtext"
msgid " merge long texts"
msgstr " Langtexte zusammenführen"
-msgid "category"
-msgstr "Kategorie"
-
msgid " actors"
msgstr " Darsteller"
@@ -186,3 +186,6 @@ msgstr "xmltv2vdr plugin ist noch aktiv"
msgid "Imports xmltv epg into vdr"
msgstr "Importiert xmltv epg in den VDR"
+#, fuzzy
+#~ msgid "update"
+#~ msgstr "Adapter"
diff --git a/po/it_IT.po b/po/it_IT.po
index 32d41ac..4b9a1d7 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -4,7 +4,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2011-07-05 20:47+0200\n"
+"POT-Creation-Date: 2011-07-06 20:45+0200\n"
"PO-Revision-Date: 2011-03-05 15:45+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -96,6 +96,9 @@ msgstr "Ospite"
msgid "review"
msgstr "Anteprima"
+msgid "category"
+msgstr "Categoria"
+
msgid "country and date"
msgstr "Paese e data"
@@ -135,9 +138,6 @@ msgstr "Testo completo"
msgid " merge long texts"
msgstr " Unisci testi completi"
-msgid "category"
-msgstr "Categoria"
-
msgid " actors"
msgstr " Attore"
diff --git a/setup.cpp b/setup.cpp
index 507f85d..8dcfcae 100644
--- a/setup.cpp
+++ b/setup.cpp
@@ -246,7 +246,11 @@ eOSState cMenuSetupXmltv2vdr::ProcessKey (eKeys Key)
SetHelp(NULL,NULL,NULL,tr("edit"));
}
}
- else if (((Current()>=mappingBegin) && (Current()<=mappingEnd)) || (Current()==mappingEntry))
+ else if (Current()==mappingEntry)
+ {
+ SetHelp(NULL,NULL,NULL,tr("edit"));
+ }
+ else if ((Current()>=mappingBegin) && (Current()<=mappingEnd))
{
SetHelp(NULL,NULL,NULL,tr("edit"));
}
@@ -425,6 +429,15 @@ cMenuSetupXmltv2vdrTextMap::cMenuSetupXmltv2vdrTextMap(cPluginXmltv2vdr *Plugin)
strcpy(review,tr("review"));
}
+ textmap=baseplugin->TEXTMapping("category");
+ if (textmap)
+ {
+ strn0cpy(review,textmap->Value(),strlen(textmap->Value())+1);
+ }
+ else
+ {
+ strcpy(review,tr("category"));
+ }
Add(newtitle(tr("country and date")));
Add(new cMenuEditStrItem("country",country,sizeof(country)));
@@ -433,6 +446,9 @@ cMenuSetupXmltv2vdrTextMap::cMenuSetupXmltv2vdrTextMap(cPluginXmltv2vdr *Plugin)
Add(newtitle(tr("original title")));
Add(new cMenuEditStrItem("originaltitle",originaltitle,sizeof(originaltitle)));
+ Add(newtitle(tr("category")));
+ Add(new cMenuEditStrItem("category",category,sizeof(category)));
+
Add(newtitle(tr("credits")));
Add(new cMenuEditStrItem("actor",actor,sizeof(actor)));
Add(new cMenuEditStrItem("guest",guest,sizeof(guest)));
@@ -486,6 +502,15 @@ void cMenuSetupXmltv2vdrTextMap::Store()
{
baseplugin->TEXTMappingAdd(new cTEXTMapping("originaltitle",originaltitle));
}
+ textmap=baseplugin->TEXTMapping("category");
+ if (textmap)
+ {
+ textmap->ChangeValue(originaltitle);
+ }
+ else
+ {
+ baseplugin->TEXTMappingAdd(new cTEXTMapping("category",originaltitle));
+ }
textmap=baseplugin->TEXTMapping("actor");
if (textmap)
{
@@ -589,6 +614,7 @@ void cMenuSetupXmltv2vdrTextMap::Store()
SetupStore("textmap.country",country);
SetupStore("textmap.date",date);
SetupStore("textmap.originaltitle",originaltitle);
+ SetupStore("textmap.category",category);
SetupStore("textmap.actor",actor);
SetupStore("textmap.adapter",adapter);
SetupStore("textmap.commentator",commentator);
@@ -824,7 +850,7 @@ void cMenuSetupXmltv2vdrChannelMap::output(void)
}
Add(new cMyMenuEditBitItem(tr("country and date"),&flags,USE_COUNTRYDATE),true);
Add(new cMyMenuEditBitItem(tr("original title"),&flags,USE_ORIGTITLE),true);
- Add(new cMyMenuEditBitItem(tr("category"),&flags,USE_CATEGORY),true);
+ Add(new cMyMenuEditBitItem(tr("category"),&flags,USE_CATEGORIES),true);
Add(new cMyMenuEditBitItem(tr("credits"),&flags,USE_CREDITS),true);
c3=Current();
if ((flags & USE_CREDITS)==USE_CREDITS)
diff --git a/setup.h b/setup.h
index 06207f8..003f540 100644
--- a/setup.h
+++ b/setup.h
@@ -82,6 +82,7 @@ private:
char commentator[255];
char guest[255];
char review[255];
+ char category[255];
cOsdItem *newtitle (const char *s);
public:
cMenuSetupXmltv2vdrTextMap(cPluginXmltv2vdr *Plugin);
diff --git a/xmltv2vdr.cpp b/xmltv2vdr.cpp
index e91689c..7a2a83d 100644
--- a/xmltv2vdr.cpp
+++ b/xmltv2vdr.cpp
@@ -496,6 +496,7 @@ cPluginXmltv2vdr::cPluginXmltv2vdr(void) : epgexecutor(&epgsources)
TEXTMappingAdd(new cTEXTMapping("country",tr("country")));
TEXTMappingAdd(new cTEXTMapping("date",tr("year")));
TEXTMappingAdd(new cTEXTMapping("originaltitle",tr("originaltitle")));
+ TEXTMappingAdd(new cTEXTMapping("category",tr("category")));
TEXTMappingAdd(new cTEXTMapping("actor",tr("actor")));
TEXTMappingAdd(new cTEXTMapping("adapter",tr("adapter")));
TEXTMappingAdd(new cTEXTMapping("commentator",tr("commentator")));