mirror of
https://projects.vdr-developer.org/git/vdr-plugin-skindesigner.git
synced 2023-10-19 17:58:31 +02:00
Refactor reruns
This commit is contained in:
parent
f156e44599
commit
6f14ddae8a
2
config.c
2
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);
|
||||
|
1
config.h
1
config.h
@ -110,6 +110,7 @@ public:
|
||||
int limitLogoCache;
|
||||
int numLogosMax;
|
||||
int debugImageLoading;
|
||||
int useSubtitleRerun;
|
||||
int rerunAmount;
|
||||
int rerunDistance;
|
||||
int rerunMaxChannel;
|
||||
|
@ -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());
|
||||
|
@ -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
|
||||
#endif //__VIEWDETAIL_H
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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ä"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
4
setup.c
4
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")));
|
||||
|
3
setup.h
3
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
|
||||
#endif //__SKINDESIGNER_SETUP_H
|
||||
|
Loading…
Reference in New Issue
Block a user