summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--templatefile.c19
-rw-r--r--uservars.c21
-rw-r--r--varparser.c34
3 files changed, 40 insertions, 34 deletions
diff --git a/templatefile.c b/templatefile.c
index 00e5af1..593d1a7 100644
--- a/templatefile.c
+++ b/templatefile.c
@@ -79,6 +79,13 @@ bool cMenuTemplate::PrepareTemplate(const char* templateLine)
strcpy(menuTemplate, stripped);
free(stripped);
}
+
+ // the status variables are handled in menu_whatson.c itself
+ // to speedup the var-parser we 'hide' them here in renaming them
+ strcpy(menuTemplate, strreplacei(menuTemplate, "%status%", "$status$"));
+ strcpy(menuTemplate, strreplacei(menuTemplate, "%t_status%", "$t_status$"));
+ strcpy(menuTemplate, strreplacei(menuTemplate, "%v_status%", "$v_status$"));
+ strcpy(menuTemplate, strreplacei(menuTemplate, "%r_status%", "$r_status$"));
return true;
}
@@ -211,7 +218,7 @@ void cTemplFile::PrepareDefaultTemplates()
}
if (WhatsOnNow && strlen(WhatsOnNow->MenuTemplate()) == 0)
{
- sprintf(menutemplate, "%s%%chsh%%:12|%%time%%:6|%s%s%%status%%:3|%%title%% ~ %%subtitle%%:30",
+ sprintf(menutemplate, "%s%%chsh%%:12|%%time%%:6|%s%s$status$:3|%%title%% ~ %%subtitle%%:30",
EPGSearchConfig.showChannelNr?channelnr:"",
EPGSearchConfig.showProgress==0?"":(EPGSearchConfig.showProgress==1?"%progrT2S%:4|":"%progr%:5|"),
text2skin?" ":"");
@@ -219,7 +226,7 @@ void cTemplFile::PrepareDefaultTemplates()
}
// What's on next and else
- sprintf(menutemplate, "%s%%chsh%%:12|%%time%%:7|%%status%%:4|%%title%% ~ %%subtitle%%:30",
+ sprintf(menutemplate, "%s%%chsh%%:12|%%time%%:7|$status$:4|%%title%% ~ %%subtitle%%:30",
EPGSearchConfig.showChannelNr?channelnr:"");
cMenuTemplate* WhatsOnNext = GetTemplateByName("MenuWhatsOnNext");
if (!WhatsOnNext)
@@ -247,8 +254,8 @@ void cTemplFile::PrepareDefaultTemplates()
}
if (Schedule && strlen(Schedule->MenuTemplate()) == 0)
{
- strcpy(menutemplate, "%time_w% %time_d%:7|%time%:6|%status%:4|%title% ~ %subtitle%:30");
- Schedule->PrepareTemplate(menutemplate);
+ strcpy(menutemplate, "%time_w% %time_d%:7|%time%:6|$status$:4|%title% ~ %subtitle%:30");
+ Schedule->PrepareTemplate(menutemplate);
}
// Search results
@@ -260,7 +267,7 @@ void cTemplFile::PrepareDefaultTemplates()
}
if (SearchResults && strlen(SearchResults->MenuTemplate()) == 0)
{
- sprintf(menutemplate, "%s%%chsh%%:12|%%datesh%%:6|%%time%%:6|%%status%%:3|%%title%% ~ %%subtitle%%:30",
+ sprintf(menutemplate, "%s%%chsh%%:12|%%datesh%%:6|%%time%%:6|$status$:3|%%title%% ~ %%subtitle%%:30",
EPGSearchConfig.showChannelNr?channelnr:"");
SearchResults->PrepareTemplate(menutemplate);
}
@@ -274,7 +281,7 @@ void cTemplFile::PrepareDefaultTemplates()
}
if (Favorites && strlen(Favorites->MenuTemplate()) == 0)
{
- sprintf(menutemplate, "%s%%chsh%%:12|%%time%%:6|%%timespan%%:7|%%status%%:3|%%title%% ~ %%subtitle%%:30",
+ sprintf(menutemplate, "%s%%chsh%%:12|%%time%%:6|%%timespan%%:7|$status$:3|%%title%% ~ %%subtitle%%:30",
EPGSearchConfig.showChannelNr?channelnr:"");
Favorites->PrepareTemplate(menutemplate);
}
diff --git a/uservars.c b/uservars.c
index 4389e64..a55e558 100644
--- a/uservars.c
+++ b/uservars.c
@@ -40,8 +40,8 @@ cUserVar::cUserVar()
string cUserVar::Evaluate(const cEvent* e, bool escapeStrings)
{
- if (oldEvent && oldEvent == e && oldescapeStrings == escapeStrings)
- return oldResult;
+ if (oldEvent && oldEvent == e && oldescapeStrings == escapeStrings)
+ return oldResult;
usedVars.clear();
string result;
if (IsShellCmd())
@@ -100,22 +100,20 @@ string cUserVar::EvaluateCondExpr(const cEvent* e, bool escapeStrings)
if (condresult != "")
{
- LogFile.Log(3, "using case 'true'");
- return condVarTrue->Evaluate(e, escapeStrings);
+ LogFile.Log(3, "using case 'true'");
+ return condVarTrue->Evaluate(e, escapeStrings);
}
else
{
- LogFile.Log(3, "using case 'false'");
- return condVarFalse->Evaluate(e, escapeStrings);
+ LogFile.Log(3, "using case 'false'");
+ return condVarFalse->Evaluate(e, escapeStrings);
}
}
string cUserVar::EvaluateCompExpr(const cEvent* e, bool escapeStrings)
{
string expr = varparser.compExpr;
-
- string compExprLower = expr;
- std::transform(compExprLower.begin(), compExprLower.end(), compExprLower.begin(), tolower);
+ if (expr.find('%') == string::npos) return expr;
// handle internal vars like title and subtitle
expr = EvaluateInternalVars(expr, e, escapeStrings);
@@ -132,6 +130,7 @@ string cUserVar::EvaluateCompExpr(const cEvent* e, bool escapeStrings)
string cUserVar::EvaluateInternalVars(const string& Expr, const cEvent* e, bool escapeStrings)
{
string expr = Expr;
+ if (expr.find('%') == string::npos) return expr;
std::map<string, cInternalVar*>::iterator it;
for (it = UserVars.internalVars.begin(); it != UserVars.internalVars.end(); it++)
@@ -150,6 +149,7 @@ string cUserVar::EvaluateInternalVars(const string& Expr, const cEvent* e, bool
string cUserVar::EvaluateExtEPGVars(const string& Expr, const cEvent* e, bool escapeStrings)
{
string expr = Expr;
+ if (expr.find('%') == string::npos) return expr;
std::map<string, cExtEPGVar*>::iterator evar;
for (evar = UserVars.extEPGVars.begin(); evar != UserVars.extEPGVars.end(); evar++)
@@ -168,6 +168,7 @@ string cUserVar::EvaluateExtEPGVars(const string& Expr, const cEvent* e, bool es
string cUserVar::EvaluateUserVars(const string& Expr, const cEvent* e, bool escapeStrings)
{
string expr = Expr;
+ if (expr.find('%') == string::npos) return expr;
std::set<cUserVar*>::iterator it;
for (it = UserVars.userVars.begin(); it != UserVars.userVars.end(); it++)
@@ -186,6 +187,7 @@ string cUserVar::EvaluateUserVars(const string& Expr, const cEvent* e, bool esca
string cUserVar::EvaluateInternalTimerVars(const string& Expr, const cTimer* t)
{
string expr = Expr;
+ if (expr.find('%') == string::npos) return expr;
std::map<string, cTimerVar*>::iterator tvar;
for (tvar = UserVars.internalTimerVars.begin(); tvar != UserVars.internalTimerVars.end(); tvar++)
@@ -203,6 +205,7 @@ string cUserVar::EvaluateInternalTimerVars(const string& Expr, const cTimer* t)
string cUserVar::EvaluateInternalSearchVars(const string& Expr, const cSearchExt* s)
{
string expr = Expr;
+ if (expr.find('%') == string::npos) return expr;
std::map<string, cSearchVar*>::iterator svar;
for (svar = UserVars.internalSearchVars.begin(); svar != UserVars.internalSearchVars.end(); svar++)
diff --git a/varparser.c b/varparser.c
index 6fe9ef4..6151aa6 100644
--- a/varparser.c
+++ b/varparser.c
@@ -24,6 +24,7 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
#include "varparser.h"
#include <vdr/plugin.h>
#include "log.h"
+#include "epgsearchtools.h"
bool cVarParser::Parse(const string& input)
{
@@ -55,16 +56,19 @@ bool cVarParser::ParseExp(const string& input)
return ParseShellCmd(input);
// conditional expression?
int varPos = Strip(input).find("%");
- int queryPos = input.find("?");
- int colonPos = input.find(":");
- if (varPos == 0 && queryPos >= 0 && colonPos > queryPos)
- return ParseCondExp(input);
- else
- {
- // composed expression
- compExpr = input;
- return true;
- }
+ if (varPos == 0)
+ {
+ int queryPos = input.find("?");
+ if (queryPos >= 0)
+ {
+ int colonPos = input.find(":");
+ if (colonPos > queryPos)
+ return ParseCondExp(input);
+ }
+ }
+ // composed expression
+ compExpr = input;
+ return true;
}
bool cVarParser::ParseShellCmd(const string& input)
@@ -160,19 +164,11 @@ bool cVarParser::ParseEquality(const string& input)
bool cVarParser::ParseVar(const string& input)
{
string str = Strip(input);
- if (str[0] == '%' && str[str.size()-1] == '%' && str.size() > 2)
+ if (str.size() > 2 && str[0] == '%' && str[str.size()-1] == '%')
return true;
return false;
}
-string cVarParser::Strip(const string& input)
-{
- string str = input;
- while(str[0] == ' ') str.replace(0,1, "");
- while(str[str.size()-1] == ' ') str.replace(str.size()-1,1, "");
- return str;
-}
-
bool cVarParser::IsCondExpr()
{
return (condEqLeft != "");