diff options
Diffstat (limited to 'uservars.h')
-rw-r--r-- | uservars.h | 1208 |
1 files changed, 626 insertions, 582 deletions
@@ -40,7 +40,8 @@ using std::set; using std::map; using std::ostringstream; -class cUserVar : public cListObject { +class cUserVar : public cListObject +{ const cEvent* oldEvent; // cache bool oldescapeStrings; @@ -62,667 +63,713 @@ public: string EvaluateInternalSearchVars(const string& Expr, const cSearchExt* s); string EvaluateExtEPGVars(const string& Expr, const cEvent* e, bool escapeStrings = false); string EvaluateUserVars(const string& Expr, const cEvent* e, bool escapeStrings = false); - virtual string Name(bool = false) { return varparser.varName; } - virtual bool IsCondExpr() { return varparser.IsCondExpr(); } - virtual bool IsShellCmd() { return varparser.IsShellCmd(); } - virtual bool IsConnectCmd() { return varparser.IsConnectCmd(); } - virtual bool IsLengthCmd() { return varparser.IsLengthCmd(); } + virtual string Name(bool = false) { + return varparser.varName; + } + virtual bool IsCondExpr() { + return varparser.IsCondExpr(); + } + virtual bool IsShellCmd() { + return varparser.IsShellCmd(); + } + virtual bool IsConnectCmd() { + return varparser.IsConnectCmd(); + } + virtual bool IsLengthCmd() { + return varparser.IsLengthCmd(); + } bool DependsOnVar(const string& varName); bool DependsOnVar(cUserVar* var); bool AddDepVar(cUserVar* var); void ResetCache(); }; -class cExtEPGVar : public cUserVar { +class cExtEPGVar : public cUserVar +{ const string name; static string nameSpace; - public: +public: cExtEPGVar(const string& Name) : name(Name) {} - string Name(bool withNamespace = false) { return "%" + (withNamespace?nameSpace + ".":"") + name + "%"; } - bool IsCondExpr() { return false; } - bool IsShellCmd() { return false; } - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - - cSearchExtCat* SearchExtCat = SearchExtCats.First(); - while (SearchExtCat) - { - string varName = string("%") + SearchExtCat->name + string("%"); - int varPos = FindIgnoreCase(varName, Name()); - if (varPos == 0) - { - char* value = GetExtEPGValue(e, SearchExtCat); - string res = value?value:""; - if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res; - } - SearchExtCat = SearchExtCats.Next(SearchExtCat); - } - return ""; - } -}; - -class cInternalVar : public cUserVar { + string Name(bool withNamespace = false) { + return "%" + (withNamespace ? nameSpace + "." : "") + name + "%"; + } + bool IsCondExpr() { + return false; + } + bool IsShellCmd() { + return false; + } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + + cSearchExtCat* SearchExtCat = SearchExtCats.First(); + while (SearchExtCat) { + string varName = string("%") + SearchExtCat->name + string("%"); + int varPos = FindIgnoreCase(varName, Name()); + if (varPos == 0) { + char* value = GetExtEPGValue(e, SearchExtCat); + string res = value ? value : ""; + if (escapeStrings) return "'" + EscapeString(res) + "'"; + else return res; + } + SearchExtCat = SearchExtCats.Next(SearchExtCat); + } + return ""; + } +}; + +class cInternalVar : public cUserVar +{ const string name; - public: +public: cInternalVar(const string& Name) : name(Name) {} - string Name(bool = false) { return "%" + name + "%"; } - bool IsCondExpr() { return false; } - bool IsShellCmd() { return false; } -}; - -class cTitleVar : public cInternalVar { + string Name(bool = false) { + return "%" + name + "%"; + } + bool IsCondExpr() { + return false; + } + bool IsShellCmd() { + return false; + } +}; + +class cTitleVar : public cInternalVar +{ public: cTitleVar() : cInternalVar("title") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - string res = (e && !isempty(e->Title()))? e->Title() : ""; - if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res; - } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + string res = (e && !isempty(e->Title())) ? e->Title() : ""; + if (escapeStrings) return "'" + EscapeString(res) + "'"; + else return res; + } }; -class cSubtitleVar : public cInternalVar { +class cSubtitleVar : public cInternalVar +{ public: cSubtitleVar() : cInternalVar("subtitle") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - string res = (e && !isempty(e->ShortText()))? e->ShortText() : ""; - if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res; - } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + string res = (e && !isempty(e->ShortText())) ? e->ShortText() : ""; + if (escapeStrings) return "'" + EscapeString(res) + "'"; + else return res; + } }; -class cSummaryVar : public cInternalVar { +class cSummaryVar : public cInternalVar +{ public: cSummaryVar() : cInternalVar("summary") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - string res = (e && !isempty(e->Description()))? e->Description() : ""; - if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res; - } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + string res = (e && !isempty(e->Description())) ? e->Description() : ""; + if (escapeStrings) return "'" + EscapeString(res) + "'"; + else return res; + } }; -class cHTMLSummaryVar : public cInternalVar { +class cHTMLSummaryVar : public cInternalVar +{ public: cHTMLSummaryVar() : cInternalVar("htmlsummary") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (e && !isempty(e->Description())) - { - string res = ReplaceAll(e->Description(), "\n", "<br />"); - if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res; - } - else - return ""; - } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (e && !isempty(e->Description())) { + string res = ReplaceAll(e->Description(), "\n", "<br />"); + if (escapeStrings) return "'" + EscapeString(res) + "'"; + else return res; + } else + return ""; + } }; -class cEventIDVar : public cInternalVar { +class cEventIDVar : public cInternalVar +{ public: cEventIDVar() : cInternalVar("eventid") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (e) - { - ostringstream os; - os << e->EventID(); - return os.str(); - } - else return ""; } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (e) { + ostringstream os; + os << e->EventID(); + return os.str(); + } else return ""; + } }; -class cLiveEventIDVar : public cInternalVar { +class cLiveEventIDVar : public cInternalVar +{ public: cLiveEventIDVar() : cInternalVar("liveeventid") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - LOCK_CHANNELS_READ; - const cChannel *channel = Channels->GetByChannelID(e->ChannelID(), true); - if (!channel) return ""; - - string res(channel->GetChannelID().ToString()); - res = "event_" + res; - res = ReplaceAll(res, ".", "p"); - res = ReplaceAll(res, "-", "m"); - res += "_" + NumToString(e->EventID()); - if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res; - } -}; - -class cTimeVar : public cInternalVar { + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByChannelID(e->ChannelID(), true); + if (!channel) return ""; + + string res(channel->GetChannelID().ToString()); + res = "event_" + res; + res = ReplaceAll(res, ".", "p"); + res = ReplaceAll(res, "-", "m"); + res += "_" + NumToString(e->EventID()); + if (escapeStrings) return "'" + EscapeString(res) + "'"; + else return res; + } +}; + +class cTimeVar : public cInternalVar +{ public: cTimeVar() : cInternalVar("time") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - string res = (e? *(e->GetTimeString()) : ""); - if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res; - } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + string res = (e ? * (e->GetTimeString()) : ""); + if (escapeStrings) return "'" + EscapeString(res) + "'"; + else return res; + } }; -class cTimeEndVar : public cInternalVar { +class cTimeEndVar : public cInternalVar +{ public: cTimeEndVar() : cInternalVar("timeend") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - string res = (e? *(e->GetEndTimeString()) : ""); - if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res; - } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + string res = (e ? * (e->GetEndTimeString()) : ""); + if (escapeStrings) return "'" + EscapeString(res) + "'"; + else return res; + } }; -class cTime_wVar : public cInternalVar { +class cTime_wVar : public cInternalVar +{ public: cTime_wVar() : cInternalVar("time_w") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - string res = (e? WEEKDAYNAME(e->StartTime()) : ""); - if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res; - } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + string res = (e ? WEEKDAYNAME(e->StartTime()) : ""); + if (escapeStrings) return "'" + EscapeString(res) + "'"; + else return res; + } }; -class cTime_dVar : public cInternalVar { +class cTime_dVar : public cInternalVar +{ public: cTime_dVar() : cInternalVar("time_d") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - char day[3] = ""; - struct tm tm_r; - const time_t t = e->StartTime(); - tm *tm = localtime_r(&t, &tm_r); - strftime(day, sizeof(day), "%d", tm); - if (escapeStrings) return "'" + EscapeString(day) + "'"; else return day; - } -}; - -class cTime_lngVar : public cInternalVar { + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + char day[3] = ""; + struct tm tm_r; + const time_t t = e->StartTime(); + tm *tm = localtime_r(&t, &tm_r); + strftime(day, sizeof(day), "%d", tm); + if (escapeStrings) return "'" + EscapeString(day) + "'"; + else return day; + } +}; + +class cTime_lngVar : public cInternalVar +{ public: cTime_lngVar() : cInternalVar("time_lng") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - ostringstream os; - os << e->StartTime(); - if (escapeStrings) return "'" + EscapeString(os.str()) + "'"; else return os.str(); - } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + ostringstream os; + os << e->StartTime(); + if (escapeStrings) return "'" + EscapeString(os.str()) + "'"; + else return os.str(); + } }; -class cTimeSpanVar : public cInternalVar { +class cTimeSpanVar : public cInternalVar +{ public: cTimeSpanVar() : cInternalVar("timespan") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - time_t diff = e->StartTime() - time(NULL); - string res; - if (labs(diff) >= SECSINDAY) - { - cString buffer; - if (diff > 0) - buffer = cString::sprintf(tr("in %02ldd"), long(diff / SECSINDAY)); - else - buffer = cString::sprintf("%02ldd", long(-diff / SECSINDAY)); - res = buffer; - } - else if (labs(diff) >= (60 * 60)) - { - cString buffer; - if (diff > 0) - buffer = cString::sprintf(tr("in %02ldh"), long(diff / (60*60))); - else - buffer = cString::sprintf("%02ldh", long(-diff / (60*60))); - res = buffer; - } - else - { - cString buffer; - if (diff > 0) - buffer = cString::sprintf(tr("in %02ldm"), long(diff / 60)); - else - buffer = cString::sprintf("%02ldm", long(-diff / 60)); - res = buffer; - } - if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res; - } -}; - -class cLength_Var : public cInternalVar { + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + time_t diff = e->StartTime() - time(NULL); + string res; + if (labs(diff) >= SECSINDAY) { + cString buffer; + if (diff > 0) + buffer = cString::sprintf(tr("in %02ldd"), long(diff / SECSINDAY)); + else + buffer = cString::sprintf("%02ldd", long(-diff / SECSINDAY)); + res = buffer; + } else if (labs(diff) >= (60 * 60)) { + cString buffer; + if (diff > 0) + buffer = cString::sprintf(tr("in %02ldh"), long(diff / (60 * 60))); + else + buffer = cString::sprintf("%02ldh", long(-diff / (60 * 60))); + res = buffer; + } else { + cString buffer; + if (diff > 0) + buffer = cString::sprintf(tr("in %02ldm"), long(diff / 60)); + else + buffer = cString::sprintf("%02ldm", long(-diff / 60)); + res = buffer; + } + if (escapeStrings) return "'" + EscapeString(res) + "'"; + else return res; + } +}; + +class cLength_Var : public cInternalVar +{ public: cLength_Var() : cInternalVar("length") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - return (e? NumToString(e->Duration()) : ""); - } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + return (e ? NumToString(e->Duration()) : ""); + } }; -class cDateVar : public cInternalVar { +class cDateVar : public cInternalVar +{ public: cDateVar() : cInternalVar("date") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - char date[9] = ""; - struct tm tm_r; - const time_t t = e->StartTime(); - tm *tm = localtime_r(&t, &tm_r); - strftime(date, sizeof(date), "%d.%m.%y", tm); - if (escapeStrings) return "'" + EscapeString(date) + "'"; else return date; - } -}; - -class cDateShortVar : public cInternalVar { + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + char date[9] = ""; + struct tm tm_r; + const time_t t = e->StartTime(); + tm *tm = localtime_r(&t, &tm_r); + strftime(date, sizeof(date), "%d.%m.%y", tm); + if (escapeStrings) return "'" + EscapeString(date) + "'"; + else return date; + } +}; + +class cDateShortVar : public cInternalVar +{ public: cDateShortVar() : cInternalVar("datesh") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - char dateshort[7] = ""; - struct tm tm_r; - const time_t t = e->StartTime(); - tm *tm = localtime_r(&t, &tm_r); - strftime(dateshort, sizeof(dateshort), "%d.%m.", tm); - if (escapeStrings) return "'" + EscapeString(dateshort) + "'"; else return dateshort; - } -}; - -class cDateISOVar : public cInternalVar { + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + char dateshort[7] = ""; + struct tm tm_r; + const time_t t = e->StartTime(); + tm *tm = localtime_r(&t, &tm_r); + strftime(dateshort, sizeof(dateshort), "%d.%m.", tm); + if (escapeStrings) return "'" + EscapeString(dateshort) + "'"; + else return dateshort; + } +}; + +class cDateISOVar : public cInternalVar +{ public: cDateISOVar() : cInternalVar("date_iso") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - char dateISO[11] = ""; - struct tm tm_r; - const time_t t = e->StartTime(); - tm *tm = localtime_r(&t, &tm_r); - strftime(dateISO, sizeof(dateISO), "%Y-%m-%d", tm); - if (escapeStrings) return "'" + EscapeString(dateISO) + "'"; else return dateISO; - } -}; - -class cYearVar : public cInternalVar { + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + char dateISO[11] = ""; + struct tm tm_r; + const time_t t = e->StartTime(); + tm *tm = localtime_r(&t, &tm_r); + strftime(dateISO, sizeof(dateISO), "%Y-%m-%d", tm); + if (escapeStrings) return "'" + EscapeString(dateISO) + "'"; + else return dateISO; + } +}; + +class cYearVar : public cInternalVar +{ public: cYearVar() : cInternalVar("year") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - char year[5] = ""; - struct tm tm_r; - const time_t t = e->StartTime(); - tm *tm = localtime_r(&t, &tm_r); - strftime(year, sizeof(year), "%Y", tm); - if (escapeStrings) return "'" + EscapeString(year) + "'"; else return year; - } -}; - -class cMonthVar : public cInternalVar { + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + char year[5] = ""; + struct tm tm_r; + const time_t t = e->StartTime(); + tm *tm = localtime_r(&t, &tm_r); + strftime(year, sizeof(year), "%Y", tm); + if (escapeStrings) return "'" + EscapeString(year) + "'"; + else return year; + } +}; + +class cMonthVar : public cInternalVar +{ public: cMonthVar() : cInternalVar("month") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - char month[3] = ""; - struct tm tm_r; - const time_t t = e->StartTime(); - tm *tm = localtime_r(&t, &tm_r); - strftime(month, sizeof(month), "%m", tm); - if (escapeStrings) return "'" + EscapeString(month) + "'"; else return month; - } -}; - -class cDayVar : public cInternalVar { + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + char month[3] = ""; + struct tm tm_r; + const time_t t = e->StartTime(); + tm *tm = localtime_r(&t, &tm_r); + strftime(month, sizeof(month), "%m", tm); + if (escapeStrings) return "'" + EscapeString(month) + "'"; + else return month; + } +}; + +class cDayVar : public cInternalVar +{ public: cDayVar() : cInternalVar("day") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - char day[3] = ""; - struct tm tm_r; - const time_t t = e->StartTime(); - tm *tm = localtime_r(&t, &tm_r); - strftime(day, sizeof(day), "%d", tm); - if (escapeStrings) return "'" + EscapeString(day) + "'"; else return day; - } -}; - -class cWeekVar : public cInternalVar { + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + char day[3] = ""; + struct tm tm_r; + const time_t t = e->StartTime(); + tm *tm = localtime_r(&t, &tm_r); + strftime(day, sizeof(day), "%d", tm); + if (escapeStrings) return "'" + EscapeString(day) + "'"; + else return day; + } +}; + +class cWeekVar : public cInternalVar +{ public: cWeekVar() : cInternalVar("week") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - char day[3] = ""; - struct tm tm_r; - const time_t t = e->StartTime(); - tm *tm = localtime_r(&t, &tm_r); - strftime(day, sizeof(day), "%V", tm); - if (escapeStrings) return "'" + EscapeString(day) + "'"; else return day; - } -}; - -class cChannelNrVar : public cInternalVar { + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + char day[3] = ""; + struct tm tm_r; + const time_t t = e->StartTime(); + tm *tm = localtime_r(&t, &tm_r); + strftime(day, sizeof(day), "%V", tm); + if (escapeStrings) return "'" + EscapeString(day) + "'"; + else return day; + } +}; + +class cChannelNrVar : public cInternalVar +{ public: cChannelNrVar() : cInternalVar("chnr") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - int chnr = ChannelNrFromEvent(e); - if (chnr < 0) return ""; - return NumToString(chnr); - } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + int chnr = ChannelNrFromEvent(e); + if (chnr < 0) return ""; + return NumToString(chnr); + } }; -class cChannelShortVar : public cInternalVar { +class cChannelShortVar : public cInternalVar +{ public: cChannelShortVar() : cInternalVar("chsh") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - LOCK_CHANNELS_READ; - const cChannel *channel = Channels->GetByChannelID(e->ChannelID(), true); - string res = channel?channel->ShortName(true):""; - if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res; - } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByChannelID(e->ChannelID(), true); + string res = channel ? channel->ShortName(true) : ""; + if (escapeStrings) return "'" + EscapeString(res) + "'"; + else return res; + } }; -class cChannelLongVar : public cInternalVar { +class cChannelLongVar : public cInternalVar +{ public: cChannelLongVar() : cInternalVar("chlng") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - LOCK_CHANNELS_READ; - const cChannel *channel = Channels->GetByChannelID(e->ChannelID(), true); - string res = channel?channel->Name():""; - if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res; - } -}; - -class cChannelDataVar : public cInternalVar { - public: + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByChannelID(e->ChannelID(), true); + string res = channel ? channel->Name() : ""; + if (escapeStrings) return "'" + EscapeString(res) + "'"; + else return res; + } +}; + +class cChannelDataVar : public cInternalVar +{ +public: cChannelDataVar() : cInternalVar("chdata") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - LOCK_CHANNELS_READ; - const cChannel *channel = Channels->GetByChannelID(e->ChannelID(), true); - return channel?CHANNELSTRING(channel):""; - } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByChannelID(e->ChannelID(), true); + return channel ? CHANNELSTRING(channel) : ""; + } }; -class cChannelGroupVar : public cInternalVar { +class cChannelGroupVar : public cInternalVar +{ public: cChannelGroupVar() : cInternalVar("chgrp") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - ostringstream os; - LOCK_CHANNELS_READ; - const cChannel *channel = Channels->GetByChannelID(e->ChannelID(), true); - while(channel && !channel->GroupSep()) - channel = Channels->Prev(channel); - if (!channel || !channel->Name()) return ""; - string grpName = channel->Name(); - if (escapeStrings) return "'" + EscapeString(grpName) + "'"; else return grpName; - } -}; - -class cNEWTCmdVar : public cInternalVar { - public: + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + ostringstream os; + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByChannelID(e->ChannelID(), true); + while (channel && !channel->GroupSep()) + channel = Channels->Prev(channel); + if (!channel || !channel->Name()) return ""; + string grpName = channel->Name(); + if (escapeStrings) return "'" + EscapeString(grpName) + "'"; + else return grpName; + } +}; + +class cNEWTCmdVar : public cInternalVar +{ +public: cNEWTCmdVar() : cInternalVar("newtcmd") {} - string Evaluate(const cEvent* e, bool escapeStrings = false) - { - if (!e) return ""; - cTimer* timer = new cTimer(e); - string newtCmd = *(timer->ToText()); - if (escapeStrings) return "'" + EscapeString(newtCmd) + "'"; else return newtCmd; - } + string Evaluate(const cEvent* e, bool escapeStrings = false) { + if (!e) return ""; + cTimer* timer = new cTimer(e); + string newtCmd = *(timer->ToText()); + if (escapeStrings) return "'" + EscapeString(newtCmd) + "'"; + else return newtCmd; + } }; // independet variables -class cColonVar : public cInternalVar { - public: +class cColonVar : public cInternalVar +{ +public: cColonVar() : cInternalVar("colon") {} - string Evaluate(const cEvent*, bool escapeStrings = false) - { - return ":"; - } + string Evaluate(const cEvent*, bool escapeStrings = false) { + return ":"; + } }; -class cDateNowVar : public cInternalVar { - public: +class cDateNowVar : public cInternalVar +{ +public: cDateNowVar() : cInternalVar("datenow") {} - string Evaluate(const cEvent*, bool escapeStrings = false) - { - char date[9] = ""; - struct tm tm_r; - const time_t t = time(NULL); - tm *tm = localtime_r(&t, &tm_r); - strftime(date, sizeof(date), "%d.%m.%y", tm); - if (escapeStrings) return "'" + EscapeString(date) + "'"; else return date; - } -}; - -class cDateShortNowVar : public cInternalVar { + string Evaluate(const cEvent*, bool escapeStrings = false) { + char date[9] = ""; + struct tm tm_r; + const time_t t = time(NULL); + tm *tm = localtime_r(&t, &tm_r); + strftime(date, sizeof(date), "%d.%m.%y", tm); + if (escapeStrings) return "'" + EscapeString(date) + "'"; + else return date; + } +}; + +class cDateShortNowVar : public cInternalVar +{ public: cDateShortNowVar() : cInternalVar("dateshnow") {} - string Evaluate(const cEvent*, bool escapeStrings = false) - { - char dateshort[7] = ""; - struct tm tm_r; - const time_t t = time(NULL); - tm *tm = localtime_r(&t, &tm_r); - strftime(dateshort, sizeof(dateshort), "%d.%m.", tm); - if (escapeStrings) return "'" + EscapeString(dateshort) + "'"; else return dateshort; - } -}; - -class cDateISONowVar : public cInternalVar { + string Evaluate(const cEvent*, bool escapeStrings = false) { + char dateshort[7] = ""; + struct tm tm_r; + const time_t t = time(NULL); + tm *tm = localtime_r(&t, &tm_r); + strftime(dateshort, sizeof(dateshort), "%d.%m.", tm); + if (escapeStrings) return "'" + EscapeString(dateshort) + "'"; + else return dateshort; + } +}; + +class cDateISONowVar : public cInternalVar +{ public: cDateISONowVar() : cInternalVar("date_iso_now") {} - string Evaluate(const cEvent*, bool escapeStrings = false) - { - char dateISO[11] = ""; - struct tm tm_r; - const time_t t = time(NULL); - tm *tm = localtime_r(&t, &tm_r); - strftime(dateISO, sizeof(dateISO), "%Y-%m-%d", tm); - if (escapeStrings) return "'" + EscapeString(dateISO) + "'"; else return dateISO; - } -}; - -class cTimeNowVar : public cInternalVar { + string Evaluate(const cEvent*, bool escapeStrings = false) { + char dateISO[11] = ""; + struct tm tm_r; + const time_t t = time(NULL); + tm *tm = localtime_r(&t, &tm_r); + strftime(dateISO, sizeof(dateISO), "%Y-%m-%d", tm); + if (escapeStrings) return "'" + EscapeString(dateISO) + "'"; + else return dateISO; + } +}; + +class cTimeNowVar : public cInternalVar +{ public: cTimeNowVar() : cInternalVar("timenow") {} - string Evaluate(const cEvent*, bool escapeStrings = false) - { - return TIMESTRING(time(NULL)); - } + string Evaluate(const cEvent*, bool escapeStrings = false) { + return TIMESTRING(time(NULL)); + } }; -class cVideodirVar : public cInternalVar { - public: +class cVideodirVar : public cInternalVar +{ +public: cVideodirVar() : cInternalVar("videodir") {} - string Evaluate(const cEvent*, bool escapeStrings = false) - { - return cVideoDirectory::Name(); - } + string Evaluate(const cEvent*, bool escapeStrings = false) { + return cVideoDirectory::Name(); + } }; -class cPlugconfdirVar : public cInternalVar { - public: +class cPlugconfdirVar : public cInternalVar +{ +public: static string dir; cPlugconfdirVar() : cInternalVar("plugconfdir") {} - string Evaluate(const cEvent*, bool escapeStrings = false) - { - return dir; - } + string Evaluate(const cEvent*, bool escapeStrings = false) { + return dir; + } }; -class cEpgsearchconfdirVar : public cInternalVar { - public: +class cEpgsearchconfdirVar : public cInternalVar +{ +public: static string dir; cEpgsearchconfdirVar() : cInternalVar("epgsearchdir") {} - string Evaluate(const cEvent*, bool escapeStrings = false) - { - return CONFIGDIR; - } + string Evaluate(const cEvent*, bool escapeStrings = false) { + return CONFIGDIR; + } }; // timer variables -class cTimerVar { +class cTimerVar +{ static string nameSpace; const string name; - public: +public: cTimerVar(const string& Name) : name(Name) {} virtual ~cTimerVar() {} - string Name() { return "%" + nameSpace + "." + name + "%"; } + string Name() { + return "%" + nameSpace + "." + name + "%"; + } virtual string Evaluate(const cTimer* t) = 0; }; -class cTimerDateVar : public cTimerVar { - public: +class cTimerDateVar : public cTimerVar +{ +public: cTimerDateVar() : cTimerVar("date") {} - string Evaluate(const cTimer* t) - { - if (!t) return ""; - return DATESTRING(t->StartTime()); - } + string Evaluate(const cTimer* t) { + if (!t) return ""; + return DATESTRING(t->StartTime()); + } }; -class cTimerStartVar : public cTimerVar { - public: +class cTimerStartVar : public cTimerVar +{ +public: cTimerStartVar() : cTimerVar("start") {} - string Evaluate(const cTimer* t) - { - if (!t) return ""; - return TIMESTRING(t->StartTime()); - } + string Evaluate(const cTimer* t) { + if (!t) return ""; + return TIMESTRING(t->StartTime()); + } }; -class cTimerStopVar : public cTimerVar { - public: +class cTimerStopVar : public cTimerVar +{ +public: cTimerStopVar() : cTimerVar("stop") {} - string Evaluate(const cTimer* t) - { - if (!t) return ""; - return TIMESTRING(t->StopTime()); - } + string Evaluate(const cTimer* t) { + if (!t) return ""; + return TIMESTRING(t->StopTime()); + } }; -class cTimerFileVar : public cTimerVar { - public: +class cTimerFileVar : public cTimerVar +{ +public: cTimerFileVar() : cTimerVar("file") {} - string Evaluate(const cTimer* t) - { - if (!t) return ""; - return t->File(); - } + string Evaluate(const cTimer* t) { + if (!t) return ""; + return t->File(); + } }; -class cTimerChnrVar : public cTimerVar { - public: +class cTimerChnrVar : public cTimerVar +{ +public: cTimerChnrVar() : cTimerVar("chnr") {} - string Evaluate(const cTimer* t) - { - if (!t || !t->Channel()) return ""; - return NumToString(t->Channel()->Number()); - } + string Evaluate(const cTimer* t) { + if (!t || !t->Channel()) return ""; + return NumToString(t->Channel()->Number()); + } }; -class cTimerChannelShortVar : public cTimerVar { +class cTimerChannelShortVar : public cTimerVar +{ public: cTimerChannelShortVar() : cTimerVar("chsh") {} - string Evaluate(const cTimer* t) - { - if (!t || !t->Channel()) return ""; - return t->Channel()->ShortName(true); - } + string Evaluate(const cTimer* t) { + if (!t || !t->Channel()) return ""; + return t->Channel()->ShortName(true); + } }; -class cTimerChannelLongVar : public cTimerVar { +class cTimerChannelLongVar : public cTimerVar +{ public: cTimerChannelLongVar() : cTimerVar("chlng") {} - string Evaluate(const cTimer* t) - { - if (!t || !t->Channel()) return ""; - return t->Channel()->Name(); - } + string Evaluate(const cTimer* t) { + if (!t || !t->Channel()) return ""; + return t->Channel()->Name(); + } }; -class cTimerSearchVar : public cTimerVar { - public: +class cTimerSearchVar : public cTimerVar +{ +public: cTimerSearchVar() : cTimerVar("search") {} - string Evaluate(const cTimer* t) - { - if (!t) return ""; - cSearchExt* s = TriggeredFromSearchTimer(t); - if (!s) return ""; - return s->search; - } + string Evaluate(const cTimer* t) { + if (!t) return ""; + cSearchExt* s = TriggeredFromSearchTimer(t); + if (!s) return ""; + return s->search; + } }; -class cTimerSearchIDVar : public cTimerVar { - public: +class cTimerSearchIDVar : public cTimerVar +{ +public: cTimerSearchIDVar() : cTimerVar("searchid") {} - string Evaluate(const cTimer* t) - { - if (!t) return ""; - int ID = TriggeredFromSearchTimerID(t); - if (ID < 0) return ""; - return NumToString(ID); - } + string Evaluate(const cTimer* t) { + if (!t) return ""; + int ID = TriggeredFromSearchTimerID(t); + if (ID < 0) return ""; + return NumToString(ID); + } }; -class cTimerLiveIDVar : public cTimerVar { +class cTimerLiveIDVar : public cTimerVar +{ public: cTimerLiveIDVar() : cTimerVar("liveid") {} - string Evaluate(const cTimer* t) - { - if (!t || !t->Channel()) return ""; - ostringstream builder; - builder << *(t->Channel()->GetChannelID().ToString()) << ":" << t->WeekDays() << ":" - << t->Day() << ":" << t->Start() << ":" << t->Stop(); - string res = builder.str(); - res = "timer_" + res; - res = ReplaceAll(res, ".", "p"); - res = ReplaceAll(res, "-", "m"); - res = ReplaceAll(res, ":", "c"); - return res; - } + string Evaluate(const cTimer* t) { + if (!t || !t->Channel()) return ""; + ostringstream builder; + builder << *(t->Channel()->GetChannelID().ToString()) << ":" << t->WeekDays() << ":" + << t->Day() << ":" << t->Start() << ":" << t->Stop(); + string res = builder.str(); + res = "timer_" + res; + res = ReplaceAll(res, ".", "p"); + res = ReplaceAll(res, "-", "m"); + res = ReplaceAll(res, ":", "c"); + return res; + } }; // search variables -class cSearchVar { +class cSearchVar +{ const string name; static string nameSpace; - public: +public: cSearchVar(const string& Name) : name(Name) {} virtual ~cSearchVar() {} - string Name() { return "%" + nameSpace + "." + name + "%"; } + string Name() { + return "%" + nameSpace + "." + name + "%"; + } virtual string Evaluate(const cSearchExt* s) = 0; }; -class cSearchQueryVar : public cSearchVar { +class cSearchQueryVar : public cSearchVar +{ public: cSearchQueryVar() : cSearchVar("query") {} - string Evaluate(const cSearchExt* s) - { - if (!s) return ""; - return s->search; - } + string Evaluate(const cSearchExt* s) { + if (!s) return ""; + return s->search; + } }; -class cSearchSeriesVar : public cSearchVar { +class cSearchSeriesVar : public cSearchVar +{ public: cSearchSeriesVar() : cSearchVar("series") {} - string Evaluate(const cSearchExt* s) - { - if (!s) return ""; - return NumToString(s->useEpisode); - } + string Evaluate(const cSearchExt* s) { + if (!s) return ""; + return NumToString(s->useEpisode); + } }; -class cUserVars : public cList<cUserVar> { - public: +class cUserVars : public cList<cUserVar> +{ +public: cTitleVar titleVar; cSubtitleVar subtitleVar; cSummaryVar summaryVar; @@ -778,113 +825,110 @@ class cUserVars : public cList<cUserVar> { map<string, cTimerVar*> internalTimerVars; map<string, cSearchVar*> internalSearchVars; - void InitInternalVars() - { - internalVars[titleVar.Name()] = &titleVar; - internalVars[subtitleVar.Name()] = &subtitleVar; - internalVars[summaryVar.Name()] = &summaryVar; - internalVars[htmlsummaryVar.Name()] = &htmlsummaryVar; - internalVars[eventIDVar.Name()] = &eventIDVar; - internalVars[liveeventIDVar.Name()] = &liveeventIDVar; - internalVars[timeVar.Name()] = &timeVar; - internalVars[timeEndVar.Name()] = &timeEndVar; - internalVars[time_wVar.Name()] = &time_wVar; - internalVars[time_dVar.Name()] = &time_dVar; - internalVars[time_lngVar.Name()] = &time_lngVar; - internalVars[time_spanVar.Name()] = &time_spanVar; - internalVars[length_Var.Name()] = &length_Var; - internalVars[dateVar.Name()] = &dateVar; - internalVars[dateShortVar.Name()] = &dateShortVar; - internalVars[dateISOVar.Name()] = &dateISOVar; - internalVars[yearVar.Name()] = &yearVar; - internalVars[monthVar.Name()] = &monthVar; - internalVars[dayVar.Name()] = &dayVar; - internalVars[weekVar.Name()] = &weekVar; - internalVars[chnrVar.Name()] = &chnrVar; - internalVars[chShortVar.Name()] = &chShortVar; - internalVars[chLongVar.Name()] = &chLongVar; - internalVars[chDataVar.Name()] = &chDataVar; - internalVars[chGroupVar.Name()] = &chGroupVar; - internalVars[newtCmdVar.Name()] = &newtCmdVar; - - internalVars[colonVar.Name()] = &colonVar; - internalVars[dateNowVar.Name()] = &dateNowVar; - internalVars[dateShortNowVar.Name()] = &dateShortNowVar; - internalVars[dateISONowVar.Name()] = &dateISONowVar; - internalVars[timeNowVar.Name()] = &timeNowVar; - internalVars[videodirVar.Name()] = &videodirVar; - internalVars[plugconfdirVar.Name()] = &plugconfdirVar; - internalVars[epgsearchconfdirVar.Name()] = &epgsearchconfdirVar; - - internalTimerVars[timerDateVar.Name()] = &timerDateVar; - internalTimerVars[timerStartVar.Name()] = &timerStartVar; - internalTimerVars[timerStopVar.Name()] = &timerStopVar; - internalTimerVars[timerFileVar.Name()] = &timerFileVar; - internalTimerVars[timerChnrVar.Name()] = &timerChnrVar; - internalTimerVars[timerChShortVar.Name()] = &timerChShortVar; - internalTimerVars[timerChLongVar.Name()] = &timerChLongVar; - internalTimerVars[timerSearchVar.Name()] = &timerSearchVar; - internalTimerVars[timerSearchIDVar.Name()] = &timerSearchIDVar; - internalTimerVars[timerLiveIDVar.Name()] = &timerLiveIDVar; - - internalSearchVars[searchQueryVar.Name()] = &searchQueryVar; - internalSearchVars[searchSeriesVar.Name()] = &searchSeriesVar; - } - - void InitExtEPGVars() - { - cSearchExtCat* SearchExtCat = SearchExtCats.First(); - while (SearchExtCat) - { - string varName = SearchExtCat->name; - std::transform(varName.begin(), varName.end(), varName.begin(), tolower); - cExtEPGVar* extEPGVar = new cExtEPGVar(varName); - extEPGVars[extEPGVar->Name()] = extEPGVar; - SearchExtCat = SearchExtCats.Next(SearchExtCat); - } - } - void ResetCache() - { - cUserVar* var = First(); - while (var) - { - var->ResetCache(); - var = Next(var); - } - } - ~cUserVars() - { - std::map<string, cExtEPGVar*>::iterator evar; - for (evar = extEPGVars.begin(); evar != extEPGVars.end(); ++evar) - delete evar->second; - extEPGVars.clear(); - - std::set<cUserVar*>::iterator uvar; - for (uvar = userVars.begin(); uvar != userVars.end(); ++uvar) - delete (*uvar); - userVars.clear(); - } + void InitInternalVars() { + internalVars[titleVar.Name()] = &titleVar; + internalVars[subtitleVar.Name()] = &subtitleVar; + internalVars[summaryVar.Name()] = &summaryVar; + internalVars[htmlsummaryVar.Name()] = &htmlsummaryVar; + internalVars[eventIDVar.Name()] = &eventIDVar; + internalVars[liveeventIDVar.Name()] = &liveeventIDVar; + internalVars[timeVar.Name()] = &timeVar; + internalVars[timeEndVar.Name()] = &timeEndVar; + internalVars[time_wVar.Name()] = &time_wVar; + internalVars[time_dVar.Name()] = &time_dVar; + internalVars[time_lngVar.Name()] = &time_lngVar; + internalVars[time_spanVar.Name()] = &time_spanVar; + internalVars[length_Var.Name()] = &length_Var; + internalVars[dateVar.Name()] = &dateVar; + internalVars[dateShortVar.Name()] = &dateShortVar; + internalVars[dateISOVar.Name()] = &dateISOVar; + internalVars[yearVar.Name()] = &yearVar; + internalVars[monthVar.Name()] = &monthVar; + internalVars[dayVar.Name()] = &dayVar; + internalVars[weekVar.Name()] = &weekVar; + internalVars[chnrVar.Name()] = &chnrVar; + internalVars[chShortVar.Name()] = &chShortVar; + internalVars[chLongVar.Name()] = &chLongVar; + internalVars[chDataVar.Name()] = &chDataVar; + internalVars[chGroupVar.Name()] = &chGroupVar; + internalVars[newtCmdVar.Name()] = &newtCmdVar; + + internalVars[colonVar.Name()] = &colonVar; + internalVars[dateNowVar.Name()] = &dateNowVar; + internalVars[dateShortNowVar.Name()] = &dateShortNowVar; + internalVars[dateISONowVar.Name()] = &dateISONowVar; + internalVars[timeNowVar.Name()] = &timeNowVar; + internalVars[videodirVar.Name()] = &videodirVar; + internalVars[plugconfdirVar.Name()] = &plugconfdirVar; + internalVars[epgsearchconfdirVar.Name()] = &epgsearchconfdirVar; + + internalTimerVars[timerDateVar.Name()] = &timerDateVar; + internalTimerVars[timerStartVar.Name()] = &timerStartVar; + internalTimerVars[timerStopVar.Name()] = &timerStopVar; + internalTimerVars[timerFileVar.Name()] = &timerFileVar; + internalTimerVars[timerChnrVar.Name()] = &timerChnrVar; + internalTimerVars[timerChShortVar.Name()] = &timerChShortVar; + internalTimerVars[timerChLongVar.Name()] = &timerChLongVar; + internalTimerVars[timerSearchVar.Name()] = &timerSearchVar; + internalTimerVars[timerSearchIDVar.Name()] = &timerSearchIDVar; + internalTimerVars[timerLiveIDVar.Name()] = &timerLiveIDVar; + + internalSearchVars[searchQueryVar.Name()] = &searchQueryVar; + internalSearchVars[searchSeriesVar.Name()] = &searchSeriesVar; + } + + void InitExtEPGVars() { + cSearchExtCat* SearchExtCat = SearchExtCats.First(); + while (SearchExtCat) { + string varName = SearchExtCat->name; + std::transform(varName.begin(), varName.end(), varName.begin(), tolower); + cExtEPGVar* extEPGVar = new cExtEPGVar(varName); + extEPGVars[extEPGVar->Name()] = extEPGVar; + SearchExtCat = SearchExtCats.Next(SearchExtCat); + } + } + void ResetCache() { + cUserVar* var = First(); + while (var) { + var->ResetCache(); + var = Next(var); + } + } + ~cUserVars() { + std::map<string, cExtEPGVar*>::iterator evar; + for (evar = extEPGVars.begin(); evar != extEPGVars.end(); ++evar) + delete evar->second; + extEPGVars.clear(); + + std::set<cUserVar*>::iterator uvar; + for (uvar = userVars.begin(); uvar != userVars.end(); ++uvar) + delete(*uvar); + userVars.clear(); + } cUserVar* GetFromName(const string& varName, bool log = true); }; extern cUserVars UserVars; -class cUserVarLine : public cListObject { +class cUserVarLine : public cListObject +{ public: - static bool Parse(char *s); + static bool Parse(char *s); }; class cUserVarFile : public cConfig<cUserVarLine> { public: - cUserVarFile() { UserVars.Clear(); }; + cUserVarFile() { + UserVars.Clear(); + }; }; class cVarExpr { string expr; - public: +public: set<cUserVar*> usedVars; cVarExpr(const string& Expr) : expr(Expr) {} string Evaluate(const cEvent* e = NULL); |