mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Now checking whether timers or channels are currently being edited via the menu before making changes through SVDRP
This commit is contained in:
parent
d6b8a28329
commit
068e17303c
10
CONTRIBUTORS
10
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
|
||||
|
3
HISTORY
3
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).
|
||||
|
148
svdrp.c
148
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());
|
||||
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;
|
||||
}
|
||||
else {
|
||||
Timers.Add(timer);
|
||||
isyslog("timer %s added", *timer->ToDescr());
|
||||
}
|
||||
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");
|
||||
|
Loading…
Reference in New Issue
Block a user