mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
The new SVDRP commands 'LSTD' and 'PRIM' can be used to list all available devices and to switch the primary device
This commit is contained in:
parent
950b248220
commit
d19a3fc3b8
@ -3373,6 +3373,7 @@ Thomas Reufer <thomas@reufer.ch>
|
||||
for adding cFont::Width(void) to get the default character width and allow stretched
|
||||
font drawing in high level OSDs
|
||||
for fixing regenerating the index of audio recordings
|
||||
for implementing the SVDRP commands 'LSTD' and 'PRIM'
|
||||
|
||||
Eike Sauer <EikeSauer@t-online.de>
|
||||
for reporting a problem with channels that need more than 5 TS packets for detecting
|
||||
|
4
HISTORY
4
HISTORY
@ -9162,7 +9162,7 @@ Video Disk Recorder Revision History
|
||||
a subdirectory.
|
||||
- SVDRP peering can now be limited to the default SVDRP host (see MANUAL for details).
|
||||
|
||||
2017-11-09: Version 2.3.9
|
||||
2017-11-11: Version 2.3.9
|
||||
|
||||
- Updated the Italian OSD texts (thanks to Diego Pierotto).
|
||||
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
|
||||
@ -9196,3 +9196,5 @@ Video Disk Recorder Revision History
|
||||
in case there is more than one timer that will record that event.
|
||||
- Switching the primary device is no longer done via osSwitchDvb (which has been
|
||||
removed), but rather by the main program loop reacting to changes in Setup.PrimaryDVB.
|
||||
- The new SVDRP commands 'LSTD' and 'PRIM' can be used to list all available devices
|
||||
and to switch the primary device (thanks to Thomas Reufer).
|
||||
|
52
svdrp.c
52
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 4.22 2017/06/30 09:49:39 kls Exp $
|
||||
* $Id: svdrp.c 4.23 2017/11/11 12:04:17 kls Exp $
|
||||
*/
|
||||
|
||||
#include "svdrp.h"
|
||||
@ -771,6 +771,10 @@ const char *HelpPages[] = {
|
||||
" separators. The channel number of a group separator is always 0.\n"
|
||||
" With ':ids' the channel ids are listed following the channel numbers.\n"
|
||||
" The special number 0 can be given to list the current channel.",
|
||||
"LSTD\n"
|
||||
" List all available devices. Each device is listed with its name and\n"
|
||||
" whether it is currently the primary device ('P') or it implements a\n"
|
||||
" decoder ('D') and can be used as output device.",
|
||||
"LSTE [ <channel> ] [ now | next | at <time> ]\n"
|
||||
" List EPG data. Without any parameters all data of all channels is\n"
|
||||
" listed. If a channel is given (either by number or by channel ID),\n"
|
||||
@ -851,6 +855,10 @@ const char *HelpPages[] = {
|
||||
" Used by peer-to-peer connections between VDRs to inform other machines\n"
|
||||
" about changes to timers. The receiving VDR shall use LSTT to query the\n"
|
||||
" remote machine's timers and update its list of timers accordingly.\n",
|
||||
"PRIM [ <number> ]\n"
|
||||
" Make the device with the given number the primary device.\n"
|
||||
" Without option it returns the currently active primary device in the same\n"
|
||||
" format as used by the LSTD command.",
|
||||
"PUTE [ file ]\n"
|
||||
" Put data into the EPG list. The data entered has to strictly follow the\n"
|
||||
" format defined in vdr(5) for the 'epg.data' file. A '.' on a line\n"
|
||||
@ -964,6 +972,7 @@ private:
|
||||
void CmdHELP(const char *Option);
|
||||
void CmdHITK(const char *Option);
|
||||
void CmdLSTC(const char *Option);
|
||||
void CmdLSTD(const char *Option);
|
||||
void CmdLSTE(const char *Option);
|
||||
void CmdLSTR(const char *Option);
|
||||
void CmdLSTT(const char *Option);
|
||||
@ -979,6 +988,7 @@ private:
|
||||
void CmdPLAY(const char *Option);
|
||||
void CmdPLUG(const char *Option);
|
||||
void CmdPOLL(const char *Option);
|
||||
void CmdPRIM(const char *Option);
|
||||
void CmdPUTE(const char *Option);
|
||||
void CmdREMO(const char *Option);
|
||||
void CmdSCAN(const char *Option);
|
||||
@ -1620,6 +1630,18 @@ void cSVDRPServer::CmdLSTC(const char *Option)
|
||||
Reply(550, "No channels defined");
|
||||
}
|
||||
|
||||
void cSVDRPServer::CmdLSTD(const char *Option)
|
||||
{
|
||||
if (cDevice::NumDevices()) {
|
||||
for (int i = 0; i < cDevice::NumDevices(); i++) {
|
||||
if (const cDevice *d = cDevice::GetDevice(i))
|
||||
Reply(d->DeviceNumber() + 1 == cDevice::NumDevices() ? 250 : -250, "%d [%s%s] %s", d->DeviceNumber() + 1, d->HasDecoder() ? "D" : "-", d->DeviceNumber() + 1 == Setup.PrimaryDVB ? "P" : "-", *d->DeviceName());
|
||||
}
|
||||
}
|
||||
else
|
||||
Reply(550, "No devices found");
|
||||
}
|
||||
|
||||
void cSVDRPServer::CmdLSTE(const char *Option)
|
||||
{
|
||||
LOCK_CHANNELS_READ;
|
||||
@ -2216,6 +2238,32 @@ void cSVDRPServer::CmdPOLL(const char *Option)
|
||||
Reply(501, "Missing parameters");
|
||||
}
|
||||
|
||||
void cSVDRPServer::CmdPRIM(const char *Option)
|
||||
{
|
||||
int n = -1;
|
||||
if (*Option) {
|
||||
if (isnumber(Option)) {
|
||||
int o = strtol(Option, NULL, 10);
|
||||
if (o > 0 && o <= cDevice::NumDevices())
|
||||
n = o;
|
||||
else
|
||||
Reply(501, "Invalid device number \"%s\"", Option);
|
||||
}
|
||||
else
|
||||
Reply(501, "Invalid parameter \"%s\"", Option);
|
||||
if (n >= 0) {
|
||||
Setup.PrimaryDVB = n;
|
||||
Reply(250, "Primary device set to %d", n);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (const cDevice *d = cDevice::PrimaryDevice())
|
||||
Reply(250, "%d [%s%s] %s", d->DeviceNumber() + 1, d->HasDecoder() ? "D" : "-", d->DeviceNumber() + 1 == Setup.PrimaryDVB ? "P" : "-", *d->DeviceName());
|
||||
else
|
||||
Reply(501, "Failed to get primary device");
|
||||
}
|
||||
}
|
||||
|
||||
void cSVDRPServer::CmdPUTE(const char *Option)
|
||||
{
|
||||
if (*Option) {
|
||||
@ -2368,6 +2416,7 @@ void cSVDRPServer::Execute(char *Cmd)
|
||||
else if (CMD("HELP")) CmdHELP(s);
|
||||
else if (CMD("HITK")) CmdHITK(s);
|
||||
else if (CMD("LSTC")) CmdLSTC(s);
|
||||
else if (CMD("LSTD")) CmdLSTD(s);
|
||||
else if (CMD("LSTE")) CmdLSTE(s);
|
||||
else if (CMD("LSTR")) CmdLSTR(s);
|
||||
else if (CMD("LSTT")) CmdLSTT(s);
|
||||
@ -2383,6 +2432,7 @@ void cSVDRPServer::Execute(char *Cmd)
|
||||
else if (CMD("PLAY")) CmdPLAY(s);
|
||||
else if (CMD("PLUG")) CmdPLUG(s);
|
||||
else if (CMD("POLL")) CmdPOLL(s);
|
||||
else if (CMD("PRIM")) CmdPRIM(s);
|
||||
else if (CMD("PUTE")) CmdPUTE(s);
|
||||
else if (CMD("REMO")) CmdREMO(s);
|
||||
else if (CMD("SCAN")) CmdSCAN(s);
|
||||
|
Loading…
Reference in New Issue
Block a user