summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkamel5 <vdr.kamel5 (at) gmx (dot) net>2020-07-13 11:49:21 +0200
committerkamel5 <vdr.kamel5 (at) gmx (dot) net>2020-07-15 13:21:33 +0200
commit6f14ddae8a91feed5272cd475f320bf9a9ca9214 (patch)
treecf2788be2dabfaa5cbfd58bba11aed03ab5e8723
parentf156e4459915aede1b16803d2bc6f5a4f43a1a93 (diff)
downloadvdr-plugin-skindesigner-6f14ddae8a91feed5272cd475f320bf9a9ca9214.tar.gz
vdr-plugin-skindesigner-6f14ddae8a91feed5272cd475f320bf9a9ca9214.tar.bz2
Refactor reruns
-rw-r--r--config.c2
-rw-r--r--config.h1
-rw-r--r--coreengine/viewdetail.c117
-rw-r--r--coreengine/viewdetail.h3
-rw-r--r--po/de_DE.po5
-rw-r--r--po/fi_FI.po5
-rw-r--r--po/it_IT.po5
-rw-r--r--setup.c4
-rw-r--r--setup.h3
9 files changed, 77 insertions, 68 deletions
diff --git a/config.c b/config.c
index bb4bff7..9ee0083 100644
--- a/config.c
+++ b/config.c
@@ -16,6 +16,7 @@ cDesignerConfig::cDesignerConfig() {
debugImageLoading = 0;
replaceDecPoint = false;
//settings for rerun display
+ useSubtitleRerun = 0;
rerunAmount = 10;
rerunDistance = 2;
rerunMaxChannel = 0;
@@ -510,6 +511,7 @@ bool cDesignerConfig::SetupParse(const char *Name, const char *Value) {
else if (!strcasecmp(Name, "LimitChannelLogoCache")) limitLogoCache = atoi(Value);
else if (!strcasecmp(Name, "NumberLogosInitially")) numLogosPerSizeInitial = atoi(Value);
else if (!strcasecmp(Name, "NumberLogosMax")) numLogosMax = atoi(Value);
+ else if (!strcasecmp(Name, "UseSubtitleRerun")) useSubtitleRerun = atoi(Value);
else if (!strcasecmp(Name, "RerunAmount")) rerunAmount = atoi(Value);
else if (!strcasecmp(Name, "RerunDistance")) rerunDistance = atoi(Value);
else if (!strcasecmp(Name, "RerunMaxChannel")) rerunMaxChannel = atoi(Value);
diff --git a/config.h b/config.h
index 39efc52..50860de 100644
--- a/config.h
+++ b/config.h
@@ -110,6 +110,7 @@ public:
int limitLogoCache;
int numLogosMax;
int debugImageLoading;
+ int useSubtitleRerun;
int rerunAmount;
int rerunDistance;
int rerunMaxChannel;
diff --git a/coreengine/viewdetail.c b/coreengine/viewdetail.c
index 0bb8555..db9cbc1 100644
--- a/coreengine/viewdetail.c
+++ b/coreengine/viewdetail.c
@@ -353,13 +353,15 @@ bool cViewDetailEpg::Parse(bool forced) {
tokenContainer->AddIntToken((int)eDmDetailedEpgIT::year, sStartTime->tm_year + 1900);
tokenContainer->AddIntToken((int)eDmDetailedEpgIT::daynumeric, sStartTime->tm_mday);
tokenContainer->AddIntToken((int)eDmDetailedEpgIT::month, sStartTime->tm_mon+1);
+ const cChannel* channel = NULL;
#if defined (APIVERSNUM) && (APIVERSNUM >= 20301)
+ {
LOCK_CHANNELS_READ;
- const cChannels* channels = Channels;
+ channel = Channels->GetByChannelID(event->ChannelID());
+ }
#else
- cChannels* channels = &Channels;
+ channel = Channels.GetByChannelID(event->ChannelID());
#endif
- const cChannel *channel = channels->GetByChannelID(event->ChannelID());
if (channel) {
tokenContainer->AddStringToken((int)eDmDetailedEpgST::channelname, channel->Name());
tokenContainer->AddIntToken((int)eDmDetailedEpgIT::channelnumber, channel->Number());
@@ -385,7 +387,10 @@ bool cViewDetailEpg::Parse(bool forced) {
tokenContainer->AddStringToken((int)eDmDetailedEpgST::vps, *event->GetVpsString());
cList<Epgsearch_searchresults_v1_0::cServiceSearchResult> *reruns = LoadReruns();
- int numReruns = NumReruns(reruns);
+ int numReruns = 0;
+ if (reruns && reruns->Count() > 0)
+ numReruns = reruns->Count();
+
vector<int> loopInfo;
//num reruns
loopInfo.push_back(numReruns);
@@ -395,7 +400,7 @@ bool cViewDetailEpg::Parse(bool forced) {
loopInfo.push_back(numActors);
tokenContainer->CreateLoopTokenContainer(&loopInfo);
if (numReruns > 0) {
- tokenContainer->AddIntToken((int)eDmDetailedEpgIT::hasreruns, 1);
+ tokenContainer->AddIntToken((int)eDmDetailedEpgIT::hasreruns, numReruns);
SetReruns(reruns);
}
if (scrapInfoAvailable) {
@@ -411,88 +416,75 @@ cList<Epgsearch_searchresults_v1_0::cServiceSearchResult> *cViewDetailEpg::LoadR
if (!epgSearchPlugin)
return NULL;
- if (isempty(event->Title()))
+ if (!event || isempty(event->Title()))
return NULL;
Epgsearch_searchresults_v1_0 data;
- data.query = (char*)event->Title();
+ std::string strQuery = event->Title();
+
+ if (config.useSubtitleRerun && !isempty(event->ShortText())) {
+ strQuery += "~";
+ strQuery += event->ShortText();
+ }
+
+ data.query = (char *)strQuery.c_str();
data.mode = 0;
data.channelNr = 0;
data.useTitle = true;
data.useSubTitle = true;
data.useDescription = false;
- cList<Epgsearch_searchresults_v1_0::cServiceSearchResult> *result = NULL;
- if (epgSearchPlugin->Service("Epgsearch-searchresults-v1.0", &data))
- result = data.pResultList;
- return result;
-}
-
-int cViewDetailEpg::NumReruns(cList<Epgsearch_searchresults_v1_0::cServiceSearchResult> *reruns) {
- if (!reruns || reruns->Count() < 2)
- return 0;
-
int maxNumReruns = config.rerunAmount;
int rerunDistance = config.rerunDistance * 3600;
int rerunMaxChannel = config.rerunMaxChannel;
int i = 0;
- for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = reruns->First(); r && i < maxNumReruns; r = reruns->Next(r)) {
- time_t eventStart = event->StartTime();
- time_t rerunStart = r->event->StartTime();
+
+ cList<Epgsearch_searchresults_v1_0::cServiceSearchResult> *reruns = NULL;
+ if (epgSearchPlugin->Service("Epgsearch-searchresults-v1.0", &data)) {
+ cList<Epgsearch_searchresults_v1_0::cServiceSearchResult> *result = data.pResultList;
+ if (result) {
+ for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = result->First(); r && i < maxNumReruns; r = result->Next(r)) {
+ time_t eventStart = event->StartTime();
+ time_t rerunStart = r->event->StartTime();
#if defined (APIVERSNUM) && (APIVERSNUM >= 20301)
- LOCK_CHANNELS_READ;
- const cChannels* channels = Channels;
+ LOCK_CHANNELS_READ;
+ const cChannel *channel = Channels->GetByChannelID(r->event->ChannelID(), true, true);
#else
- cChannels* channels = &Channels;
+ const cChannel *channel = Channels.GetByChannelID(r->event->ChannelID(), true, true);
#endif
- const cChannel *channel = channels->GetByChannelID(r->event->ChannelID(), true, true);
- //check for identical event
- if ((event->ChannelID() == r->event->ChannelID()) && (eventStart == rerunStart))
- continue;
- //check for timely distance
- if (rerunDistance > 0)
- if (rerunStart - eventStart < rerunDistance)
- continue;
- //check for maxchannel
- if (rerunMaxChannel > 0)
- if (channel && channel->Number() > rerunMaxChannel)
- continue;
- i++;
+ //check for identical event
+ if ((event->ChannelID() == r->event->ChannelID()) && (eventStart == rerunStart))
+ continue;
+ //check for timely distance
+ if (rerunDistance > 0)
+ if (rerunStart - eventStart < rerunDistance)
+ continue;
+ //check for maxchannel
+ if (rerunMaxChannel > 0)
+ if (channel && channel->Number() > rerunMaxChannel)
+ continue;
+ if (!reruns) reruns = new cList<Epgsearch_searchresults_v1_0::cServiceSearchResult>;
+ reruns->Add(r);
+ i++;
+ }
+ }
}
- return i;
+ return reruns;
}
void cViewDetailEpg::SetReruns(cList<Epgsearch_searchresults_v1_0::cServiceSearchResult> *reruns) {
- if (!reruns || reruns->Count() < 2)
+ if (!reruns || reruns->Count() < 1)
return;
- int maxNumReruns = config.rerunAmount;
- int rerunDistance = config.rerunDistance * 3600;
- int rerunMaxChannel = config.rerunMaxChannel;
-
int i = 0;
- for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = reruns->First(); r && i < maxNumReruns; r = reruns->Next(r)) {
- time_t eventStart = event->StartTime();
- time_t rerunStart = r->event->StartTime();
+ for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = reruns->First(); r; r = reruns->Next(r)) {
#if defined (APIVERSNUM) && (APIVERSNUM >= 20301)
LOCK_CHANNELS_READ;
- const cChannels* channels = Channels;
+ const cChannel *channel = Channels->GetByChannelID(r->event->ChannelID(), true, true);
#else
- cChannels* channels = &Channels;
+ const cChannel *channel = Channels.GetByChannelID(r->event->ChannelID(), true, true);
#endif
- const cChannel *channel = channels->GetByChannelID(r->event->ChannelID(), true, true);
- //check for identical event
- if ((event->ChannelID() == r->event->ChannelID()) && (eventStart == rerunStart))
- continue;
- //check for timely distance
- if (rerunDistance > 0)
- if (rerunStart - eventStart < rerunDistance)
- continue;
- //check for maxchannel
- if (rerunMaxChannel > 0)
- if (channel && channel->Number() > rerunMaxChannel)
- continue;
tokenContainer->AddLoopToken(rerunsIndex, i, (int)eRerunsLT::title, r->event->Title());
tokenContainer->AddLoopToken(rerunsIndex, i, (int)eRerunsLT::shorttext, r->event->ShortText());
tokenContainer->AddLoopToken(rerunsIndex, i, (int)eRerunsLT::start, *(r->event->GetTimeString()));
@@ -511,6 +503,8 @@ void cViewDetailEpg::SetReruns(cList<Epgsearch_searchresults_v1_0::cServiceSearc
tokenContainer->AddLoopToken(rerunsIndex, i, (int)eRerunsLT::channelname, "");
tokenContainer->AddLoopToken(rerunsIndex, i, (int)eRerunsLT::channelnumber, "");
}
+ if (r == reruns->Last())
+ break;
i++;
}
}
@@ -812,11 +806,10 @@ void cViewDetailRec::SetRecInfos(void) {
if (info) {
#if defined (APIVERSNUM) && (APIVERSNUM >= 20301)
LOCK_CHANNELS_READ;
- const cChannels* channels = Channels;
+ const cChannel *channel = Channels->GetByChannelID(info->ChannelID());
#else
- cChannels* channels = &Channels;
+ const cChannel *channel = Channels.GetByChannelID(info->ChannelID());
#endif
- const cChannel *channel = channels->GetByChannelID(info->ChannelID());
if (channel) {
tokenContainer->AddStringToken((int)eDmDetailedRecST::recchannelname, channel->Name());
tokenContainer->AddStringToken((int)eDmDetailedRecST::recchannelid, *channel->GetChannelID().ToString());
diff --git a/coreengine/viewdetail.h b/coreengine/viewdetail.h
index 0d53a5a..25e558b 100644
--- a/coreengine/viewdetail.h
+++ b/coreengine/viewdetail.h
@@ -44,7 +44,6 @@ protected:
int rerunsIndex;
int actorsIndex;
cList<Epgsearch_searchresults_v1_0::cServiceSearchResult> *LoadReruns(void);
- int NumReruns(cList<Epgsearch_searchresults_v1_0::cServiceSearchResult> *reruns);
void SetReruns(cList<Epgsearch_searchresults_v1_0::cServiceSearchResult> *reruns);
void SetEpgPictures(int eventId);
public:
@@ -112,4 +111,4 @@ public:
void Set(skindesignerapi::cTokenContainer *tk);
bool Parse(bool forced = false);
};
-#endif //__VIEWDETAIL_H \ No newline at end of file
+#endif //__VIEWDETAIL_H
diff --git a/po/de_DE.po b/po/de_DE.po
index cc10989..ed3ed5e 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-skindesigner 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2016-07-03 07:31+0200\n"
+"POT-Creation-Date: 2020-07-15 13:04+0200\n"
"PO-Revision-Date: 2014-09-27 11:02+0200\n"
"Last-Translator: Louis Braun <louis.braun@gmx.de>\n"
"Language-Team: \n"
@@ -96,6 +96,9 @@ msgstr "Maximale Anzahl Custom Tokens"
msgid "Reruns"
msgstr "Wiederholungen"
+msgid "Use Subtitle for reruns"
+msgstr "Untertitel vergleichen"
+
msgid "Maximum number of reruns to display"
msgstr "Anzahl anzuzeigender Wiederholungen"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index a94f013..c28beb4 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-skindesigner 0.2.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2016-07-03 07:31+0200\n"
+"POT-Creation-Date: 2020-07-15 13:04+0200\n"
"PO-Revision-Date: 2015-01-25 01:25+0200\n"
"Last-Translator: Rolf Ahrenberg\n"
"Language-Team: Finnish\n"
@@ -96,6 +96,9 @@ msgstr "Mukautettujen tokenien maksimimäärä"
msgid "Reruns"
msgstr "Uusinnat"
+msgid "Use Subtitle for reruns"
+msgstr ""
+
msgid "Maximum number of reruns to display"
msgstr "Näytettävien uusintojen maksimimäärä"
diff --git a/po/it_IT.po b/po/it_IT.po
index 7a3a937..b639395 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-skindesigner 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2016-07-03 07:31+0200\n"
+"POT-Creation-Date: 2020-07-15 13:04+0200\n"
"PO-Revision-Date: 2015-08-09 11:02+0200\n"
"Last-Translator: fiveten_59\n"
"Language-Team: Italian\n"
@@ -96,6 +96,9 @@ msgstr "Numero massimo di token personalizzati"
msgid "Reruns"
msgstr "Riavvii"
+msgid "Use Subtitle for reruns"
+msgstr ""
+
msgid "Maximum number of reruns to display"
msgstr "NUmero massimo di riavvii da visualizzare"
diff --git a/setup.c b/setup.c
index f62af7b..c24d7d7 100644
--- a/setup.c
+++ b/setup.c
@@ -128,6 +128,7 @@ cSkinDesignerSetup::cSkinDesignerSetup(skindesignerapi::cPluginStructure *skinPr
limitLogoCache = config.limitLogoCache;
numLogosMax = config.numLogosMax;
debugImageLoading = config.debugImageLoading;
+ useSubtitleRerun = config.useSubtitleRerun;
rerunAmount = config.rerunAmount;
rerunDistance = config.rerunDistance;
rerunMaxChannel = config.rerunMaxChannel;
@@ -269,6 +270,7 @@ void cSkinDesignerSetup::Store(void) {
config.limitLogoCache = limitLogoCache;
config.numLogosMax = numLogosMax;
config.debugImageLoading = debugImageLoading;
+ config.useSubtitleRerun = useSubtitleRerun;
config.rerunAmount = rerunAmount;
config.rerunDistance = rerunDistance;
config.rerunMaxChannel = rerunMaxChannel;
@@ -294,6 +296,7 @@ void cSkinDesignerSetup::Store(void) {
SetupStore("LimitChannelLogoCache", limitLogoCache);
SetupStore("NumberLogosInitially", numLogosPerSizeInitial);
SetupStore("NumberLogosMax", numLogosMax);
+ SetupStore("UseSubtitleRerun", useSubtitleRerun);
SetupStore("RerunAmount", rerunAmount);
SetupStore("RerunDistance", rerunDistance);
SetupStore("RerunMaxChannel", rerunMaxChannel);
@@ -315,6 +318,7 @@ void cSkinDesignerSetup::PluginSetup(void) {
Add(new cMenuEditIntItem(tr("Maximum number of custom tokens"), &numCustomTokens, 0, 100));
Add(InfoItem(tr("Reruns")));
+ Add(new cMenuEditBoolItem(tr("Use Subtitle for reruns"), &useSubtitleRerun));
Add(new cMenuEditIntItem(tr("Maximum number of reruns to display"), &rerunAmount, 1, 100));
Add(new cMenuEditIntItem(tr("Minimum timely distance of rerun (in hours)"), &rerunDistance, 0, 1000));
Add(new cMenuEditIntItem(tr("Limit Channel Numbers"), &rerunMaxChannel, 0, 1000, tr("no limit")));
diff --git a/setup.h b/setup.h
index 5df80a9..ed199c7 100644
--- a/setup.h
+++ b/setup.h
@@ -45,6 +45,7 @@ private:
int limitLogoCache;
int numLogosMax;
int debugImageLoading;
+ int useSubtitleRerun;
int rerunAmount;
int rerunDistance;
int rerunMaxChannel;
@@ -124,4 +125,4 @@ public:
static void DefineTokens(skindesignerapi::cTokenContainer *tk);
void Display(void);
};
-#endif //__SKINDESIGNER_SETUP_H \ No newline at end of file
+#endif //__SKINDESIGNER_SETUP_H