From 5f30c7cbac03c534df40aa437399f45747d9e7ae Mon Sep 17 00:00:00 2001 From: Jasmin Jessich Date: Mon, 3 Apr 2017 21:33:33 +0200 Subject: [PATCH] Patched with vdr.epgsearch-exttimeredit-2.3.1.diff --- menu.c | 56 +++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/menu.c b/menu.c index 02aa7a9..561860c 100644 --- a/menu.c +++ b/menu.c @@ -1151,6 +1151,7 @@ eOSState cMenuEditTimer::ProcessKey(eKeys Key) class cMenuTimerItem : public cOsdItem { private: const cTimer *timer; + void DoSet(void); public: cMenuTimerItem(const cTimer *Timer); virtual int Compare(const cListObject &ListObject) const; @@ -1162,7 +1163,7 @@ public: cMenuTimerItem::cMenuTimerItem(const cTimer *Timer) { timer = Timer; - Set(); + DoSet(); } int cMenuTimerItem::Compare(const cListObject &ListObject) const @@ -1172,6 +1173,19 @@ int cMenuTimerItem::Compare(const cListObject &ListObject) const void cMenuTimerItem::Set(void) { + // check for deleted timer + LOCK_TIMERS_READ; + for (const cTimer *t = Timers->First(); ; t = Timers->Next(t)) { + if (t == timer) + break; // timer still there + if (t == NULL) + return; // no matching timer found + } + DoSet(); +} + +void cMenuTimerItem::DoSet(void) +{ cString day, name(""); if (timer->WeekDays()) day = timer->PrintDay(0, timer->WeekDays(), false); @@ -1219,8 +1233,7 @@ private: cStateKey timersStateKey; int helpKeys; void Set(void); - eOSState Edit(void); - eOSState New(void); + eOSState Edit(bool New = false); eOSState Delete(void); eOSState OnOff(void); eOSState Info(void); @@ -1312,20 +1325,29 @@ eOSState cMenuTimers::OnOff(void) return osContinue; } -eOSState cMenuTimers::Edit(void) +eOSState cMenuTimers::Edit(bool New) { - if (HasSubMenu() || Count() == 0) - return osContinue; - return AddSubMenu(new cMenuEditTimer(GetTimer())); -} - -eOSState cMenuTimers::New(void) -{ - if (HasSubMenu()) + if (HasSubMenu() || Count() == 0 && !New) return osContinue; cTimer *Timer = new cTimer; if (*Setup.SVDRPDefaultHost) Timer->SetRemote(Setup.SVDRPDefaultHost); + // Data structure for service "Epgsearch-exttimeredit-v1.0" + struct Epgsearch_exttimeredit_v1_0 + { + // in + cTimer* timer; // pointer to the timer to edit + bool bNew; // flag that indicates, if this is a new timer or an existing one + const cEvent* event; // pointer to the event corresponding to this timer (may be NULL) + // out + cOsdMenu* pTimerMenu; // pointer to the menu of results + } exttimeredit; + exttimeredit.timer = New ? (new cTimer) : GetTimer(); + exttimeredit.bNew = New; + exttimeredit.event = exttimeredit.timer->Event(); + if (cPluginManager::CallFirstService("Epgsearch-exttimeredit-v1.0", &exttimeredit)) + return AddSubMenu(exttimeredit.pTimerMenu); + return AddSubMenu(new cMenuEditTimer(Timer, true)); } @@ -1382,7 +1404,7 @@ eOSState cMenuTimers::ProcessKey(eKeys Key) switch (Key) { case kOk: return Edit(); case kRed: state = OnOff(); break; // must go through SetHelpKeys()! - case kGreen: return New(); + case kGreen: return Edit(true); case kYellow: state = Delete(); break; case kInfo: case kBlue: return Info(); @@ -1396,6 +1418,14 @@ eOSState cMenuTimers::ProcessKey(eKeys Key) Add(new cMenuTimerItem(Timer), true); Display(); } + if (!HasSubMenu()) { + LOCK_TIMERS_READ; + if (Timers->Count()