From 4c4b69044e35b11bf087098583ba7b04bfc4a513 Mon Sep 17 00:00:00 2001 From: Christian Wieninger Date: Mon, 9 Jun 2008 22:02:49 +0200 Subject: additional user variables and bug fix with 0 length events and progressbar --- HISTORY | 6 ++++ HISTORY.DE | 6 ++++ doc-src/en/epgsearch.4.txt | 3 ++ menu_whatson.c | 3 +- uservars.h | 69 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 86 insertions(+), 1 deletion(-) diff --git a/HISTORY b/HISTORY index 16f7d85..9f12a92 100644 --- a/HISTORY +++ b/HISTORY @@ -3,10 +3,16 @@ VDR Plugin 'epgsearch' Revision History 2008-xx-xx; Version 0.9.25 new: +- new internal variables: + * %day%, %month% and %year% which return the numeric day, month and year + (with century) of an event + * %chgrp% returns the VDR channel group name corresponding to an event - french translation update, thanks to Patrice Staudt fixes: - fixed a crash when pressing 'Ok' in an empty timers done menu +- fixed a crash when using the progressbar and events with 0 duration exist, thanks + to egal@vdrportal 2008-04-29: Version 0.9.24 new: diff --git a/HISTORY.DE b/HISTORY.DE index 8b040a3..98d0b37 100644 --- a/HISTORY.DE +++ b/HISTORY.DE @@ -3,10 +3,16 @@ VDR Plugin 'epgsearch' Revision History 2008-xx-xx; Version 0.9.25 neu: +- neue interne Variablen: + * %day%, %month% und %year% liefern den numerische Tag, das Monat und das + Jahr (mit Jahrhundert) einer Sendung + * %chgrp% liefert die VDR Kanalgruppe einer Sendung - Update der französischen Übersetzung, Danke an Patrice Staudt fixes: - Absturz beim Drücken von 'Ok' in leerem Menü erledigter Timer behoben +- Absturz bei Verwendung des Fortschrittsbalkens in Verbindung mit Sendungen + der Länge 0 behoben. Danke an egal@vdrportal 2008-04-29: Version 0.9.24 diff --git a/doc-src/en/epgsearch.4.txt b/doc-src/en/epgsearch.4.txt index 2b759d2..bcd7512 100644 --- a/doc-src/en/epgsearch.4.txt +++ b/doc-src/en/epgsearch.4.txt @@ -523,6 +523,9 @@ The following variables exist: %timeend% - end time in format HH:MM %date% - start date in format TT.MM.YY %datesh% - start date in format TT.MM. + %year% - year with century + %month% - month (1-12) + %day% - day (1-31) %time_w% - weekday name %time_d% - start day in format TT %time_lng% - start time in seconds since 1970-01-01 00:00 diff --git a/menu_whatson.c b/menu_whatson.c index 41d3ae5..973d5cf 100644 --- a/menu_whatson.c +++ b/menu_whatson.c @@ -102,7 +102,8 @@ bool cMenuMyScheduleItem::Update(bool Force) if (mode == showNow) { int dur = event->Duration(); - frac = ((now - startTime) * 8 + (dur >> 1)) / dur; + if (dur != 0) + frac = ((now - startTime) * 8 + (dur >> 1)) / dur; } if (mode == showNext) frac = ( ( 30*60 - min((long int)30*60, startTime - now) ) * 8 + 15*60 ) / (30*60); diff --git a/uservars.h b/uservars.h index d47f5ea..5d6bcfe 100644 --- a/uservars.h +++ b/uservars.h @@ -303,6 +303,51 @@ public: } }; +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 { +public: + cMonthVar() : cInternalVar("%year%") {} + 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 cChannelNrVar : public cInternalVar { public: cChannelNrVar() : cInternalVar("%chnr%") {} @@ -349,6 +394,22 @@ class cChannelDataVar : public cInternalVar { } }; +class cChannelGroupVar : public cInternalVar { +public: + cChannelGroupVar() : cInternalVar("%chgrp%") {} + string Evaluate(const cEvent* e, bool escapeStrings = false) + { + if (!e) return ""; + ostringstream os; + 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; + } +}; + // independet variables class cColonVar : public cInternalVar { public: @@ -565,10 +626,14 @@ class cUserVars : public cList { cLength_Var length_Var; cDateVar dateVar; cDateShortVar dateShortVar; + cYearVar yearVar; + cMonthVar monthVar; + cDayVar dayVar; cChannelNrVar chnrVar; cChannelShortVar chShortVar; cChannelLongVar chLongVar; cChannelDataVar chDataVar; + cChannelGroupVar chGroupVar; cSearchQueryVar searchQueryVar; cColonVar colonVar; @@ -611,10 +676,14 @@ class cUserVars : public cList { internalVars[length_Var.Name()] = &length_Var; internalVars[dateVar.Name()] = &dateVar; internalVars[dateShortVar.Name()] = &dateShortVar; + internalVars[yearVar.Name()] = &yearVar; + internalVars[monthVar.Name()] = &monthVar; + internalVars[dayVar.Name()] = &dayVar; internalVars[chnrVar.Name()] = &chnrVar; internalVars[chShortVar.Name()] = &chShortVar; internalVars[chLongVar.Name()] = &chLongVar; internalVars[chDataVar.Name()] = &chDataVar; + internalVars[chGroupVar.Name()] = &chGroupVar; internalVars[colonVar.Name()] = &colonVar; internalVars[dateNowVar.Name()] = &dateNowVar; -- cgit v1.2.3