From 9384e56566f56e77d577319a42929e708936e7c7 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 14 Mar 2004 18:00:00 +0100 Subject: =?UTF-8?q?Version=201.3.6=20-=20Completed=20the=20Finnish=20OSD?= =?UTF-8?q?=20texts=20(thanks=20to=20Rolf=20Ahrenberg).=20-=20Fixed=20some?= =?UTF-8?q?=20descriptor=20handling=20in=20'libsi'=20(thanks=20to=20St?= =?UTF-8?q?=C3=A9phane=20Est=C3=A9-Gracias).=20-=20Fixed=20handling=20the?= =?UTF-8?q?=20current=20menu=20item=20(thanks=20to=20Marc=20Hoppe).=20-=20?= =?UTF-8?q?Fixed=20assigning=20events=20to=20timers=20(they=20no=20longer?= =?UTF-8?q?=20get=20"stuck").=20-=20Added=20log=20entries=20whenever=20the?= =?UTF-8?q?=20running=20status=20of=20an=20event=20changes=20(currently=20?= =?UTF-8?q?=20=20only=20logging=20the=20first=2030=20channels).=20-=20Fixe?= =?UTF-8?q?d=20handling=20timers=20in=20VPS=20margin=20if=20the=20EPG=20sc?= =?UTF-8?q?an=20is=20turned=20on=20(the=20EPG=20scan=20=20=20switched=20th?= =?UTF-8?q?e=20device=20away=20from=20the=20channel,=20so=20it=20wouldn't?= =?UTF-8?q?=20see=20the=20change=20of=20=20=20the=20running=20status).=20-?= =?UTF-8?q?=20Fixed=20handling=20"itemized"=20texts=20in=20EPG=20data=20(t?= =?UTF-8?q?hanks=20to=20St=C3=A9phane=20Est=C3=A9-Gracias=20=20=20for=20po?= =?UTF-8?q?inting=20out=20this=20problem,=20and=20Marcel=20Wiesweg=20for?= =?UTF-8?q?=20improving=20'libsi').=20-=20Fixed=20handling=20VPS=20times?= =?UTF-8?q?=20at=20year=20boundaries.=20-=20Avoiding=20too=20many=20consec?= =?UTF-8?q?utive=20"ring=20buffer=20overflow"=20messages=20(which=20only?= =?UTF-8?q?=20=20=20slowed=20down=20performance=20even=20more).=20-=20Taki?= =?UTF-8?q?ng=20the=20Sid=20into=20account=20when=20detecting=20version=20?= =?UTF-8?q?changes=20in=20processing=20the=20=20=20PMT=20(thanks=20to=20St?= =?UTF-8?q?=C3=A9phane=20Est=C3=A9-Gracias=20for=20pointing=20out=20this?= =?UTF-8?q?=20problem).=20-=20Completed=20the=20Russian=20OSD=20texts=20(t?= =?UTF-8?q?hanks=20to=20Vyacheslav=20Dikonov).=20-=20Any=20newline=20chara?= =?UTF-8?q?cters=20in=20the=20'description'=20of=20EPG=20events=20are=20no?= =?UTF-8?q?w=20preserved=20=20=20to=20allow=20texts=20to=20be=20displayed?= =?UTF-8?q?=20the=20way=20the=20tv=20stations=20have=20formatted=20them.?= =?UTF-8?q?=20=20=20This=20was=20also=20necessary=20to=20better=20display?= =?UTF-8?q?=20itemized=20texts.=20-=20Fixed=20detecting=20the=20running=20?= =?UTF-8?q?status=20in=20case=20an=20empty=20EPG=20event=20is=20broadcast?= =?UTF-8?q?=20(thanks=20=20=20to=20Michael=20Pennewi=C3=9F=20for=20pointin?= =?UTF-8?q?g=20this=20out).=20-=20Improved=20performance=20when=20paging?= =?UTF-8?q?=20through=20very=20long=20menu=20lists.=20-=20Removed=20cSched?= =?UTF-8?q?ule::GetEventNumber()=20and=20cSchedule::NumEvents().=20There?= =?UTF-8?q?=20is=20now=20=20=20cSchedule::Events()=20that=20returns=20the?= =?UTF-8?q?=20list=20of=20events=20directly.=20-=20Avoiding=20occasional?= =?UTF-8?q?=20bad=20responsiveness=20to=20user=20interaction=20caused=20by?= =?UTF-8?q?=20assigning=20=20=20events=20to=20timers.=20-=20Now=20explicit?= =?UTF-8?q?ly=20turning=20on=20the=20LNB=20power=20at=20startup,=20because?= =?UTF-8?q?=20newer=20drivers=20don't=20=20=20do=20this=20any=20more=20(th?= =?UTF-8?q?anks=20to=20Oliver=20Endriss=20for=20pointing=20this=20out).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- timers.c | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) (limited to 'timers.c') diff --git a/timers.c b/timers.c index b29d6c8..6969365 100644 --- a/timers.c +++ b/timers.c @@ -4,14 +4,13 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: timers.c 1.9 2004/02/13 15:37:49 kls Exp kls $ + * $Id: timers.c 1.12 2004/03/14 13:27:57 kls Exp $ */ #include "timers.h" #include #include "channels.h" #include "i18n.h" -#include "libsi/si.h" // IMPORTANT NOTE: in the 'sscanf()' calls there is a blank after the '%d' // format characters in order to allow any number of blanks after a numeric @@ -333,8 +332,8 @@ bool cTimer::Matches(time_t t, bool Directly) if (HasFlags(tfActive)) { if (HasFlags(tfVps) && !Directly && event && event->Vps()) { startTime = event->StartTime(); - stopTime = startTime + event->Duration(); - return event->RunningStatus() > SI::RunningStatusNotRunning; + stopTime = event->EndTime(); + return event->IsRunning(true); } return startTime <= t && t < stopTime; // must stop *before* stopTime to allow adjacent timers } @@ -350,9 +349,14 @@ int cTimer::Matches(const cEvent *Event) bool m1 = Matches(t1, true); bool m2 = UseVps ? m1 : Matches(t2, true); startTime = stopTime = 0; - if (m1 && m2) + if (m1 && m2) { + if (UseVps && Event->IsRunning(true)) + return tmFull; + if (time(NULL) > Event->EndTime()) + return tmNone; return tmFull; - if (m1 || m2) + } + if ((m1 || m2) && time(NULL) <= Event->EndTime()) return tmPartial; } return tmNone; @@ -381,6 +385,8 @@ void cTimer::SetEvent(const cEvent *Event) sprintf(vpsbuf, "(VPS: %s) ", Event->GetVpsString()); isyslog("timer %d (%d %04d-%04d '%s') set to event %s %s-%s %s'%s'", Index() + 1, Channel()->Number(), start, stop, file, Event->GetDateString(), Event->GetTimeString(), Event->GetEndTimeString(), vpsbuf, Event->Title()); } + else + isyslog("timer %d (%d %04d-%04d '%s') set to no event", Index() + 1, Channel()->Number(), start, stop, file); event = Event; } } @@ -500,7 +506,7 @@ cTimer *cTimers::GetNextActiveTimer(void) void cTimers::SetEvents(void) { - cSchedulesLock SchedulesLock; + cSchedulesLock SchedulesLock(false, 100); const cSchedules *Schedules = cSchedules::Schedules(SchedulesLock); if (Schedules) { for (cTimer *ti = First(); ti; ti = Next(ti)) { @@ -508,19 +514,17 @@ void cTimers::SetEvents(void) const cEvent *Event = NULL; if (Schedule) { //XXX what if the Schedule doesn't have any VPS??? - const cEvent *e; int Match = tmNone; - int i = 0; - while ((e = Schedule->GetEventNumber(i++)) != NULL) { - int m = ti->Matches(e); - if (m > Match) { - Match = m; - Event = e; - if (Match == tmFull) - break; - //XXX what if there's another event with the same VPS time??? - } - } + for (const cEvent *e = Schedule->Events()->First(); e; e = Schedule->Events()->Next(e)) { + int m = ti->Matches(e); + if (m > Match) { + Match = m; + Event = e; + if (Match == tmFull) + break; + //XXX what if there's another event with the same VPS time??? + } + } } ti->SetEvent(Event); } -- cgit v1.2.3