summaryrefslogtreecommitdiff
path: root/patches/vdr.epgsearch-exttimeredit-2.3.3.diff
blob: 25c3ef7fbf63fbfec9cca34bf44fc7a1dff10c37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
From 5f30c7cbac03c534df40aa437399f45747d9e7ae Mon Sep 17 00:00:00 2001
From: Jasmin Jessich <jasmin@anw.at>
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()<Count()) {
+       // timer was deleted
+       cOsdMenu::Del(Current());
+       Display();
+       }
+     }
   if (Key != kNone)
      SetHelpKeys();
   return state;
--
2.7.4