summaryrefslogtreecommitdiff
path: root/patches
diff options
context:
space:
mode:
Diffstat (limited to 'patches')
-rw-r--r--patches/vdr.epgsearch-exttimeredit-2.3.6.diff120
1 files changed, 120 insertions, 0 deletions
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()<Count()) {
++ // timer was deleted
++ cOsdMenu::Del(Current());
++ Display();
++ }
++ }
+ if (Key != kNone)
+ SetHelpKeys();
+ return state;