diff --git a/HISTORY b/HISTORY index 6680d1c4..a009605f 100644 --- a/HISTORY +++ b/HISTORY @@ -9641,7 +9641,7 @@ Video Disk Recorder Revision History - No longer switching devices for pattern timers (thanks to Helmut Binder). - cTimer::TriggerRespawn() now only acts on local timers. -2021-04-17: +2021-04-18: - When spawning pattern timers, the new function cTimers::GetTimerForEvent() is now used to check whether a matching event already has a local spawned timer. Reason: creating a timer @@ -9658,3 +9658,5 @@ Video Disk Recorder Revision History the full margins. - Fixed the timer indicator in the Schedule menu in case an event is already over, but the timer is still recording. +- The new functions cTimer::Start/StopTimeEvent() are now used in the LCARS skin to display + the start/stop times of timers in the main menu. diff --git a/skinlcars.c b/skinlcars.c index 36d561f7..190839fc 100644 --- a/skinlcars.c +++ b/skinlcars.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: skinlcars.c 5.1 2020/12/26 15:49:01 kls Exp $ + * $Id: skinlcars.c 5.2 2021/04/18 14:56:40 kls Exp $ */ // "Star Trek: The Next Generation"(R) is a registered trademark of Paramount Pictures, @@ -1213,14 +1213,15 @@ void cSkinLCARSDisplayMenu::DrawTimer(const cTimer *Timer, int y, bool MultiRec) osd->DrawRectangle(xs00, y, xs03 - 1, y + lineHeight - 1, ColorBg); cString Date; if (Timer->Recording()) - Date = cString::sprintf("-%s", *TimeString(Timer->StopTime())); + Date = cString::sprintf("-%s", *TimeString(Timer->StopTimeEvent())); else { time_t Now = time(NULL); + time_t StartTime = Timer->StartTimeEvent(); cString Today = WeekDayName(Now); - cString Time = TimeString(Timer->StartTime()); - cString Day = WeekDayName(Timer->StartTime()); - if (Timer->StartTime() > Now + 6 * SECSINDAY) - Date = DayDateTime(Timer->StartTime()); + cString Time = TimeString(StartTime); + cString Day = WeekDayName(StartTime); + if (StartTime > Now + 6 * SECSINDAY) + Date = DayDateTime(StartTime); else if (strcmp(Day, Today) != 0) Date = cString::sprintf("%s %s", *Day, *Time); else diff --git a/timers.c b/timers.c index a3931d3a..fed6d88d 100644 --- a/timers.c +++ b/timers.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: timers.c 5.13 2021/04/16 16:26:47 kls Exp $ + * $Id: timers.c 5.14 2021/04/18 14:56:40 kls Exp $ */ #include "timers.h" @@ -713,6 +713,28 @@ time_t cTimer::StopTime(void) const return stopTime; } +time_t cTimer::StartTimeEvent(void) const +{ + if (event) { + if (HasFlags(tfVps) && event->Vps()) + return event->StartTime(); + else if (HasFlags(tfSpawned)) + return event->StartTime() - Setup.MarginStart * 60; + } + return StartTime(); +} + +time_t cTimer::StopTimeEvent(void) const +{ + if (event) { + if (HasFlags(tfVps) && event->Vps()) + return event->EndTime(); + else if (HasFlags(tfSpawned)) + return event->EndTime() + Setup.MarginStop * 60; + } + return StopTime(); +} + #define EPGLIMITBEFORE (1 * 3600) // Time in seconds before a timer's start time and #define EPGLIMITAFTER (1 * 3600) // after its stop time within which EPG events will be taken into consideration. diff --git a/timers.h b/timers.h index fea94aec..cffd5d09 100644 --- a/timers.h +++ b/timers.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: timers.h 5.6 2021/04/13 13:54:00 kls Exp $ + * $Id: timers.h 5.7 2021/04/18 14:56:40 kls Exp $ */ #ifndef __TIMERS_H @@ -32,7 +32,7 @@ class cTimer : public cListObject { friend class cMenuEditTimer; private: int id; - mutable time_t startTime, stopTime; + mutable time_t startTime, stopTime; ///< the time_t value calculated from 'day', 'start' and 'stop' int scheduleStateSet; int scheduleStateSpawn; int scheduleStateAdjust; @@ -42,8 +42,8 @@ private: const cChannel *channel; mutable time_t day; ///< midnight of the day this timer shall hit, or of the first day it shall hit in case of a repeating timer int weekdays; ///< bitmask, lowest bits: SSFTWTM (the 'M' is the LSB) - int start; - int stop; + int start; ///< the start and stop time of this timer as given by the user, + int stop; ///< in the form hhmm, with hh (00..23) and mm (00..59) added as hh*100+mm int priority; int lifetime; mutable char pattern[NAME_MAX * 2 + 1]; // same size as 'file', to be able to initially fill 'pattern' with 'file' in the 'Edit timer' menu @@ -96,8 +96,10 @@ public: bool Matches(time_t t = 0, bool Directly = false, int Margin = 0) const; eTimerMatch Matches(const cEvent *Event, int *Overlap = NULL) const; bool Expired(void) const; - time_t StartTime(void) const; - time_t StopTime(void) const; + time_t StartTime(void) const; ///< the start time as given by the user + time_t StopTime(void) const; ///< the stop time as given by the user + time_t StartTimeEvent(void) const; ///< the start/stop times as given by the event (for VPS timers), by event plus margins (for spawned non-VPS timers), + time_t StopTimeEvent(void) const; ///< or by the user (for normal timers) void SetId(int Id); cTimer *SpawnPatternTimer(const cEvent *Event, cTimers *Timers); bool SpawnPatternTimers(const cSchedules *Schedules, cTimers *Timers);