From f17512925ac4059c0677d38fcaa553e69ab1d25e Mon Sep 17 00:00:00 2001 From: TomJoad Date: Sat, 10 Jun 2017 19:53:22 +0200 Subject: New vdr.epgsearch-exttimeredit-2.3.6.diff (thx to Claus Muus) --- patches/vdr.epgsearch-exttimeredit-2.3.6.diff | 120 ++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 patches/vdr.epgsearch-exttimeredit-2.3.6.diff (limited to 'patches') diff --git a/patches/vdr.epgsearch-exttimeredit-2.3.6.diff b/patches/vdr.epgsearch-exttimeredit-2.3.6.diff new file mode 100644 index 0000000..36dc30d --- /dev/null +++ b/patches/vdr.epgsearch-exttimeredit-2.3.6.diff @@ -0,0 +1,120 @@ +--- a/menu.c.orig 2017-06-04 19:18:37.423036244 +0200 ++++ b/menu.c 2017-06-09 21:33:53.775782116 +0200 +@@ -1155,6 +1155,7 @@ + class cMenuTimerItem : public cOsdItem { + private: + const cTimer *timer; ++ void DoSet(void); + public: + cMenuTimerItem(const cTimer *Timer); + virtual int Compare(const cListObject &ListObject) const; +@@ -1166,7 +1167,7 @@ + cMenuTimerItem::cMenuTimerItem(const cTimer *Timer) + { + timer = Timer; +- Set(); ++ DoSet(); + } + + int cMenuTimerItem::Compare(const cListObject &ListObject) const +@@ -1176,6 +1177,20 @@ + + void cMenuTimerItem::Set(void) + { ++ // check for deleted timer ++ LOCK_TIMERS_READ; ++ if (!Timers->Contains(timer)) ++ { ++ if (const cTimer *t = Timers->GetById(timer->Id(), timer->Remote())) ++ timer = t; ++ else ++ return; // no matching timer found ++ } ++ DoSet(); ++} ++ ++void cMenuTimerItem::DoSet(void) ++{ + cString day, name(""); + if (timer->WeekDays()) + day = timer->PrintDay(0, timer->WeekDays(), false); +@@ -1223,8 +1238,7 @@ + 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); +@@ -1316,21 +1330,34 @@ + return osContinue; + } + +-eOSState cMenuTimers::Edit(void) ++eOSState cMenuTimers::Edit(bool New) + { +- if (HasSubMenu() || Count() == 0) ++ if (HasSubMenu() || Count() == 0 && !New) + return osContinue; +- return AddSubMenu(new cMenuEditTimer(GetTimer())); +-} +- +-eOSState cMenuTimers::New(void) +-{ +- if (HasSubMenu()) +- return osContinue; +- cTimer *Timer = new cTimer; ++ cTimer *Timer; ++ if (New) ++ { ++ Timer = new cTimer; + if (Setup.SVDRPPeering && *Setup.SVDRPDefaultHost) + Timer->SetRemote(Setup.SVDRPDefaultHost); +- return AddSubMenu(new cMenuEditTimer(Timer, true)); ++ } ++ // 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 ? Timer : 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(exttimeredit.timer, New)); + } + + eOSState cMenuTimers::Delete(void) +@@ -1386,7 +1413,7 @@ + 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(); +@@ -1400,6 +1427,14 @@ + Add(new cMenuTimerItem(Timer), true); + Display(); + } ++ if (!HasSubMenu()) { ++ LOCK_TIMERS_READ; ++ if (Timers->Count()