summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epgsearch.c2
-rw-r--r--menu_myedittimer.c82
-rw-r--r--patches/vdr.epgsearch-exttimeredit-0.0.2.diff110
-rw-r--r--patches/vdr.epgsearch-exttimeredit.diff26
4 files changed, 145 insertions, 75 deletions
diff --git a/epgsearch.c b/epgsearch.c
index 3afa1c1..90d7e41 100644
--- a/epgsearch.c
+++ b/epgsearch.c
@@ -245,7 +245,7 @@ bool cPluginEpgsearch::Service(const char *Id, void *Data)
return true;
}
- if (strcmp(Id, "Epgsearch-exttimeredit-v1.0") == 0) {
+ if (strcmp(Id, "Epgsearch-exttimeredit-v1.0") == 0 && !EPGSearchConfig.useVDRTimerEditMenu) {
if (Data == NULL)
return true;
diff --git a/menu_myedittimer.c b/menu_myedittimer.c
index 0d1b8e8..6445ab5 100644
--- a/menu_myedittimer.c
+++ b/menu_myedittimer.c
@@ -73,6 +73,7 @@ cMenuMyEditTimer::cMenuMyEditTimer(cTimer *Timer, bool New, const cEvent* Event,
Set();
SetHelp(addIfConfirmed?NULL:trVDR("Button$Delete"), NULL, NULL, NULL);
}
+ Timers.IncBeingEdited();
}
void cMenuMyEditTimer::SplitFile()
@@ -192,6 +193,7 @@ cMenuMyEditTimer::~cMenuMyEditTimer()
{
if (timer && addIfConfirmed)
delete timer; // apparently it wasn't confirmed
+ Timers.DecBeingEdited();
}
void cMenuMyEditTimer::HandleSubtitle()
@@ -228,7 +230,7 @@ bool cMenuMyEditTimer::IsSingleEvent(void) const
eOSState cMenuMyEditTimer::DeleteTimer()
{
// Check if this timer is active:
- if (timer) {
+ if (timer && !addIfConfirmed) {
if (Interface->Confirm(trVDR("Delete timer?"))) {
if (timer->Recording()) {
if (Interface->Confirm(trVDR("Timer still recording - really delete?"))) {
@@ -240,10 +242,8 @@ eOSState cMenuMyEditTimer::DeleteTimer()
}
LogFile.iSysLog("deleting timer %s", *timer->ToDescr());
Timers.Del(timer);
- gl_timerStatusMonitor->SetConflictCheckAdvised();
- cOsdMenu::Del(Current());
+ gl_timerStatusMonitor->SetConflictCheckAdvised();
Timers.SetModified();
- Display();
return osBack;
}
}
@@ -373,53 +373,39 @@ eOSState cMenuMyEditTimer::ProcessKey(eKeys Key)
if (strlen(tmpFile) == 0)
tmpFile = strdup(CHANNELNAME(ch));
- if (timer)
- {
- cString cmdbuf;
- if (addIfConfirmed)
- cmdbuf = cString::sprintf("NEWT %d:%d:%s:%04d:%04d:%d:%d:%s%s%s:%s",
- flags,
- ch->Number(),
-#if VDRVERSNUM < 10503
- PRINTDAY(day, weekdays),
-#else
- PRINTDAY(day, weekdays, true),
-#endif
- start,
- stop,
- priority,
- lifetime,
- strlen(tmpDir)>0?tmpDir:"",
- (strlen(tmpDir)>0 && strlen(tmpFile)>0)?"~":"",
- tmpFile,
- fullaux.c_str());
- else
- cmdbuf = cString::sprintf("MODT %d %d:%d:%s:%04d:%04d:%d:%d:%s%s%s:%s",
- timer->Index()+1,
- flags,
- ch->Number(),
+ if (timer)
+ {
+ cString cmdbuf;
+ cmdbuf = cString::sprintf("%d:%d:%s:%04d:%04d:%d:%d:%s%s%s:%s",
+ flags,
+ ch->Number(),
#if VDRVERSNUM < 10503
- PRINTDAY(day, weekdays),
+ PRINTDAY(day, weekdays),
#else
- PRINTDAY(day, weekdays, true),
+ PRINTDAY(day, weekdays, true),
#endif
- start,
- stop,
- priority,
- lifetime,
- strlen(tmpDir)>0?tmpDir:"",
- (strlen(tmpDir)>0 && strlen(tmpFile)>0)?"~":"",
- tmpFile,
- fullaux.c_str());
-
- cTimerThread timerThread;
- timerThread.Init(cmdbuf);
-
- free(tmpFile);
- free(tmpDir);
-
- addIfConfirmed = false;
- }
+ start,
+ stop,
+ priority,
+ lifetime,
+ strlen(tmpDir)>0?tmpDir:"",
+ (strlen(tmpDir)>0 && strlen(tmpFile)>0)?"~":"",
+ tmpFile,
+ fullaux.c_str());
+
+ timer->Parse(cmdbuf);
+
+ free(tmpFile);
+ free(tmpDir);
+
+ if (addIfConfirmed)
+ Timers.Add(timer);
+ timer->SetEventFromSchedule();
+ timer->Matches();
+ gl_timerStatusMonitor->SetConflictCheckAdvised();
+ Timers.SetModified();
+ addIfConfirmed = false;
+ }
}
return osBack;
case kRed:
diff --git a/patches/vdr.epgsearch-exttimeredit-0.0.2.diff b/patches/vdr.epgsearch-exttimeredit-0.0.2.diff
new file mode 100644
index 0000000..c92ff8c
--- /dev/null
+++ b/patches/vdr.epgsearch-exttimeredit-0.0.2.diff
@@ -0,0 +1,110 @@
+--- menu.c.orig 2009-04-11 14:47:08.000000000 +0200
++++ menu.c 2009-04-17 13:53:05.000000000 +0200
+@@ -853,6 +853,7 @@ eOSState cMenuEditTimer::ProcessKey(eKey
+ class cMenuTimerItem : public cOsdItem {
+ private:
+ cTimer *timer;
++ void DoSet(void);
+ public:
+ cMenuTimerItem(cTimer *Timer);
+ virtual int Compare(const cListObject &ListObject) const;
+@@ -863,7 +864,7 @@ public:
+ cMenuTimerItem::cMenuTimerItem(cTimer *Timer)
+ {
+ timer = Timer;
+- Set();
++ DoSet();
+ }
+
+ int cMenuTimerItem::Compare(const cListObject &ListObject) const
+@@ -873,6 +874,18 @@ int cMenuTimerItem::Compare(const cListO
+
+ void cMenuTimerItem::Set(void)
+ {
++ // check for deleted timer
++ for (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);
+@@ -906,8 +919,7 @@ void cMenuTimerItem::Set(void)
+ class cMenuTimers : public cOsdMenu {
+ private:
+ int helpKeys;
+- eOSState Edit(void);
+- eOSState New(void);
++ eOSState Edit(bool New = false);
+ eOSState Delete(void);
+ eOSState OnOff(void);
+ eOSState Info(void);
+@@ -980,19 +992,30 @@ eOSState cMenuTimers::OnOff(void)
+ return osContinue;
+ }
+
+-eOSState cMenuTimers::Edit(void)
++eOSState cMenuTimers::Edit(bool New)
+ {
+- if (HasSubMenu() || Count() == 0)
++ if (HasSubMenu() || (Count() == 0 && !New))
+ return osContinue;
+- isyslog("editing timer %s", *CurrentTimer()->ToDescr());
+- return AddSubMenu(new cMenuEditTimer(CurrentTimer()));
+-}
++ if (!New)
++ isyslog("editing timer %s", *CurrentTimer()->ToDescr());
+
+-eOSState cMenuTimers::New(void)
+-{
+- if (HasSubMenu())
+- return osContinue;
+- return AddSubMenu(new cMenuEditTimer(new cTimer, 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 ? (new cTimer) : CurrentTimer();
++ 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)
+@@ -1038,7 +1061,7 @@ eOSState cMenuTimers::ProcessKey(eKeys K
+ 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();
+@@ -1051,6 +1074,11 @@ eOSState cMenuTimers::ProcessKey(eKeys K
+ Add(new cMenuTimerItem(Timers.Get(TimerNumber)), true);
+ Display();
+ }
++ if (!HasSubMenu() && Timers.Count()<Count()) {
++ // timer was deleted
++ cOsdMenu::Del(Current());
++ Display();
++ }
+ if (Key != kNone)
+ SetHelpKeys();
+ return state;
diff --git a/patches/vdr.epgsearch-exttimeredit.diff b/patches/vdr.epgsearch-exttimeredit.diff
deleted file mode 100644
index 36e3554..0000000
--- a/patches/vdr.epgsearch-exttimeredit.diff
+++ /dev/null
@@ -1,26 +0,0 @@
---- menu.c.orig 2009-04-11 14:47:08.000000000 +0200
-+++ menu.c 2009-04-11 15:13:30.000000000 +0200
-@@ -985,6 +985,23 @@ eOSState cMenuTimers::Edit(void)
- if (HasSubMenu() || Count() == 0)
- return osContinue;
- isyslog("editing timer %s", *CurrentTimer()->ToDescr());
-+
-+ // 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 = CurrentTimer();
-+ exttimeredit.bNew = false;
-+ exttimeredit.event = NULL;
-+ if (cPluginManager::CallFirstService("Epgsearch-exttimeredit-v1.0", &exttimeredit))
-+ return AddSubMenu(exttimeredit.pTimerMenu);
-+
- return AddSubMenu(new cMenuEditTimer(CurrentTimer()));
- }
-