diff options
-rw-r--r-- | templatefile.c | 19 | ||||
-rw-r--r-- | uservars.c | 21 | ||||
-rw-r--r-- | varparser.c | 34 |
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); } @@ -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 != ""); |