summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY5
-rw-r--r--eit.c80
2 files changed, 32 insertions, 53 deletions
diff --git a/HISTORY b/HISTORY
index e68927dc..11c476b4 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1580,7 +1580,10 @@ Video Disk Recorder Revision History
- Fixed a bug when pressing the "Blue" button in the main menu without having
displayed it (thanks to Oliver Endriss for reporting this one).
-2002-10-06: Version 1.1.13
+2002-10-07: Version 1.1.13
- Added cDevice::DeviceNumber() to get the number of a device, not counting any
gaps that might be in the index count.
+- Fixed fetching the current/next information to handle cases where the duration
+ of an event is set wrongly and would last beyond the start time of the next
+ event.
diff --git a/eit.c b/eit.c
index 48735df6..697eec4f 100644
--- a/eit.c
+++ b/eit.c
@@ -16,7 +16,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: eit.c 1.54 2002/10/06 10:31:38 kls Exp $
+ * $Id: eit.c 1.55 2002/10/07 16:24:04 kls Exp $
***************************************************************************/
#include "eit.h"
@@ -629,50 +629,26 @@ cEventInfo *cSchedule::AddEvent(cEventInfo *EventInfo)
return EventInfo;
}
-/** */
-const cEventInfo * cSchedule::GetPresentEvent() const
+const cEventInfo *cSchedule::GetPresentEvent(void) const
{
- // checking temporal sanity of present event (kls 2000-11-01)
- time_t now = time(NULL);
-//XXX if (pPresent && !(pPresent->GetTime() <= now && now <= pPresent->GetTime() + pPresent->GetDuration()))
- {
- cEventInfo *pe = Events.First();
- while (pe != NULL)
- {
- if (pe->GetTime() <= now && now <= pe->GetTime() + pe->GetDuration())
- return pe;
- pe = Events.Next(pe);
- }
- }
- return NULL;//XXX
- return pPresent;
+ return GetEventAround(time(NULL));
}
-/** */
-const cEventInfo * cSchedule::GetFollowingEvent() const
+
+const cEventInfo *cSchedule::GetFollowingEvent(void) const
{
- // checking temporal sanity of following event (kls 2000-11-01)
- time_t now = time(NULL);
- const cEventInfo *pr = GetPresentEvent(); // must have it verified!
-if (pr)//XXX if (pFollowing && !(pr && pr->GetTime() + pr->GetDuration() <= pFollowing->GetTime()))
- {
- int minDt = INT_MAX;
- cEventInfo *pe = Events.First(), *pf = NULL;
- while (pe != NULL)
- {
- int dt = pe->GetTime() - now;
- if (dt > 0 && dt < minDt)
- {
- minDt = dt;
- pf = pe;
+ const cEventInfo *pe = NULL;
+ time_t now = time(NULL);
+ time_t delta = INT_MAX;
+ for (cEventInfo *p = Events.First(); p; p = Events.Next(p)) {
+ time_t dt = p->GetTime() - now;
+ if (dt > 0 && dt < delta) {
+ delta = dt;
+ pe = p;
}
- pe = Events.Next(pe);
}
- return pf;
- }
- return NULL;//XXX
- return pFollowing;
+ return pe;
}
-/** */
+
void cSchedule::SetServiceID(unsigned short servid)
{
uServiceID = servid;
@@ -701,21 +677,21 @@ const cEventInfo * cSchedule::GetEvent(unsigned short uEventID, time_t tTime) co
return pt;
}
-/** */
-const cEventInfo * cSchedule::GetEventAround(time_t tTime) const
-{
- cEventInfo *pe = Events.First();
- while (pe != NULL)
- {
- if (pe->GetTime() <= tTime && tTime <= pe->GetTime() + pe->GetDuration())
- return pe;
-
- pe = Events.Next(pe);
- }
- return NULL;
+const cEventInfo *cSchedule::GetEventAround(time_t Time) const
+{
+ const cEventInfo *pe = NULL;
+ time_t delta = INT_MAX;
+ for (cEventInfo *p = Events.First(); p; p = Events.Next(p)) {
+ time_t dt = Time - p->GetTime();
+ if (dt >= 0 && dt < delta && p->GetTime() + p->GetDuration() >= Time) {
+ delta = dt;
+ pe = p;
+ }
+ }
+ return pe;
}
-/** */
+
bool cSchedule::SetPresentEvent(cEventInfo *pEvent)
{
if (pPresent != NULL)