summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2005-07-31 14:34:38 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2005-07-31 14:34:38 +0200
commit068e17303c93dcca4521a8f9c09eb7b8a4dc5104 (patch)
tree175094c19b327299e50da6029871e5327aa629e1
parentd6b8a2832973d7bf767039a91905059bc7800452 (diff)
downloadvdr-068e17303c93dcca4521a8f9c09eb7b8a4dc5104.tar.gz
vdr-068e17303c93dcca4521a8f9c09eb7b8a4dc5104.tar.bz2
Now checking whether timers or channels are currently being edited via the menu before making changes through SVDRP
-rw-r--r--CONTRIBUTORS10
-rw-r--r--HISTORY3
-rw-r--r--svdrp.c148
3 files changed, 93 insertions, 68 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index ab14f41d..3b5581dd 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1271,12 +1271,14 @@ Joachim Wilke <vdr@joachim-wilke.de>
for reporting missing calls to cStatus::MsgOsdClear() in cSkins::Message()
Sascha Klek <sklek@gmx.de>
- for reporting a problem with the '0' key in the "Day" item of the "Timers" menu
+ for reporting a problem with the '0' key in the "Day" item of the "Timers" menu
Andreas Brugger <brougs78@gmx.net>
- for reporting a possible crash when pausing live video and the recording was
- unable to start, maybe because there was no lock on the device
- for reporting the missing Euro sign in iso8859-1
+ for reporting a possible crash when pausing live video and the recording was
+ unable to start, maybe because there was no lock on the device
+ for reporting the missing Euro sign in iso8859-1
+ for reporting a problem with making changes to timers through SVDRP while they
+ are being edited via the menu
Dino Ravnic <dino.ravnic@fer.hr>
for fixing some characters in the iso8859-2 font file
diff --git a/HISTORY b/HISTORY
index 0c94ed0c..07e78a14 100644
--- a/HISTORY
+++ b/HISTORY
@@ -3650,3 +3650,6 @@ Video Disk Recorder Revision History
PUTE SVDRP command (thanks to Olaf Titz for reporting this one).
- Added the command line options '--lirc', '--rcu' and '--no-kbd' to allow setting
the remote control at runtime (based on a patch by Darren Salt).
+- Now checking whether timers or channels are currently being edited via the menu
+ before making changes through SVDRP (thanks to Andreas Brugger for reporting a
+ problem with this).
diff --git a/svdrp.c b/svdrp.c
index a63a575d..6eedf900 100644
--- a/svdrp.c
+++ b/svdrp.c
@@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection.
*
- * $Id: svdrp.c 1.72 2005/05/26 09:59:09 kls Exp $
+ * $Id: svdrp.c 1.73 2005/07/31 14:31:45 kls Exp $
*/
#include "svdrp.h"
@@ -476,22 +476,26 @@ void cSVDRP::CmdDELC(const char *Option)
{
if (*Option) {
if (isnumber(Option)) {
- cChannel *channel = Channels.GetByNumber(strtol(Option, NULL, 10));
- if (channel) {
- for (cTimer *timer = Timers.First(); timer; timer = Timers.Next(timer)) {
- if (timer->Channel() == channel) {
- Reply(550, "Channel \"%s\" is in use by timer %d", Option, timer->Index() + 1);
- return;
+ if (!Channels.BeingEdited()) {
+ cChannel *channel = Channels.GetByNumber(strtol(Option, NULL, 10));
+ if (channel) {
+ for (cTimer *timer = Timers.First(); timer; timer = Timers.Next(timer)) {
+ if (timer->Channel() == channel) {
+ Reply(550, "Channel \"%s\" is in use by timer %d", Option, timer->Index() + 1);
+ return;
+ }
}
- }
- Channels.Del(channel);
- Channels.ReNumber();
- Channels.SetModified(true);
- isyslog("channel %s deleted", Option);
- Reply(250, "Channel \"%s\" deleted", Option);
+ Channels.Del(channel);
+ Channels.ReNumber();
+ Channels.SetModified(true);
+ isyslog("channel %s deleted", Option);
+ Reply(250, "Channel \"%s\" deleted", Option);
+ }
+ else
+ Reply(501, "Channel \"%s\" not defined", Option);
}
else
- Reply(501, "Channel \"%s\" not defined", Option);
+ Reply(550, "Channels are being edited - try again later");
}
else
Reply(501, "Error in channel number \"%s\"", Option);
@@ -532,19 +536,23 @@ void cSVDRP::CmdDELT(const char *Option)
{
if (*Option) {
if (isnumber(Option)) {
- cTimer *timer = Timers.Get(strtol(Option, NULL, 10) - 1);
- if (timer) {
- if (!timer->Recording()) {
- isyslog("deleting timer %s", *timer->ToDescr());
- Timers.Del(timer);
- Timers.SetModified();
- Reply(250, "Timer \"%s\" deleted", Option);
+ if (!Timers.BeingEdited()) {
+ cTimer *timer = Timers.Get(strtol(Option, NULL, 10) - 1);
+ if (timer) {
+ if (!timer->Recording()) {
+ isyslog("deleting timer %s", *timer->ToDescr());
+ Timers.Del(timer);
+ Timers.SetModified();
+ Reply(250, "Timer \"%s\" deleted", Option);
+ }
+ else
+ Reply(550, "Timer \"%s\" is recording", Option);
}
else
- Reply(550, "Timer \"%s\" is recording", Option);
+ Reply(501, "Timer \"%s\" not defined", Option);
}
else
- Reply(501, "Timer \"%s\" not defined", Option);
+ Reply(550, "Timers are being edited - try again later");
}
else
Reply(501, "Error in timer number \"%s\"", Option);
@@ -880,25 +888,29 @@ void cSVDRP::CmdMODC(const char *Option)
int n = strtol(Option, &tail, 10);
if (tail && tail != Option) {
tail = skipspace(tail);
- cChannel *channel = Channels.GetByNumber(n);
- if (channel) {
- cChannel ch;
- if (ch.Parse(tail)) {
- if (Channels.HasUniqueChannelID(&ch, channel)) {
- *channel = ch;
- Channels.ReNumber();
- Channels.SetModified(true);
- isyslog("modifed channel %d %s", channel->Number(), *channel->ToText());
- Reply(250, "%d %s", channel->Number(), *channel->ToText());
+ if (!Channels.BeingEdited()) {
+ cChannel *channel = Channels.GetByNumber(n);
+ if (channel) {
+ cChannel ch;
+ if (ch.Parse(tail)) {
+ if (Channels.HasUniqueChannelID(&ch, channel)) {
+ *channel = ch;
+ Channels.ReNumber();
+ Channels.SetModified(true);
+ isyslog("modifed channel %d %s", channel->Number(), *channel->ToText());
+ Reply(250, "%d %s", channel->Number(), *channel->ToText());
+ }
+ else
+ Reply(501, "Channel settings are not unique");
}
else
- Reply(501, "Channel settings are not unique");
+ Reply(501, "Error in channel settings");
}
else
- Reply(501, "Error in channel settings");
+ Reply(501, "Channel \"%d\" not defined", n);
}
else
- Reply(501, "Channel \"%d\" not defined", n);
+ Reply(550, "Channels are being edited - try again later");
}
else
Reply(501, "Error in channel number");
@@ -914,24 +926,28 @@ void cSVDRP::CmdMODT(const char *Option)
int n = strtol(Option, &tail, 10);
if (tail && tail != Option) {
tail = skipspace(tail);
- cTimer *timer = Timers.Get(n - 1);
- if (timer) {
- cTimer t = *timer;
- if (strcasecmp(tail, "ON") == 0)
- t.SetFlags(tfActive);
- else if (strcasecmp(tail, "OFF") == 0)
- t.ClrFlags(tfActive);
- else if (!t.Parse(tail)) {
- Reply(501, "Error in timer settings");
- return;
+ if (!Timers.BeingEdited()) {
+ cTimer *timer = Timers.Get(n - 1);
+ if (timer) {
+ cTimer t = *timer;
+ if (strcasecmp(tail, "ON") == 0)
+ t.SetFlags(tfActive);
+ else if (strcasecmp(tail, "OFF") == 0)
+ t.ClrFlags(tfActive);
+ else if (!t.Parse(tail)) {
+ Reply(501, "Error in timer settings");
+ return;
+ }
+ *timer = t;
+ Timers.SetModified();
+ isyslog("timer %s modified (%s)", *timer->ToDescr(), timer->HasFlags(tfActive) ? "active" : "inactive");
+ Reply(250, "%d %s", timer->Index() + 1, *timer->ToText());
}
- *timer = t;
- Timers.SetModified();
- isyslog("timer %s modified (%s)", *timer->ToDescr(), timer->HasFlags(tfActive) ? "active" : "inactive");
- Reply(250, "%d %s", timer->Index() + 1, *timer->ToText());
+ else
+ Reply(501, "Timer \"%d\" not defined", n);
}
else
- Reply(501, "Timer \"%d\" not defined", n);
+ Reply(550, "Timers are being edited - try again later");
}
else
Reply(501, "Error in timer number");
@@ -1054,20 +1070,24 @@ void cSVDRP::CmdUPDT(const char *Option)
if (*Option) {
cTimer *timer = new cTimer;
if (timer->Parse(Option)) {
- cTimer *t = Timers.GetTimer(timer);
- if (t) {
- t->Parse(Option);
- delete timer;
- timer = t;
- isyslog("timer %s updated", *timer->ToDescr());
- }
- else {
- Timers.Add(timer);
- isyslog("timer %s added", *timer->ToDescr());
+ if (!Timers.BeingEdited()) {
+ cTimer *t = Timers.GetTimer(timer);
+ if (t) {
+ t->Parse(Option);
+ delete timer;
+ timer = t;
+ isyslog("timer %s updated", *timer->ToDescr());
+ }
+ else {
+ Timers.Add(timer);
+ isyslog("timer %s added", *timer->ToDescr());
+ }
+ Timers.SetModified();
+ Reply(250, "%d %s", timer->Index() + 1, *timer->ToText());
+ return;
}
- Timers.SetModified();
- Reply(250, "%d %s", timer->Index() + 1, *timer->ToText());
- return;
+ else
+ Reply(550, "Timers are being edited - try again later");
}
else
Reply(501, "Error in timer settings");