mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-05-19 06:32:34 +02:00
* Added a 'RDLIBRARY.IS_SINGLETON' field to the database. * Added a 'RDLOGEDIT.IS_SINGLETON' field to the database. * Incremented the database version to 367. * Added 'RDLibraryConf::isSingleton()' and 'RDLibraryConf::setIsSingleton()' methods. * Added 'RDLogeditConf::isSingleton()' and 'RDLogeditConf::setIsSingleton()' methods. * Modified rdcartslots(1), rdcastmanager(1), rdcatch(1), rdlogmanager(1) and rdpanel(1) to allow only a single instance to run at a time. * Modified rdlibrary(1) and rdlogedit(1) to conditionally allow only a single instance to run at a time. * Added an rdsinglestart(1) utility. * Added a 'wmctrl' dependency to the 'rivendell' RPM package. Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
2066 lines
62 KiB
C++
2066 lines
62 KiB
C++
// rdstation.cpp
|
|
//
|
|
// Abstract a Rivendell Workstation.
|
|
//
|
|
// (C) Copyright 2002-2022 Fred Gleason <fredg@paravelsystems.com>
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License version 2 as
|
|
// published by the Free Software Foundation.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public
|
|
// License along with this program; if not, write to the Free Software
|
|
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
//
|
|
|
|
#include "rdairplay_conf.h"
|
|
#include "rdconf.h"
|
|
#include "rdstation.h"
|
|
#include "rd.h"
|
|
#include "rddb.h"
|
|
#include "rdescape_string.h"
|
|
|
|
RDStation::RDStation(const QString &name,bool create)
|
|
{
|
|
QString sql;
|
|
time_offset_valid = false;
|
|
station_name=name;
|
|
}
|
|
|
|
|
|
RDStation::~RDStation()
|
|
{
|
|
// printf("Destroying RDStation\n");
|
|
}
|
|
|
|
|
|
bool RDStation::exists() const
|
|
{
|
|
return RDDoesRowExist("STATIONS","NAME",RDEscapeString(station_name));
|
|
}
|
|
|
|
|
|
QString RDStation::name() const
|
|
{
|
|
return station_name;
|
|
}
|
|
|
|
|
|
QString RDStation::shortName() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"SHORT_NAME").toString();
|
|
}
|
|
|
|
|
|
void RDStation::setShortName(const QString &str) const
|
|
{
|
|
SetRow("SHORT_NAME",str);
|
|
}
|
|
|
|
|
|
QString RDStation::description() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"DESCRIPTION").toString();
|
|
}
|
|
|
|
|
|
void RDStation::setDescription(QString desc) const
|
|
{
|
|
SetRow("DESCRIPTION",desc);
|
|
}
|
|
|
|
|
|
QString RDStation::userName() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"USER_NAME").toString();
|
|
}
|
|
|
|
|
|
void RDStation::setUserName(QString name) const
|
|
{
|
|
SetRow("USER_NAME",name);
|
|
}
|
|
|
|
|
|
QString RDStation::defaultName() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"DEFAULT_NAME").
|
|
toString();
|
|
}
|
|
|
|
|
|
void RDStation::setDefaultName(QString name) const
|
|
{
|
|
SetRow("DEFAULT_NAME",name);
|
|
}
|
|
|
|
|
|
QHostAddress RDStation::address() const
|
|
{
|
|
QHostAddress addr;
|
|
addr.setAddress(RDGetSqlValue("STATIONS","NAME",station_name,"IPV4_ADDRESS").
|
|
toString());
|
|
return addr;
|
|
}
|
|
|
|
|
|
void RDStation::setAddress(QHostAddress addr) const
|
|
{
|
|
SetRow("IPV4_ADDRESS",addr.toString());
|
|
}
|
|
|
|
|
|
QHostAddress RDStation::httpAddress(RDConfig *config) const
|
|
{
|
|
QHostAddress addr;
|
|
|
|
addr.setAddress("127.0.0.1");
|
|
if(httpStation()!="localhost") {
|
|
if(httpStation()==RD_RDSELECT_LABEL) {
|
|
addr.setAddress(config->audioStoreXportHostname());
|
|
}
|
|
else {
|
|
addr.setAddress(RDGetSqlValue("STATIONS","NAME",httpStation(),
|
|
"IPV4_ADDRESS").toString());
|
|
}
|
|
}
|
|
|
|
return addr;
|
|
}
|
|
|
|
|
|
QString RDStation::httpStation() const
|
|
{
|
|
return
|
|
RDGetSqlValue("STATIONS","NAME",station_name,"HTTP_STATION").toString();
|
|
}
|
|
|
|
|
|
void RDStation::setHttpStation(const QString &str)
|
|
{
|
|
SetRow("HTTP_STATION",str);
|
|
}
|
|
|
|
|
|
QString RDStation::caeStation() const
|
|
{
|
|
return
|
|
RDGetSqlValue("STATIONS","NAME",station_name,"CAE_STATION").toString();
|
|
}
|
|
|
|
|
|
QHostAddress RDStation::caeAddress(RDConfig *config) const
|
|
{
|
|
QHostAddress addr;
|
|
|
|
addr.setAddress("127.0.0.1");
|
|
if(caeStation()!="localhost") {
|
|
if(caeStation()==RD_RDSELECT_LABEL) {
|
|
addr.setAddress(config->audioStoreCaeHostname());
|
|
}
|
|
else {
|
|
addr.setAddress(RDGetSqlValue("STATIONS","NAME",caeStation(),
|
|
"IPV4_ADDRESS").toString());
|
|
}
|
|
}
|
|
|
|
return addr;
|
|
}
|
|
|
|
|
|
void RDStation::setCaeStation(const QString &str)
|
|
{
|
|
SetRow("CAE_STATION",str);
|
|
}
|
|
|
|
|
|
QString RDStation::webServiceUrl(RDConfig *config) const
|
|
{
|
|
return QString("http://")+httpAddress(config).toString()+
|
|
"/rd-bin/rdxport.cgi";
|
|
}
|
|
|
|
|
|
int RDStation::timeOffset()
|
|
{
|
|
if (!time_offset_valid){
|
|
time_offset = RDGetSqlValue("STATIONS","NAME",station_name,"TIME_OFFSET").toInt();
|
|
time_offset_valid = true;
|
|
}
|
|
return time_offset;
|
|
}
|
|
|
|
|
|
void RDStation::setTimeOffset(int msecs)
|
|
{
|
|
SetRow("TIME_OFFSET",msecs);
|
|
time_offset = msecs;
|
|
}
|
|
|
|
|
|
unsigned RDStation::heartbeatCart() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"HEARTBEAT_CART").
|
|
toUInt();
|
|
}
|
|
|
|
|
|
void RDStation::setHeartbeatCart(unsigned cartnum) const
|
|
{
|
|
SetRow("HEARTBEAT_CART",cartnum);
|
|
}
|
|
|
|
|
|
unsigned RDStation::heartbeatInterval() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"HEARTBEAT_INTERVAL").
|
|
toUInt();
|
|
}
|
|
|
|
|
|
void RDStation::setHeartbeatInterval(unsigned interval) const
|
|
{
|
|
SetRow("HEARTBEAT_INTERVAL",interval);
|
|
}
|
|
|
|
|
|
unsigned RDStation::startupCart() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"STARTUP_CART").
|
|
toUInt();
|
|
}
|
|
|
|
|
|
void RDStation::setStartupCart(unsigned cartnum) const
|
|
{
|
|
SetRow("STARTUP_CART",cartnum);
|
|
}
|
|
|
|
|
|
QString RDStation::reportEditorPath() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"REPORT_EDITOR_PATH").
|
|
toString();
|
|
}
|
|
|
|
|
|
void RDStation::setReportEditorPath(const QString &cmd)
|
|
{
|
|
SetRow("REPORT_EDITOR_PATH",cmd);
|
|
}
|
|
|
|
|
|
QString RDStation::browserPath() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"BROWSER_PATH").
|
|
toString();
|
|
}
|
|
|
|
|
|
void RDStation::setBrowserPath(const QString &cmd) const
|
|
{
|
|
SetRow("BROWSER_PATH",cmd);
|
|
}
|
|
|
|
|
|
QString RDStation::sshIdentityFile() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"SSH_IDENTITY_FILE").
|
|
toString();
|
|
}
|
|
|
|
|
|
void RDStation::setSshIdentityFile(const QString &str) const
|
|
{
|
|
SetRow("SSH_IDENTITY_FILE",str);
|
|
}
|
|
|
|
|
|
RDStation::FilterMode RDStation::filterMode() const
|
|
{
|
|
return (RDStation::FilterMode)RDGetSqlValue("STATIONS","NAME",station_name,
|
|
"FILTER_MODE").toInt();
|
|
}
|
|
|
|
|
|
void RDStation::setFilterMode(RDStation::FilterMode mode) const
|
|
{
|
|
SetRow("FILTER_MODE",(int)mode);
|
|
}
|
|
|
|
|
|
bool RDStation::startJack() const
|
|
{
|
|
return RDBool(RDGetSqlValue("STATIONS","NAME",station_name,"START_JACK").
|
|
toString());
|
|
}
|
|
|
|
|
|
void RDStation::setStartJack(bool state) const
|
|
{
|
|
SetRow("START_JACK",RDYesNo(state));
|
|
}
|
|
|
|
|
|
QString RDStation::jackServerName() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"JACK_SERVER_NAME").
|
|
toString();
|
|
}
|
|
|
|
|
|
void RDStation::setJackServerName(const QString &str) const
|
|
{
|
|
SetRow("JACK_SERVER_NAME",str);
|
|
}
|
|
|
|
|
|
QString RDStation::jackCommandLine() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"JACK_COMMAND_LINE").
|
|
toString();
|
|
}
|
|
|
|
|
|
void RDStation::setJackCommandLine(const QString &str) const
|
|
{
|
|
SetRow("JACK_COMMAND_LINE",str);
|
|
}
|
|
|
|
|
|
int RDStation::jackPorts() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"JACK_PORTS").toInt();
|
|
}
|
|
|
|
|
|
void RDStation::setJackPorts(int ports) const
|
|
{
|
|
SetRow("JACK_PORTS",ports);
|
|
}
|
|
|
|
|
|
int RDStation::cueCard() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"CUE_CARD").toInt();
|
|
}
|
|
|
|
|
|
void RDStation::setCueCard(int card)
|
|
{
|
|
SetRow("CUE_CARD",card);
|
|
}
|
|
|
|
|
|
int RDStation::cuePort() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"CUE_PORT").toInt();
|
|
}
|
|
|
|
|
|
void RDStation::setCuePort(int port)
|
|
{
|
|
SetRow("CUE_PORT",port);
|
|
}
|
|
|
|
|
|
unsigned RDStation::cueStartCart() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"CUE_START_CART").
|
|
toUInt();
|
|
}
|
|
|
|
|
|
void RDStation::setCueStartCart(unsigned cartnum) const
|
|
{
|
|
SetRow("CUE_START_CART",cartnum);
|
|
}
|
|
|
|
|
|
unsigned RDStation::cueStopCart() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"CUE_STOP_CART").toUInt();
|
|
}
|
|
|
|
|
|
void RDStation::setCueStopCart(unsigned cartnum) const
|
|
{
|
|
SetRow("CUE_STOP_CART",cartnum);
|
|
}
|
|
|
|
|
|
int RDStation::cartSlotColumns() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"CARTSLOT_COLUMNS").
|
|
toInt();
|
|
}
|
|
|
|
|
|
void RDStation::setCartSlotColumns(int cols)
|
|
{
|
|
SetRow("CARTSLOT_COLUMNS",cols);
|
|
}
|
|
|
|
|
|
int RDStation::cartSlotRows() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"CARTSLOT_ROWS").toInt();
|
|
}
|
|
|
|
|
|
void RDStation::setCartSlotRows(int rows)
|
|
{
|
|
SetRow("CARTSLOT_ROWS",rows);
|
|
}
|
|
|
|
|
|
bool RDStation::enableDragdrop() const
|
|
{
|
|
return RDBool(RDGetSqlValue("STATIONS","NAME",station_name,
|
|
"ENABLE_DRAGDROP").toString());
|
|
}
|
|
|
|
|
|
void RDStation::setEnableDragdrop(bool state)
|
|
{
|
|
SetRow("ENABLE_DRAGDROP",state);
|
|
}
|
|
|
|
|
|
bool RDStation::enforcePanelSetup() const
|
|
{
|
|
return RDBool(RDGetSqlValue("STATIONS","NAME",station_name,
|
|
"ENFORCE_PANEL_SETUP").toString());
|
|
}
|
|
|
|
|
|
void RDStation::setEnforcePanelSetup(bool state)
|
|
{
|
|
SetRow("ENFORCE_PANEL_SETUP",state);
|
|
}
|
|
|
|
|
|
bool RDStation::systemMaint() const
|
|
{
|
|
return RDBool(RDGetSqlValue("STATIONS","NAME",station_name,"SYSTEM_MAINT").
|
|
toString());
|
|
}
|
|
|
|
|
|
void RDStation::setSystemMaint(bool state) const
|
|
{
|
|
SetRow("SYSTEM_MAINT",state);
|
|
}
|
|
|
|
|
|
bool RDStation::scanned() const
|
|
{
|
|
return RDBool(RDGetSqlValue("STATIONS","NAME",station_name,"STATION_SCANNED").
|
|
toString());
|
|
}
|
|
|
|
|
|
void RDStation::setScanned(bool state) const
|
|
{
|
|
SetRow("STATION_SCANNED",state);
|
|
}
|
|
|
|
|
|
bool RDStation::haveCapability(Capability cap) const
|
|
{
|
|
switch(cap) {
|
|
case RDStation::HaveOggenc:
|
|
return RDBool(RDGetSqlValue("STATIONS","NAME",station_name,
|
|
"HAVE_OGGENC").toString());
|
|
break;
|
|
|
|
case RDStation::HaveOgg123:
|
|
return RDBool(RDGetSqlValue("STATIONS","NAME",station_name,
|
|
"HAVE_OGG123").toString());
|
|
break;
|
|
|
|
case RDStation::HaveFlac:
|
|
return RDBool(RDGetSqlValue("STATIONS","NAME",station_name,
|
|
"HAVE_FLAC").toString());
|
|
break;
|
|
|
|
case RDStation::HaveLame:
|
|
return RDBool(RDGetSqlValue("STATIONS","NAME",station_name,
|
|
"HAVE_LAME").toString());
|
|
break;
|
|
|
|
case RDStation::HaveMp4Decode:
|
|
return RDBool(RDGetSqlValue("STATIONS","NAME",station_name,
|
|
"HAVE_MP4_DECODE").toString());
|
|
|
|
case RDStation::HaveMpg321:
|
|
return RDBool(RDGetSqlValue("STATIONS","NAME",station_name,
|
|
"HAVE_MPG321").toString());
|
|
|
|
case RDStation::HaveTwoLame:
|
|
return RDBool(RDGetSqlValue("STATIONS","NAME",station_name,
|
|
"HAVE_TWOLAME").toString());
|
|
break;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
void RDStation::setHaveCapability(Capability cap,bool state) const
|
|
{
|
|
switch(cap) {
|
|
case RDStation::HaveOggenc:
|
|
SetRow("HAVE_OGGENC",state);
|
|
break;
|
|
|
|
case RDStation::HaveOgg123:
|
|
SetRow("HAVE_OGG123",state);
|
|
break;
|
|
|
|
case RDStation::HaveFlac:
|
|
SetRow("HAVE_FLAC",state);
|
|
break;
|
|
|
|
case RDStation::HaveLame:
|
|
SetRow("HAVE_LAME",state);
|
|
break;
|
|
|
|
case RDStation::HaveMp4Decode:
|
|
SetRow("HAVE_MP4_DECODE",state);
|
|
break;
|
|
|
|
case RDStation::HaveMpg321:
|
|
SetRow("HAVE_MPG321",state);
|
|
break;
|
|
|
|
case RDStation::HaveTwoLame:
|
|
SetRow("HAVE_TWOLAME",state);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
int RDStation::cards() const
|
|
{
|
|
int n=0;
|
|
|
|
QString sql=QString("select `DRIVER` from `AUDIO_CARDS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(station_name)+"'";
|
|
RDSqlQuery *q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
if((RDStation::AudioDriver)q->value(0).toInt()!=RDStation::None) {
|
|
n++;
|
|
}
|
|
}
|
|
delete q;
|
|
|
|
return n;
|
|
}
|
|
|
|
|
|
RDStation::AudioDriver RDStation::cardDriver(int cardnum) const
|
|
{
|
|
RDStation::AudioDriver ret=RDStation::None;
|
|
QString sql=QString("select `DRIVER` from `AUDIO_CARDS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(station_name)+"' && "+
|
|
QString::asprintf("`CARD_NUMBER`=%d",cardnum);
|
|
RDSqlQuery *q=new RDSqlQuery(sql);
|
|
if(q->first()) {
|
|
ret=(RDStation::AudioDriver)q->value(0).toInt();
|
|
}
|
|
delete q;
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
void RDStation::setCardDriver(int cardnum,AudioDriver driver) const
|
|
{
|
|
QString sql=QString("update `AUDIO_CARDS` set ")+
|
|
QString::asprintf("`DRIVER`=%d where ",driver)+
|
|
"`STATION_NAME`='"+RDEscapeString(station_name)+"' && "+
|
|
QString::asprintf("`CARD_NUMBER`=%d",cardnum);
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
|
|
|
|
QString RDStation::driverVersion(AudioDriver driver) const
|
|
{
|
|
switch(driver) {
|
|
case RDStation::None:
|
|
return QString();
|
|
|
|
case RDStation::Hpi:
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"HPI_VERSION").
|
|
toString();
|
|
|
|
case RDStation::Jack:
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"JACK_VERSION").
|
|
toString();
|
|
|
|
case RDStation::Alsa:
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"ALSA_VERSION").
|
|
toString();
|
|
}
|
|
return QString();
|
|
}
|
|
|
|
|
|
void RDStation::setDriverVersion(AudioDriver driver,QString ver) const
|
|
{
|
|
switch(driver) {
|
|
case RDStation::None:
|
|
break;
|
|
|
|
case RDStation::Hpi:
|
|
SetRow("HPI_VERSION",ver);
|
|
break;
|
|
|
|
case RDStation::Jack:
|
|
SetRow("JACK_VERSION",ver);
|
|
break;
|
|
|
|
case RDStation::Alsa:
|
|
SetRow("ALSA_VERSION",ver);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
QString RDStation::cardName(int cardnum) const
|
|
{
|
|
QString ret;
|
|
QString sql=QString("select `NAME` from `AUDIO_CARDS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(station_name)+"' && "+
|
|
QString::asprintf("`CARD_NUMBER`=%d",cardnum);
|
|
RDSqlQuery *q=new RDSqlQuery(sql);
|
|
if(q->first()) {
|
|
ret=q->value(0).toString();
|
|
}
|
|
delete q;
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
void RDStation::setCardName(int cardnum,QString name) const
|
|
{
|
|
QString sql=QString("update `AUDIO_CARDS` set ")+
|
|
"`NAME`='"+RDEscapeString(name)+"' where "+
|
|
"`STATION_NAME`='"+RDEscapeString(station_name)+"' && "+
|
|
QString::asprintf("`CARD_NUMBER`=%d",cardnum);
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
|
|
|
|
int RDStation::cardInputs(int cardnum) const
|
|
{
|
|
int ret=-1;
|
|
QString sql=QString("select `INPUTS` from `AUDIO_CARDS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(station_name)+"' && "+
|
|
QString::asprintf("`CARD_NUMBER`=%d",cardnum);
|
|
RDSqlQuery *q=new RDSqlQuery(sql);
|
|
if(q->first()) {
|
|
ret=q->value(0).toInt();
|
|
}
|
|
delete q;
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
void RDStation::setCardInputs(int cardnum,int inputs) const
|
|
{
|
|
QString sql=QString("update `AUDIO_CARDS` set ")+
|
|
QString::asprintf("`INPUTS`=%d where ",inputs)+
|
|
"`STATION_NAME`='"+RDEscapeString(station_name)+"' && "+
|
|
QString::asprintf("`CARD_NUMBER`=%d",cardnum);
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
|
|
|
|
int RDStation::cardOutputs(int cardnum) const
|
|
{
|
|
int ret=-1;
|
|
QString sql=QString("select `OUTPUTS` from `AUDIO_CARDS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(station_name)+"' && "+
|
|
QString::asprintf("`CARD_NUMBER`=%d",cardnum);
|
|
RDSqlQuery *q=new RDSqlQuery(sql);
|
|
if(q->first()) {
|
|
ret=q->value(0).toInt();
|
|
}
|
|
delete q;
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
void RDStation::setCardOutputs(int cardnum,int outputs) const
|
|
{
|
|
QString sql=QString("update `AUDIO_CARDS` set ")+
|
|
QString::asprintf("`OUTPUTS`=%d where ",outputs)+
|
|
"`STATION_NAME`='"+RDEscapeString(station_name)+"' && "+
|
|
QString::asprintf("`CARD_NUMBER`=%d",cardnum);
|
|
RDSqlQuery *q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
|
|
|
|
bool RDStation::create(const QString &name,QString *err_msg,
|
|
const QString &exemplar,const QHostAddress &hostaddr)
|
|
{
|
|
QString sql;
|
|
RDSqlQuery *q;
|
|
RDSqlQuery *q1;
|
|
QHostAddress addr=hostaddr;
|
|
|
|
if(addr.isNull()) {
|
|
addr.setAddress("127.0.0.1");
|
|
}
|
|
|
|
//
|
|
// Add Audio Cards
|
|
//
|
|
for(int i=0;i<RD_MAX_CARDS;i++) {
|
|
sql=QString("insert into `AUDIO_CARDS` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`CARD_NUMBER`=%d",i);
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
|
|
//
|
|
// Add Audio Inputs / Outputs
|
|
//
|
|
for(int i=0;i<RD_MAX_CARDS;i++) {
|
|
for(int j=0;j<RD_MAX_PORTS;j++) {
|
|
sql=QString("insert into `AUDIO_INPUTS` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`CARD_NUMBER`=%d,",i)+
|
|
QString::asprintf("`PORT_NUMBER`=%d",j);
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("insert into `AUDIO_OUTPUTS` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`CARD_NUMBER`=%d,",i)+
|
|
QString::asprintf("`PORT_NUMBER`=%d",j);
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
}
|
|
|
|
if(exemplar.isEmpty()) { // Create Blank Host Config
|
|
sql=QString("insert into `STATIONS` set ")+
|
|
"`NAME`='"+RDEscapeString(name)+"',"+
|
|
"`SHORT_NAME`='"+RDEscapeString(name)+"',"+
|
|
"`IPV4_ADDRESS`='"+RDEscapeString(addr.toString())+"',"+
|
|
"`DESCRIPTION`='Workstation "+RDEscapeString(name)+"',"+
|
|
"`USER_NAME`='user',"+
|
|
"`DEFAULT_NAME`='user'";
|
|
q=new RDSqlQuery(sql);
|
|
if(!q->isActive()) {
|
|
*err_msg=QObject::tr("Host already exists!");
|
|
delete q;
|
|
return false;
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Create Service Perms
|
|
//
|
|
sql=QString("select `NAME` from `SERVICES`");
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `SERVICE_PERMS` set ")+
|
|
"`SERVICE_NAME`='"+RDEscapeString(q->value(0).toString())+"',"+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// RDAirPlay/RDPanel Channel Data
|
|
//
|
|
for(unsigned i=0;i<10;i++) {
|
|
sql=QString("insert into `RDAIRPLAY_CHANNELS` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`INSTANCE`=%u",i);
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("insert into `RDPANEL_CHANNELS` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`INSTANCE`=%u",i);
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
for(int i=0;i<RD_RDVAIRPLAY_LOG_QUAN;i++) {
|
|
sql=QString("insert into `RDAIRPLAY_CHANNELS` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`INSTANCE`=%u",i+RD_RDVAIRPLAY_LOG_BASE);
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
for(unsigned i=0;i<RD_CUT_EVENT_ID_QUAN;i++) {
|
|
for(unsigned j=0;j<MAX_DECKS;j++) {
|
|
sql=QString("insert into `DECK_EVENTS` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`CHANNEL`=%u,",j+129)+
|
|
QString::asprintf("`NUMBER`=%u",i+1);
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
}
|
|
|
|
//
|
|
// RDAirPlay Log Modes
|
|
//
|
|
for(int i=0;i<RDAIRPLAY_LOG_QUANTITY;i++) {
|
|
sql=QString::asprintf("insert into `LOG_MODES` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`MACHINE`=%d",i);
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
for(int i=0;i<RD_RDVAIRPLAY_LOG_QUAN;i++) {
|
|
sql=QString::asprintf("insert into `LOG_MODES` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`MACHINE`=%d",i+RD_RDVAIRPLAY_LOG_BASE);
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
|
|
//
|
|
// Log Machine Parameters
|
|
//
|
|
for(int i=0;i<3;i++) {
|
|
sql=QString("insert into `LOG_MACHINES` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`MACHINE`=%d",i);
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
for(int i=RD_RDVAIRPLAY_LOG_BASE;i<(RD_RDVAIRPLAY_LOG_BASE+RD_RDVAIRPLAY_LOG_QUAN);i++) {
|
|
sql=QString("insert into `LOG_MACHINES` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`MACHINE`=%d",i);
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
|
|
//
|
|
// RDLibrary Parameters
|
|
//
|
|
sql=QString("insert into `RDLIBRARY` set ")+
|
|
"`STATION`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
//
|
|
// RDLogEdit Parameters
|
|
//
|
|
sql=QString("insert into `RDLOGEDIT` set ")+
|
|
"`STATION`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
else { // Use Template Host
|
|
sql=QString("select ")+
|
|
"`DEFAULT_NAME`,"+ // 00
|
|
"`STARTUP_CART`,"+ // 01
|
|
"`TIME_OFFSET`,"+ // 02
|
|
"`BROADCAST_SECURITY`,"+ // 03
|
|
"`HEARTBEAT_CART`,"+ // 04
|
|
"`HEARTBEAT_INTERVAL`,"+ // 05
|
|
"`FILTER_MODE`,"+ // 06
|
|
"`SYSTEM_MAINT`,"+ // 07
|
|
"`HTTP_STATION`,"+ // 08
|
|
"`CAE_STATION`,"+ // 09
|
|
"`START_JACK`,"+ // 10
|
|
"`JACK_SERVER_NAME`,"+ // 11
|
|
"`JACK_COMMAND_LINE`,"+ // 12
|
|
"`JACK_PORTS`,"+ // 13
|
|
"`CUE_CARD`,"+ // 14
|
|
"`CUE_PORT`,"+ // 15
|
|
"`CUE_START_CART`,"+ // 16
|
|
"`CUE_STOP_CART`,"+ // 17
|
|
"`CARTSLOT_COLUMNS`,"+ // 18
|
|
"`CARTSLOT_ROWS`,"+ // 19
|
|
"`ENABLE_DRAGDROP`,"+ // 20
|
|
"`ENFORCE_PANEL_SETUP`,"+ // 21
|
|
"`REPORT_EDITOR_PATH`,"+ // 22
|
|
"`BROWSER_PATH`,"+ // 23
|
|
"`SSH_IDENTITY_FILE` "+ // 24
|
|
"from `STATIONS` where "+
|
|
"`NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
if(q->first()) {
|
|
sql=QString("insert into STATIONS set ")+
|
|
"`NAME`='"+RDEscapeString(name)+"',"+
|
|
"`SHORT_NAME`='"+RDEscapeString(name)+"',"+
|
|
"`IPV4_ADDRESS`='"+RDEscapeString(addr.toString())+"',"+
|
|
"`DESCRIPTION`='"+RDEscapeString("Workstation "+name)+"',"+
|
|
"`USER_NAME`='"+RDEscapeString(q->value(0).toString())+"',"+
|
|
"`DEFAULT_NAME`='"+RDEscapeString(q->value(0).toString())+"',"+
|
|
QString::asprintf("`STARTUP_CART`=%u,",q->value(1).toUInt())+
|
|
QString::asprintf("`TIME_OFFSET`=%d,",q->value(2).toInt())+
|
|
QString::asprintf("`BROADCAST_SECURITY`=%u,",q->value(3).toUInt())+
|
|
QString::asprintf("`HEARTBEAT_CART`=%u,",q->value(4).toUInt())+
|
|
QString::asprintf("`HEARTBEAT_INTERVAL`=%u,",q->value(5).toUInt())+
|
|
QString::asprintf("`FILTER_MODE`=%d,",q->value(6).toInt())+
|
|
"`SYSTEM_MAINT`='"+RDEscapeString(q->value(7).toString())+"',"+
|
|
"`HTTP_STATION`='"+RDEscapeString(q->value(8).toString())+"',"+
|
|
"`CAE_STATION`='"+RDEscapeString(q->value(9).toString())+"',"+
|
|
"`START_JACK`='"+RDEscapeString(q->value(10).toString())+"',"+
|
|
"`JACK_SERVER_NAME`='"+RDEscapeString(q->value(11).toString())+"',"+
|
|
"`JACK_COMMAND_LINE`='"+RDEscapeString(q->value(12).toString())+"',"+
|
|
QString::asprintf("`JACK_PORTS`=%d,",q->value(13).toInt())+
|
|
QString::asprintf("`CUE_CARD`=%d,",q->value(14).toInt())+
|
|
QString::asprintf("`CUE_PORT`=%d,",q->value(15).toInt())+
|
|
QString::asprintf("`CUE_START_CART`=%u,",q->value(16).toInt())+
|
|
QString::asprintf("`CUE_STOP_CART`=%u,",q->value(17).toInt())+
|
|
QString::asprintf("`CARTSLOT_COLUMNS`=%d,",q->value(18).toInt())+
|
|
QString::asprintf("`CARTSLOT_ROWS`=%d,",q->value(19).toInt())+
|
|
"`ENABLE_DRAGDROP`='"+RDEscapeString(q->value(20).toString())+"',"+
|
|
"`ENFORCE_PANEL_SETUP`='"+RDEscapeString(q->value(21).toString())+"',"+
|
|
"`REPORT_EDITOR_PATH`='"+RDEscapeString(q->value(22).toString())+"',"+
|
|
"`BROWSER_PATH`='"+RDEscapeString(q->value(23).toString())+"',"+
|
|
"`SSH_IDENTITY_FILE`='"+RDEscapeString(q->value(24).toString())+"'";
|
|
q1=new RDSqlQuery(sql);
|
|
if(!q1->isActive()) {
|
|
*err_msg=QObject::tr("host already exists");
|
|
delete q1;
|
|
delete q;
|
|
return false;
|
|
}
|
|
delete q1;
|
|
}
|
|
else {
|
|
*err_msg=QObject::tr("template host")+" \""+exemplar+"\" "+
|
|
QObject::tr("does not exist");
|
|
delete q;
|
|
return false;
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone Service Perms
|
|
//
|
|
sql=QString("select `SERVICE_NAME` from `SERVICE_PERMS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `SERVICE_PERMS` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
"`SERVICE_NAME`='"+RDEscapeString(q->value(0).toString())+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone RDLibrary Config
|
|
//
|
|
sql=QString("select ")+
|
|
"`INPUT_CARD`,"+ // 00
|
|
"`INPUT_PORT`,"+ // 01
|
|
"`INPUT_TYPE`,"+ // 02
|
|
"`OUTPUT_CARD`,"+ // 03
|
|
"`OUTPUT_PORT`,"+ // 04
|
|
"`VOX_THRESHOLD`,"+ // 05
|
|
"`TRIM_THRESHOLD`,"+ // 06
|
|
"`DEFAULT_FORMAT`,"+ // 07
|
|
"`DEFAULT_CHANNELS`,"+ // 08
|
|
"`DEFAULT_LAYER`,"+ // 09
|
|
"`DEFAULT_BITRATE`,"+ // 10
|
|
"`DEFAULT_RECORD_MODE`,"+ // 11
|
|
"`DEFAULT_TRIM_STATE`,"+ // 12
|
|
"`MAXLENGTH`,"+ // 13
|
|
"`TAIL_PREROLL`,"+ // 14
|
|
"`RIPPER_DEVICE`,"+ // 15
|
|
"`PARANOIA_LEVEL`,"+ // 16
|
|
"`RIPPER_LEVEL`,"+ // 17
|
|
"`CDDB_SERVER`,"+ // 18
|
|
"`READ_ISRC`,"+ // 19
|
|
"`ENABLE_EDITOR`,"+ // 20
|
|
"`SRC_CONVERTER`,"+ // 21
|
|
"`LIMIT_SEARCH`,"+ // 22
|
|
"`SEARCH_LIMITED`,"+ // 23
|
|
"`IS_SINGLETON` "+ // 24
|
|
"from `RDLIBRARY` where "+
|
|
"`STATION`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
if(q->first()) {
|
|
sql=QString("insert into `RDLIBRARY` set ")+
|
|
QString::asprintf("`INPUT_CARD`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`INPUT_PORT`=%d,",q->value(1).toInt())+
|
|
"`INPUT_TYPE`='"+RDEscapeString(q->value(2).toString())+"',"+
|
|
QString::asprintf("`OUTPUT_CARD`=%d,",q->value(3).toInt())+
|
|
QString::asprintf("`OUTPUT_PORT`=%d,",q->value(4).toInt())+
|
|
QString::asprintf("`VOX_THRESHOLD`=%d,",q->value(5).toInt())+
|
|
QString::asprintf("`TRIM_THRESHOLD`=%d,",q->value(6).toInt())+
|
|
QString::asprintf("`DEFAULT_FORMAT`=%u,",q->value(7).toUInt())+
|
|
QString::asprintf("`DEFAULT_CHANNELS`=%u,",q->value(8).toUInt())+
|
|
QString::asprintf("`DEFAULT_LAYER`=%u,",q->value(9).toUInt())+
|
|
QString::asprintf("`DEFAULT_BITRATE`=%u,",q->value(10).toUInt())+
|
|
QString::asprintf("`DEFAULT_RECORD_MODE`=%u,",q->value(11).toUInt())+
|
|
"`DEFAULT_TRIM_STATE`='"+RDEscapeString(q->value(12).toString())+"',"+
|
|
QString::asprintf("`MAXLENGTH`=%d,",q->value(13).toInt())+
|
|
QString::asprintf("`TAIL_PREROLL`=%u,",q->value(14).toUInt())+
|
|
"`RIPPER_DEVICE`='"+RDEscapeString(q->value(15).toString())+"',"+
|
|
QString::asprintf("`PARANOIA_LEVEL`=%d,",q->value(16).toInt())+
|
|
QString::asprintf("`RIPPER_LEVEL`=%d,",q->value(17).toInt())+
|
|
"`CDDB_SERVER`='"+RDEscapeString(q->value(18).toString())+"',"+
|
|
"`READ_ISRC`='"+RDEscapeString(q->value(19).toString())+"',"+
|
|
"`ENABLE_EDITOR`='"+RDEscapeString(q->value(20).toString())+"',"+
|
|
QString::asprintf("`SRC_CONVERTER`=%d,",q->value(21).toInt())+
|
|
QString::asprintf("`LIMIT_SEARCH`=%d,",q->value(22).toInt())+
|
|
"`SEARCH_LIMITED`='"+RDEscapeString(q->value(23).toString())+"',"+
|
|
"`IS_SINGLETON`='"+q->value(24).toString()+"',"+
|
|
"`STATION`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone RDLogEdit Config
|
|
//
|
|
sql=QString("select ")+
|
|
"`INPUT_CARD`,"+ // 00
|
|
"`INPUT_PORT`,"+ // 01
|
|
"`OUTPUT_CARD`,"+ // 02
|
|
"`OUTPUT_PORT`,"+ // 03
|
|
"`FORMAT`,"+ // 04
|
|
"`DEFAULT_CHANNELS`,"+ // 05
|
|
"`LAYER`,"+ // 06
|
|
"`BITRATE`,"+ // 07
|
|
"`MAXLENGTH`,"+ // 08
|
|
"`TAIL_PREROLL`,"+ // 09
|
|
"`START_CART`,"+ // 10
|
|
"`END_CART`,"+ // 11
|
|
"`REC_START_CART`,"+ // 12
|
|
"`REC_END_CART`,"+ // 13
|
|
"`TRIM_THRESHOLD`,"+ // 14
|
|
"`RIPPER_LEVEL`,"+ // 15
|
|
"`DEFAULT_TRANS_TYPE`,"+ // 16
|
|
"`ENABLE_SECOND_START`,"+ // 17
|
|
"`IS_SINGLETON` "+ // 18
|
|
"from `RDLOGEDIT` where "+
|
|
"`STATION`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
if(q->first()) {
|
|
sql=QString("insert into `RDLOGEDIT` set ")+
|
|
QString::asprintf("`INPUT_CARD`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`INPUT_PORT`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`OUTPUT_CARD`=%d,",q->value(2).toInt())+
|
|
QString::asprintf("`OUTPUT_PORT`=%d,",q->value(3).toInt())+
|
|
QString::asprintf("`FORMAT`=%u,",q->value(4).toUInt())+
|
|
QString::asprintf("`DEFAULT_CHANNELS`=%u,",q->value(5).toUInt())+
|
|
QString::asprintf("`LAYER`=%u,",q->value(6).toUInt())+
|
|
QString::asprintf("`BITRATE`=%u,",q->value(7).toUInt())+
|
|
QString::asprintf("`MAXLENGTH`=%d,",q->value(8).toInt())+
|
|
QString::asprintf("`TAIL_PREROLL`=%u,",q->value(9).toUInt())+
|
|
"`STATION`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`START_CART`=%u,",q->value(10).toUInt())+
|
|
QString::asprintf("`END_CART`=%u,",q->value(11).toUInt())+
|
|
QString::asprintf("`REC_START_CART`=%u,",q->value(12).toUInt())+
|
|
QString::asprintf("`REC_END_CART`=%u,",q->value(13).toUInt())+
|
|
QString::asprintf("`TRIM_THRESHOLD`=%d,",q->value(14).toInt())+
|
|
QString::asprintf("`RIPPER_LEVEL`=%d,",q->value(15).toInt())+
|
|
QString::asprintf("`DEFAULT_TRANS_TYPE`=%d,",q->value(16).toInt())+
|
|
"`ENABLE_SECOND_START`='"+RDEscapeString(q->value(17).toString())+"',"+
|
|
"`IS_SINGLETON`='"+q->value(18).toString()+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone RDCatch Config
|
|
//
|
|
sql=QString("select ")+
|
|
"`CHANNEL`,"+ // 00
|
|
"`CARD_NUMBER`,"+ // 01
|
|
"`PORT_NUMBER`,"+ // 02
|
|
"`MON_PORT_NUMBER`,"+ // 03
|
|
"`DEFAULT_MONITOR_ON`,"+ // 04
|
|
"`PORT_TYPE`,"+ // 05
|
|
"`DEFAULT_FORMAT`,"+ // 06
|
|
"`DEFAULT_CHANNELS`,"+ // 07
|
|
"`DEFAULT_BITRATE`,"+ // 08
|
|
"`DEFAULT_THRESHOLD`,"+ // 09
|
|
"`SWITCH_STATION`,"+ // 10
|
|
"`SWITCH_MATRIX`,"+ // 11
|
|
"`SWITCH_OUTPUT`,"+ // 12
|
|
"`SWITCH_DELAY` "+ // 13
|
|
"from `DECKS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `DECKS` set ")+
|
|
QString::asprintf("`CHANNEL`=%u,",q->value(0).toUInt())+
|
|
QString::asprintf("`CARD_NUMBER`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`PORT_NUMBER`=%d,",q->value(2).toInt())+
|
|
QString::asprintf("`MON_PORT_NUMBER`=%d,",q->value(3).toInt())+
|
|
"`DEFAULT_MONITOR_ON`='"+RDEscapeString(q->value(4).toString())+"',"+
|
|
"`PORT_TYPE`='"+RDEscapeString(q->value(5).toString())+"',"+
|
|
QString::asprintf("`DEFAULT_FORMAT`=%d,",q->value(6).toInt())+
|
|
QString::asprintf("`DEFAULT_CHANNELS`=%d,",q->value(7).toInt())+
|
|
QString::asprintf("`DEFAULT_BITRATE`=%d,",q->value(8).toInt())+
|
|
QString::asprintf("`DEFAULT_THRESHOLD`=%d,",q->value(9).toInt())+
|
|
"`SWITCH_STATION`='"+RDEscapeString(q->value(10).toString())+"',"+
|
|
QString::asprintf("`SWITCH_MATRIX`=%d,",q->value(11).toInt())+
|
|
QString::asprintf("`SWITCH_OUTPUT`=%d,",q->value(12).toInt())+
|
|
QString::asprintf("`SWITCH_DELAY`=%d,",q->value(13).toInt())+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone Deck Events
|
|
//
|
|
sql=QString("select ")+
|
|
"`CHANNEL`,"+ // 00
|
|
"`NUMBER`,"+ // 01
|
|
"`CART_NUMBER` "+ // 02
|
|
"from `DECK_EVENTS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `DECK_EVENTS` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`CHANNEL`=%u,",q->value(0).toUInt())+
|
|
QString::asprintf("`NUMBER`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`CART_NUMBER`=%u",q->value(2).toUInt());
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone RDAirPlay Config
|
|
//
|
|
sql=QString("select ")+
|
|
"`SEGUE_LENGTH`,"+ // 00
|
|
"`TRANS_LENGTH`,"+ // 01
|
|
"`LOG_MODE_STYLE`,"+ // 02
|
|
"`PIE_COUNT_LENGTH`,"+ // 03
|
|
"`PIE_COUNT_ENDPOINT`,"+ // 04
|
|
"`CHECK_TIMESYNC`,"+ // 05
|
|
"`STATION_PANELS`,"+ // 06
|
|
"`USER_PANELS`," // 07
|
|
"`SHOW_AUX_1`,"+ // 08
|
|
"`SHOW_AUX_2`,"+ // 09
|
|
"`CLEAR_FILTER`,"+ // 10
|
|
"`DEFAULT_TRANS_TYPE`,"+ // 11
|
|
"`BAR_ACTION`,"+ // 12
|
|
"`FLASH_PANEL`,"+ // 13
|
|
"`PANEL_PAUSE_ENABLED`,"+ // 14
|
|
"`BUTTON_LABEL_TEMPLATE`,"+ // 15
|
|
"`PAUSE_ENABLED`,"+ // 16
|
|
"`DEFAULT_SERVICE`,"+ // 17
|
|
"`HOUR_SELECTOR_ENABLED`,"+ // 18
|
|
"`TITLE_TEMPLATE`,"+ // 19
|
|
"`ARTIST_TEMPLATE`,"+ // 20
|
|
"`OUTCUE_TEMPLATE`,"+ // 21
|
|
"`DESCRIPTION_TEMPLATE`,"+ // 22
|
|
"`EXIT_PASSWORD`,"+ // 23
|
|
"`SKIN_PATH`,"+ // 24
|
|
"`SHOW_COUNTERS` "+ // 25
|
|
"from `RDAIRPLAY` where "+
|
|
"`STATION`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
if(q->first()) {
|
|
sql=QString("insert into `RDAIRPLAY` set ")+
|
|
QString::asprintf("`SEGUE_LENGTH`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`TRANS_LENGTH`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`LOG_MODE_STYLE`=%d,",q->value(2).toInt())+
|
|
QString::asprintf("`PIE_COUNT_LENGTH`=%d,",q->value(3).toInt())+
|
|
QString::asprintf("`PIE_COUNT_ENDPOINT`=%d,",q->value(4).toInt())+
|
|
"`CHECK_TIMESYNC`='"+RDEscapeString(q->value(5).toString())+"',"+
|
|
QString::asprintf("`STATION_PANELS`=%d,",q->value(6).toInt())+
|
|
QString::asprintf("`USER_PANELS`=%d,",q->value(7).toInt())+
|
|
"`SHOW_AUX_1`='"+RDEscapeString(q->value(8).toString())+"',"+
|
|
"`SHOW_AUX_2`='"+RDEscapeString(q->value(9).toString())+"',"+
|
|
"`CLEAR_FILTER`='"+RDEscapeString(q->value(10).toString())+"',"+
|
|
QString::asprintf("`DEFAULT_TRANS_TYPE`=%u,",q->value(11).toUInt())+
|
|
QString::asprintf("`BAR_ACTION`=%u,",q->value(12).toUInt())+
|
|
"`FLASH_PANEL`='"+RDEscapeString(q->value(13).toString())+"',"+
|
|
"`PANEL_PAUSE_ENABLED`='"+RDEscapeString(q->value(14).toString())+"',"+
|
|
"`BUTTON_LABEL_TEMPLATE`='"+RDEscapeString(q->value(15).toString())+
|
|
"',"+
|
|
"`PAUSE_ENABLED`='"+RDEscapeString(q->value(16).toString())+"',"+
|
|
"`DEFAULT_SERVICE`='"+RDEscapeString(q->value(17).toString())+"',"+
|
|
"`HOUR_SELECTOR_ENABLED`='"+RDEscapeString(q->value(18).toString())+
|
|
"',"+
|
|
"`TITLE_TEMPLATE`='"+RDEscapeString(q->value(19).toString())+"',"+
|
|
"`ARTIST_TEMPLATE`='"+RDEscapeString(q->value(20).toString())+"',"+
|
|
"`OUTCUE_TEMPLATE`='"+RDEscapeString(q->value(21).toString())+"',"+
|
|
"`DESCRIPTION_TEMPLATE`='"+RDEscapeString(q->value(22).toString())+"',"+
|
|
"`EXIT_PASSWORD`='"+RDEscapeString(q->value(23).toString())+"',"+
|
|
"`SKIN_PATH`='"+RDEscapeString(q->value(24).toString())+"',"+
|
|
"`SHOW_COUNTERS`='"+RDEscapeString(q->value(25).toString())+"',"+
|
|
"`STATION`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
sql=QString("select ")+
|
|
"`INSTANCE`,"+ // 00
|
|
"`CARD`,"+ // 01
|
|
"`PORT`,"+ // 02
|
|
"`START_RML`,"+ // 03
|
|
"`STOP_RML`,"+ // 04
|
|
"`START_GPI_MATRIX`,"+ // 05
|
|
"`START_GPI_LINE`,"+ // 06
|
|
"`START_GPO_MATRIX`,"+ // 07
|
|
"`START_GPO_LINE`,"+ // 08
|
|
"`STOP_GPI_MATRIX`,"+ // 09
|
|
"`STOP_GPI_LINE`,"+ // 10
|
|
"`STOP_GPO_MATRIX`,"+ // 11
|
|
"`STOP_GPO_LINE` "+ // 12
|
|
"from `RDAIRPLAY_CHANNELS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into RDAIRPLAY_CHANNELS set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`INSTANCE`=%u,",q->value(0).toUInt())+
|
|
QString::asprintf("`CARD`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`PORT`=%d,",q->value(2).toInt())+
|
|
"`START_RML`='"+RDEscapeString(q->value(3).toString())+"',"+
|
|
"`STOP_RML`='"+RDEscapeString(q->value(4).toString())+"',"+
|
|
QString::asprintf("`START_GPI_MATRIX`=%d,",q->value(5).toInt())+
|
|
QString::asprintf("`START_GPI_LINE`=%d,",q->value(6).toInt())+
|
|
QString::asprintf("`START_GPO_MATRIX`=%d,",q->value(7).toInt())+
|
|
QString::asprintf("`START_GPO_LINE`=%d,",q->value(8).toInt())+
|
|
QString::asprintf("`STOP_GPI_MATRIX`=%d,",q->value(9).toInt())+
|
|
QString::asprintf("`STOP_GPI_LINE`=%d,",q->value(10).toInt())+
|
|
QString::asprintf("`STOP_GPO_MATRIX`=%d,",q->value(11).toInt())+
|
|
QString::asprintf("`STOP_GPO_LINE`=%d",q->value(12).toInt());
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone RDAirPlay Log Modes
|
|
//
|
|
sql=QString("select ")+
|
|
"`MACHINE`,"+ // 00
|
|
"`START_MODE`,"+ // 01
|
|
"`OP_MODE` "+ // 02
|
|
"from `LOG_MODES` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString::asprintf("insert into `LOG_MODES` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`MACHINE`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`START_MODE`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`OP_MODE`=%d",q->value(2).toInt());
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone RDPanel Config
|
|
//
|
|
sql=QString("select ")+
|
|
"`STATION_PANELS`,"+ // 00
|
|
"`USER_PANELS`,"+ // 01
|
|
"`CLEAR_FILTER`,"+ // 02
|
|
"`FLASH_PANEL`,"+ // 03
|
|
"`PANEL_PAUSE_ENABLED`,"+ // 04
|
|
"`BUTTON_LABEL_TEMPLATE`,"+ // 05
|
|
"`DEFAULT_SERVICE`,"+ // 06
|
|
"`SKIN_PATH` "+ // 07
|
|
"from `RDPANEL` where "+
|
|
"`STATION`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
if(q->first()) {
|
|
sql=QString("insert into `RDPANEL` set ")+
|
|
QString::asprintf("`STATION_PANELS`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`USER_PANELS`=%d,",q->value(1).toInt())+
|
|
"`CLEAR_FILTER`='"+RDEscapeString(q->value(2).toString())+"',"+
|
|
"`FLASH_PANEL`='"+RDEscapeString(q->value(3).toString())+"',"+
|
|
"`PANEL_PAUSE_ENABLED`='"+RDEscapeString(q->value(4).toString())+"',"+
|
|
"`BUTTON_LABEL_TEMPLATE`='"+RDEscapeString(q->value(5).toString())+"',"+
|
|
"`DEFAULT_SERVICE`='"+RDEscapeString(q->value(6).toString())+"',"+
|
|
"`SKIN_PATH`='"+RDEscapeString(q->value(7).toString())+"',"+
|
|
"`STATION`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
sql=QString("select ")+
|
|
"`INSTANCE`,"+ // 00
|
|
"`CARD`,"+ // 01
|
|
"`PORT`,"+ // 02
|
|
"`START_RML`,"+ // 03
|
|
"`STOP_RML`,"+ // 04
|
|
"`GPIO_TYPE`,"+ // 05
|
|
"`START_GPI_MATRIX`,"+ // 06
|
|
"`START_GPI_LINE`,"+ // 07
|
|
"`START_GPO_MATRIX`,"+ // 08
|
|
"`START_GPO_LINE`,"+ // 09
|
|
"`STOP_GPI_MATRIX`,"+ // 10
|
|
"`STOP_GPI_LINE`,"+ // 11
|
|
"`STOP_GPO_MATRIX`,"+ // 12
|
|
"`STOP_GPO_LINE` "+ // 13
|
|
"from `RDPANEL_CHANNELS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `RDPANEL_CHANNELS` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`INSTANCE`=%u,",q->value(0).toUInt())+
|
|
QString::asprintf("`CARD`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`PORT`=%d,",q->value(2).toInt())+
|
|
"`START_RML`='"+RDEscapeString(q->value(3).toString())+"',"+
|
|
"`STOP_RML`='"+RDEscapeString(q->value(4).toString())+"',"+
|
|
QString::asprintf("`GPIO_TYPE`=%d,",q->value(5).toInt())+
|
|
QString::asprintf("`START_GPI_MATRIX`=%d,",q->value(6).toInt())+
|
|
QString::asprintf("`START_GPI_LINE`=%d,",q->value(7).toInt())+
|
|
QString::asprintf("`START_GPO_MATRIX`=%d,",q->value(8).toInt())+
|
|
QString::asprintf("`START_GPO_LINE`=%d,",q->value(9).toInt())+
|
|
QString::asprintf("`STOP_GPI_MATRIX`=%d,",q->value(10).toInt())+
|
|
QString::asprintf("`STOP_GPI_LINE`=%d,",q->value(11).toInt())+
|
|
QString::asprintf("`STOP_GPO_MATRIX`=%d,",q->value(12).toInt())+
|
|
QString::asprintf("`STOP_GPO_LINE`=%d",q->value(13).toInt());
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone the Serial Setups
|
|
//
|
|
sql=QString("select ")+
|
|
"`PORT_ID`,"+ // 00
|
|
"`ACTIVE`,"+ // 01
|
|
"`PORT`,"+ // 02
|
|
"`BAUD_RATE`,"+ // 03
|
|
"`DATA_BITS`,"+ // 04
|
|
"`STOP_BITS`,"+ // 05
|
|
"`PARITY`,"+ // 06
|
|
"`TERMINATION` "+ // 07
|
|
"from `TTYS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `TTYS` set ")+
|
|
QString::asprintf("`PORT_ID`=%u,",q->value(0).toUInt())+
|
|
"`ACTIVE`='"+RDEscapeString(q->value(1).toString())+"',"+
|
|
"`PORT`='"+RDEscapeString(q->value(2).toString())+"',"+
|
|
QString::asprintf("`BAUD_RATE`=%d,",q->value(3).toInt())+
|
|
QString::asprintf("`DATA_BITS`=%d,",q->value(4).toInt())+
|
|
QString::asprintf("`STOP_BITS`=%d,",q->value(5).toInt())+
|
|
QString::asprintf("`PARITY`=%d,",q->value(6).toInt())+
|
|
QString::asprintf("`TERMINATION`=%d,",q->value(7).toInt())+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone Matrices
|
|
//
|
|
sql=QString("select ")+
|
|
"`NAME`,"+ // 00
|
|
"`MATRIX`,"+ // 01
|
|
"`TYPE`,"+ // 02
|
|
"`LAYER`,"+ // 03
|
|
"`PORT_TYPE`,"+ // 04
|
|
"`PORT_TYPE_2`,"+ // 05
|
|
"`CARD`,"+ // 06
|
|
"`PORT`,"+ // 07
|
|
"`PORT_2`,"+ // 08
|
|
"`IP_ADDRESS`,"+ // 09
|
|
"`IP_ADDRESS_2`,"+ // 10
|
|
"`IP_PORT`,"+ // 11
|
|
"`IP_PORT_2`,"+ // 12
|
|
"`USERNAME`,"+ // 13
|
|
"`USERNAME_2`,"+ // 14
|
|
"`PASSWORD`,"+ // 15
|
|
"`PASSWORD_2`,"+ // 16
|
|
"`START_CART`,"+ // 17
|
|
"`STOP_CART`,"+ // 18
|
|
"`START_CART_2`,"+ // 19
|
|
"`STOP_CART_2`,"+ // 20
|
|
"`GPIO_DEVICE`,"+ // 21
|
|
"`INPUTS`,"+ // 22
|
|
"`OUTPUTS`,"+ // 23
|
|
"`GPIS`,"+ // 24
|
|
"`GPOS`,"+ // 25
|
|
"`FADERS`,"+ // 26
|
|
"`DISPLAYS` "+ // 27
|
|
"from `MATRICES` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `MATRICES` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
"`NAME`='"+RDEscapeString(q->value(0).toString())+"',"+
|
|
QString::asprintf("`MATRIX`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`TYPE`=%d,",q->value(2).toInt())+
|
|
QString::asprintf("`LAYER`=%d,",q->value(3).toInt())+
|
|
QString::asprintf("`PORT_TYPE`=%d,",q->value(4).toInt())+
|
|
QString::asprintf("`PORT_TYPE_2`=%d,",q->value(5).toInt())+
|
|
QString::asprintf("`CARD`=%d,",q->value(6).toInt())+
|
|
QString::asprintf("`PORT`=%d,",q->value(7).toInt())+
|
|
QString::asprintf("`PORT_2`=%d,",q->value(8).toInt())+
|
|
"`IP_ADDRESS`='"+RDEscapeString(q->value(9).toString())+"',"+
|
|
"`IP_ADDRESS_2`='"+RDEscapeString(q->value(10).toString())+"',"+
|
|
QString::asprintf("`IP_PORT`=%d,",q->value(11).toInt())+
|
|
QString::asprintf("`IP_PORT_2`=%d,",q->value(12).toInt())+
|
|
"`USERNAME`='"+RDEscapeString(q->value(13).toString())+"',"+
|
|
"`USERNAME_2`='"+RDEscapeString(q->value(14).toString())+"',"+
|
|
"`PASSWORD`='"+RDEscapeString(q->value(15).toString())+"',"+
|
|
"`PASSWORD_2`='"+RDEscapeString(q->value(16).toString())+"',"+
|
|
"`START_CART`='"+RDEscapeString(q->value(17).toString())+"',"+
|
|
"`STOP_CART`='"+RDEscapeString(q->value(18).toString())+"',"+
|
|
"`START_CART_2`='"+RDEscapeString(q->value(19).toString())+"',"+
|
|
"`STOP_CART_2`='"+RDEscapeString(q->value(20).toString())+"',"+
|
|
"`GPIO_DEVICE`='"+RDEscapeString(q->value(21).toString())+"',"+
|
|
QString::asprintf("`INPUTS`=%d,",q->value(22).toInt())+
|
|
QString::asprintf("`OUTPUTS`=%d,",q->value(23).toInt())+
|
|
QString::asprintf("`GPIS`=%d,",q->value(24).toInt())+
|
|
QString::asprintf("`GPOS`=%d,",q->value(25).toInt())+
|
|
QString::asprintf("`FADERS`=%d,",q->value(26).toInt())+
|
|
QString::asprintf("`DISPLAYS`=%d ",q->value(27).toInt());
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone Matrix Inputs
|
|
//
|
|
sql=QString("select ")+
|
|
"`MATRIX`,"+ // 00
|
|
"`NUMBER`,"+ // 01
|
|
"`NAME`,"+ // 02
|
|
"`FEED_NAME`,"+ // 03
|
|
"`CHANNEL_MODE`,"+ // 04
|
|
"`ENGINE_NUM`,"+ // 05
|
|
"`DEVICE_NUM`,"+ // 06
|
|
"`NODE_HOSTNAME`,"+ // 07
|
|
"`NODE_TCP_PORT`,"+ // 08
|
|
"`NODE_SLOT` "+ // 09
|
|
"from `INPUTS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `INPUTS` set ")+
|
|
QString::asprintf("`MATRIX`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`NUMBER`=%d,",q->value(1).toInt())+
|
|
"`NAME`='"+RDEscapeString(q->value(2).toString())+"',"+
|
|
"`FEED_NAME`='"+RDEscapeString(q->value(3).toString())+"',"+
|
|
QString::asprintf("`CHANNEL_MODE`=%d,",q->value(4).toInt())+
|
|
QString::asprintf("`ENGINE_NUM`=%d,",q->value(5).toInt())+
|
|
QString::asprintf("`DEVICE_NUM`=%d,",q->value(6).toInt())+
|
|
"`NODE_HOSTNAME`='"+RDEscapeString(q->value(7).toString())+"',"+
|
|
QString::asprintf("`NODE_TCP_PORT`=%d,",q->value(8).toInt())+
|
|
QString::asprintf("`NODE_SLOT`=%d,",q->value(9).toInt())+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone Matrix Outputs
|
|
//
|
|
sql=QString("select ")+
|
|
"`MATRIX`,"+ // 00
|
|
"`NUMBER`,"+ // 01
|
|
"`NAME`,"+ // 02
|
|
"`ENGINE_NUM`,"+ // 03
|
|
"`DEVICE_NUM`,"+ // 04
|
|
"`NODE_HOSTNAME`,"+ // 05
|
|
"`NODE_TCP_PORT`,"+ // 06
|
|
"`NODE_SLOT` "+ // 07
|
|
"from `OUTPUTS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `OUTPUTS` set ")+
|
|
QString::asprintf("`MATRIX`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`NUMBER`=%d,",q->value(1).toInt())+
|
|
"`NAME`='"+RDEscapeString(q->value(2).toString())+"',"+
|
|
QString::asprintf("`ENGINE_NUM`=%d,",q->value(3).toInt())+
|
|
QString::asprintf("`DEVICE_NUM`=%d,",q->value(4).toInt())+
|
|
"`NODE_HOSTNAME`='"+RDEscapeString(q->value(5).toString())+"',"+
|
|
QString::asprintf("`NODE_TCP_PORT`=%d,",q->value(6).toInt())+
|
|
QString::asprintf("`NODE_SLOT`=%d,",q->value(7).toInt())+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone GPIs
|
|
//
|
|
sql=QString("select ")+
|
|
"`MATRIX`,"+ // 00
|
|
"`NUMBER`,"+ // 01
|
|
"`MACRO_CART`,"+ // 02
|
|
"`OFF_MACRO_CART` "+ // 03
|
|
"from `GPIS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `GPIS` set ")+
|
|
QString::asprintf("`MATRIX`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`NUMBER`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`MACRO_CART`=%d,",q->value(2).toInt())+
|
|
QString::asprintf("`OFF_MACRO_CART`=%d,",q->value(3).toInt())+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone GPOs
|
|
//
|
|
sql=QString("select ")+
|
|
"`MATRIX`,"+ // 00
|
|
"`NUMBER`,"+ // 01
|
|
"`MACRO_CART`,"+ // 02
|
|
"`OFF_MACRO_CART` "+ // 03
|
|
"from `GPOS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `GPOS` set ")+
|
|
QString::asprintf("`MATRIX`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`NUMBER`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`MACRO_CART`=%d,",q->value(2).toInt())+
|
|
QString::asprintf("`OFF_MACRO_CART`=%d,",q->value(3).toInt())+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone vGuest Settings
|
|
//
|
|
sql=QString("select ")+
|
|
"`MATRIX_NUM`,"+ // 00
|
|
"`VGUEST_TYPE`,"+ // 01
|
|
"`NUMBER`,"+ // 02
|
|
"`ENGINE_NUM`,"+ // 03
|
|
"`DEVICE_NUM`,"+ // 04
|
|
"`SURFACE_NUM`,"+ // 05
|
|
"`RELAY_NUM`,"+ // 06
|
|
"`BUSS_NUM` "+ // 07
|
|
"from `VGUEST_RESOURCES` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `VGUEST_RESOURCES` set ")+
|
|
QString::asprintf("`MATRIX_NUM`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`VGUEST_TYPE`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`NUMBER`=%d,",q->value(2).toInt())+
|
|
QString::asprintf("`ENGINE_NUM`=%d,",q->value(3).toInt())+
|
|
QString::asprintf("`DEVICE_NUM`=%d,",q->value(4).toInt())+
|
|
QString::asprintf("`SURFACE_NUM`=%d,",q->value(5).toInt())+
|
|
QString::asprintf("`RELAY_NUM`=%d,",q->value(6).toInt())+
|
|
QString::asprintf("`BUSS_NUM`=%d,",q->value(7).toInt())+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone Host Variables
|
|
//
|
|
sql=QString("select ")+
|
|
"`NAME`,"+ // 00
|
|
"`VARVALUE`,"+ // 01
|
|
"`REMARK` "+ // 02
|
|
"from `HOSTVARS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `HOSTVARS` set ")+
|
|
"`NAME`='"+RDEscapeString(q->value(0).toString())+"',"+
|
|
"`VARVALUE`='"+RDEscapeString(q->value(1).toString())+"',"+
|
|
"`REMARK`='"+RDEscapeString(q->value(2).toString())+"',"+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone System Panels
|
|
//
|
|
sql=QString("select ")+
|
|
"`PANEL_NO`,"+
|
|
"`ROW_NO`,"+
|
|
"`COLUMN_NO`,"+
|
|
"`LABEL`,"+
|
|
"`CART`,"+
|
|
"`DEFAULT_COLOR` "+
|
|
"from `PANELS` where "+
|
|
QString::asprintf("(`TYPE`=%d)&&",RDAirPlayConf::StationPanel)+
|
|
"(`OWNER`='"+RDEscapeString(exemplar)+"')";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `PANELS` set ")+
|
|
QString::asprintf("`PANEL_NO`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`ROW_NO`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`COLUMN_NO`=%d,",q->value(2).toInt())+
|
|
"`LABEL`='"+RDEscapeString(q->value(3).toString())+"',"+
|
|
QString::asprintf("`CART`=%u,",q->value(4).toUInt())+
|
|
"`DEFAULT_COLOR`='"+RDEscapeString(q->value(5).toString())+"',"+
|
|
QString::asprintf("`TYPE`=%d,",RDAirPlayConf::StationPanel)+
|
|
"`OWNER`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
sql=QString("select ")+
|
|
"`PANEL_NO`,"+ // 00
|
|
"`ROW_NO`,"+ // 01
|
|
"`COLUMN_NO`,"+ // 02
|
|
"`LABEL`,"+ // 03
|
|
"`CART`,"+ // 04
|
|
"`DEFAULT_COLOR` "+ // 05
|
|
"from `EXTENDED_PANELS` where "+
|
|
QString::asprintf("(`TYPE`=%d)&&",RDAirPlayConf::StationPanel)+
|
|
"(`OWNER`='"+RDEscapeString(exemplar)+"')";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `EXTENDED_PANELS` set ")+
|
|
QString::asprintf("`PANEL_NO`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`ROW_NO`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`COLUMN_NO`=%d,",q->value(2).toInt())+
|
|
"`LABEL`='"+RDEscapeString(q->value(3).toString())+"',"+
|
|
QString::asprintf("`CART`=%u,",q->value(4).toUInt())+
|
|
"`DEFAULT_COLOR`='"+RDEscapeString(q->value(5).toString())+"',"+
|
|
QString::asprintf("`TYPE`=%d,",RDAirPlayConf::StationPanel)+
|
|
"`OWNER`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
/*
|
|
* FIXME: Reinstate/remove hotkey support!
|
|
*
|
|
//
|
|
// Clone Hotkeys
|
|
//
|
|
sql=QString("select ")+
|
|
"MODULE_NAME,"+ // 00
|
|
"KEY_ID,"+ // 01
|
|
"KEY_VALUE,"+ // 02
|
|
"KEY_LABEL "+ // 03
|
|
"from RDHOTKEYS where "+
|
|
"STATION_NAME=\""+RDEscapeString(exemplar)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into RDHOTKEYS set ")+
|
|
"MODULE_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+
|
|
QString::asprintf("KEY_ID=%d,",q->value(1).toInt())+
|
|
"KEY_VALUE=\""+RDEscapeString(q->value(2).toString())+"\","+ \
|
|
"KEY_LABEL=\""+RDEscapeString(q->value(3).toString())+"\","+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
delete q;
|
|
*/
|
|
//
|
|
// Clone PyPAD Instances
|
|
//
|
|
sql=QString("select ")+
|
|
"`SCRIPT_PATH`,"+ // 00
|
|
"`DESCRIPTION`,"+ // 01
|
|
"`CONFIG` "+ // 02
|
|
"from `PYPAD_INSTANCES` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `PYPAD_INSTANCES` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
"`SCRIPT_PATH`='"+RDEscapeString(q->value(0).toString())+"',"+
|
|
"`DESCRIPTION`='"+RDEscapeString(q->value(1).toString())+"',"+
|
|
"`CONFIG`='"+RDEscapeString(q->value(2).toString())+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone CARTSLOTS
|
|
//
|
|
sql=QString("select ")+
|
|
"`SLOT_NUMBER`,"+ // 00
|
|
"`MODE`,"+ // 01
|
|
"`DEFAULT_MODE`,"+ // 02
|
|
"`STOP_ACTION`,"+ // 03
|
|
"`DEFAULT_STOP_ACTION`,"+ // 04
|
|
"`CART_NUMBER`,"+ // 05
|
|
"`DEFAULT_CART_NUMBER`,"+ // 06
|
|
"`HOOK_MODE`,"+ // 07
|
|
"`DEFAULT_HOOK_MODE`,"+ // 08
|
|
"`SERVICE_NAME`,"+ // 09
|
|
"`CARD`,"+ // 10
|
|
"`INPUT_PORT`,"+ // 11
|
|
"`OUTPUT_PORT` "+ // 12
|
|
"from `CARTSLOTS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `CARTSLOTS` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`SLOT_NUMBER`=%u,",q->value(0).toUInt())+
|
|
QString::asprintf("`MODE`=%d,",q->value(1).toInt())+
|
|
QString::asprintf("`DEFAULT_MODE`=%d,",q->value(2).toInt())+
|
|
QString::asprintf("`STOP_ACTION`=%d,",q->value(3).toInt())+
|
|
QString::asprintf("`DEFAULT_STOP_ACTION`=%d,",q->value(4).toInt())+
|
|
QString::asprintf("`CART_NUMBER`=%d,",q->value(5).toInt())+
|
|
QString::asprintf("`DEFAULT_CART_NUMBER`=%d,",q->value(6).toInt())+
|
|
QString::asprintf("`HOOK_MODE`=%d,",q->value(7).toInt())+
|
|
QString::asprintf("`DEFAULT_HOOK_MODE`=%d,",q->value(8).toInt())+
|
|
"`SERVICE_NAME`='"+RDEscapeString(q->value(9).toString())+"',"+
|
|
QString::asprintf("`CARD`=%d,",q->value(10).toInt())+
|
|
QString::asprintf("`INPUT_PORT`=%d,",q->value(11).toInt())+
|
|
QString::asprintf("`OUTPUT_PORT`=%d",q->value(12).toInt());
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone Livewire Nodes
|
|
//
|
|
sql=QString("select ")+
|
|
"`MATRIX`,"+ // 00
|
|
"`BASE_OUTPUT`,"+ // 01
|
|
"`HOSTNAME`,"+ // 02
|
|
"`PASSWORD`,"+ // 03
|
|
"`TCP_PORT`,"+ // 04
|
|
"`DESCRIPTION` "+ // 05
|
|
"from `SWITCHER_NODES` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `SWITCHER_NODES` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`MATRIX`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`BASE_OUTPUT`=%d,",q->value(1).toInt())+
|
|
"`HOSTNAME`='"+RDEscapeString(q->value(2).toString())+"',"+
|
|
"`PASSWORD`='"+RDEscapeString(q->value(3).toString())+"',"+
|
|
QString::asprintf("`TCP_PORT`=%d,",q->value(4).toInt())+
|
|
"`DESCRIPTION`='"+RDEscapeString(q->value(5).toString())+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone JACK Clients
|
|
//
|
|
sql=QString("select ")+
|
|
"`DESCRIPTION`,"+ // 00
|
|
"`COMMAND_LINE` "+ // 01
|
|
"from `JACK_CLIENTS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `JACK_CLIENTS` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
"`DESCRIPTION`='"+RDEscapeString(q->value(0).toString())+"',"+
|
|
"`COMMAND_LINE`='"+RDEscapeString(q->value(1).toString())+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Log Machine Parameters
|
|
//
|
|
sql=QString("select ")+
|
|
"`MACHINE`,"+ // 00
|
|
"`START_MODE`,"+ // 01
|
|
"`AUTO_RESTART`,"+ // 02
|
|
"`LOG_NAME`,"+ // 03
|
|
"`CURRENT_LOG`,"+ // 04
|
|
"`RUNNING`,"+ // 05
|
|
"`LOG_ID`,"+ // 06
|
|
"`LOG_LINE`,"+ // 07
|
|
"`NOW_CART`,"+ // 08
|
|
"`NEXT_CART` "+ // 09
|
|
"from `LOG_MACHINES` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into `LOG_MACHINES` set ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"',"+
|
|
QString::asprintf("`MACHINE`=%d,",q->value(0).toInt())+
|
|
QString::asprintf("`START_MODE`=%d,",q->value(1).toInt())+
|
|
"`AUTO_RESTART`='"+q->value(2).toString()+"',"+
|
|
"`LOG_NAME`='"+RDEscapeString(q->value(3).toString())+"',"+
|
|
"`CURRENT_LOG`='"+RDEscapeString(q->value(4).toString())+"',"+
|
|
"`RUNNING`='"+q->value(5).toString()+"',"+
|
|
QString::asprintf("`LOG_ID`=%d,",q->value(6).toInt())+
|
|
QString::asprintf("`LOG_LINE`=%d,",q->value(7).toInt())+
|
|
QString::asprintf("`NOW_CART`=%u,",q->value(8).toUInt())+
|
|
QString::asprintf("`NEXT_CART`=%u",q->value(9).toUInt());
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone Audio Cards
|
|
//
|
|
sql=QString("select ")+
|
|
"`CARD_NUMBER`,"+ // 00
|
|
"`CLOCK_SOURCE` "+ // 01
|
|
"from `AUDIO_CARDS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("update `AUDIO_CARDS` set ")+
|
|
QString::asprintf("`CLOCK_SOURCE`=%d where ",q->value(1).toInt())+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"' && "+
|
|
QString::asprintf("`CARD_NUMBER`=%d",q->value(0).toInt());
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone Audio Inputs
|
|
//
|
|
sql=QString("select ")+
|
|
"`CARD_NUMBER`,"+ // 00
|
|
"`PORT_NUMBER`,"+ // 01
|
|
"`LEVEL`,"+ // 02
|
|
"`TYPE`,"+ // 03
|
|
"`MODE` "+ // 04
|
|
"from `AUDIO_INPUTS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("update `AUDIO_INPUTS` set ")+
|
|
QString::asprintf("`LEVEL`=%d,",q->value(2).toInt())+
|
|
QString::asprintf("`TYPE`=%d,",q->value(3).toInt())+
|
|
QString::asprintf("`MODE`=%d where ",q->value(4).toInt())+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"' && "+
|
|
QString::asprintf("`CARD_NUMBER`=%d && ",q->value(0).toInt())+
|
|
QString::asprintf("`PORT_NUMBER`=%d",q->value(1).toInt());
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone Audio Outputs
|
|
//
|
|
sql=QString("select ")+
|
|
"`CARD_NUMBER`,"+ // 00
|
|
"`PORT_NUMBER`,"+ // 01
|
|
"`LEVEL` "+ // 02
|
|
"from `AUDIO_OUTPUTS` where "+
|
|
"`STATION_NAME`='"+RDEscapeString(exemplar)+"'";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("update `AUDIO_OUTPUTS` set ")+
|
|
QString::asprintf("`LEVEL`=%d where ",q->value(2).toInt())+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"' && "+
|
|
QString::asprintf("`CARD_NUMBER`=%d && ",q->value(0).toInt())+
|
|
QString::asprintf("`PORT_NUMBER`=%d",q->value(1).toInt());
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
void RDStation::remove(const QString &name)
|
|
{
|
|
QString sql;
|
|
|
|
sql=QString("delete from `DECKS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `DECK_EVENTS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `TTYS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `RECORDINGS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `SERVICE_PERMS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `RDAIRPLAY` where ")+
|
|
"`STATION`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `RDAIRPLAY_CHANNELS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `RDPANEL` where ")+
|
|
"`STATION`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `RDPANEL_CHANNELS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `RDLOGEDIT` where ")+
|
|
"`STATION`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `MATRICES` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `INPUTS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `OUTPUTS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `VGUEST_RESOURCES` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `RDLIBRARY` where ")+
|
|
"`STATION`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `GPIS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `HOSTVARS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `STATIONS` where ")+
|
|
"NAME='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `REPORT_STATIONS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `PANELS` where ")+
|
|
QString::asprintf("(`TYPE`=%d && ",RDAirPlayConf::StationPanel)+
|
|
"`OWNER`='"+RDEscapeString(name)+"')";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `EXTENDED_PANELS` where ")+
|
|
QString::asprintf("(`TYPE`=%d && ",RDAirPlayConf::StationPanel)+
|
|
"`OWNER`='"+RDEscapeString(name)+"')";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString::asprintf("delete from `RDHOTKEYS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `LOG_MODES` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `PYPAD_INSTANCES` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `CARTSLOTS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `SWITCHER_NODES` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `JACK_CLIENTS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `LOG_MACHINES` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `AUDIO_CARDS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `AUDIO_INPUTS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
|
|
sql=QString("delete from `AUDIO_OUTPUTS` where ")+
|
|
"`STATION_NAME`='"+RDEscapeString(name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
|
|
|
|
QString RDStation::audioDriverText(RDStation::AudioDriver dvr)
|
|
{
|
|
QString ret=QObject::tr("Unknown");
|
|
switch(dvr) {
|
|
case RDStation::None:
|
|
ret=QObject::tr("None");
|
|
break;
|
|
|
|
case RDStation::Hpi:
|
|
ret=QObject::tr("AudioScience HPI");
|
|
break;
|
|
|
|
case RDStation::Jack:
|
|
ret=QObject::tr("JACK Audio Connection Kit");
|
|
break;
|
|
|
|
case RDStation::Alsa:
|
|
ret=QObject::tr("Advance Linux Sound Architecture (ALSA)");
|
|
break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
|
|
void RDStation::SetRow(const QString ¶m,const QString &value) const
|
|
{
|
|
QString sql;
|
|
|
|
sql=QString("update `STATIONS` set `")+
|
|
param+"`='"+RDEscapeString(value)+"' where "+
|
|
"`NAME`='"+RDEscapeString(station_name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
|
|
|
|
void RDStation::SetRow(const QString ¶m,int value) const
|
|
{
|
|
QString sql;
|
|
|
|
sql=QString::asprintf("update `STATIONS` set `")+
|
|
param+QString::asprintf("`=%d where ",value)+
|
|
"`NAME`='"+RDEscapeString(station_name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
|
|
|
|
void RDStation::SetRow(const QString ¶m,unsigned value) const
|
|
{
|
|
QString sql;
|
|
|
|
sql=QString("update `STATIONS` set `")+
|
|
param+QString::asprintf("`=%u where ",value)+
|
|
"`NAME`='"+RDEscapeString(station_name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
|
|
|
|
void RDStation::SetRow(const QString ¶m,bool value) const
|
|
{
|
|
QString sql;
|
|
|
|
sql=QString("update `STATIONS` set `")+
|
|
param+"`='"+RDYesNo(value)+"' where "+
|
|
"`NAME`='"+RDEscapeString(station_name)+"'";
|
|
RDSqlQuery::apply(sql);
|
|
}
|