mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-04-07 01:13:50 +02:00
* Fixed compiler warnings in 'lib/rdsettings.cpp' and 'lib/rdstation.cpp'. Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
2094 lines
61 KiB
C++
2094 lines
61 KiB
C++
// rdstation.cpp
|
|
//
|
|
// Abstract a Rivendell Workstation.
|
|
//
|
|
// (C) Copyright 2002-2020 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 <qobject.h>
|
|
|
|
#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::editorPath() const
|
|
{
|
|
return RDGetSqlValue("STATIONS","NAME",station_name,"EDITOR_PATH").
|
|
toString();
|
|
}
|
|
|
|
|
|
void RDStation::setEditorPath(const QString &cmd)
|
|
{
|
|
SetRow("EDITOR_PATH",cmd);
|
|
}
|
|
|
|
|
|
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().sprintf("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().sprintf("DRIVER=%d where ",driver)+
|
|
"STATION_NAME=\""+RDEscapeString(station_name)+"\" && "+
|
|
QString().sprintf("CARD_NUMBER=%d",cardnum);
|
|
RDSqlQuery *q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
|
|
|
|
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().sprintf("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().sprintf("CARD_NUMBER=%d",cardnum);
|
|
RDSqlQuery *q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
|
|
|
|
int RDStation::cardInputs(int cardnum) const
|
|
{
|
|
int ret=-1;
|
|
QString sql=QString("select INPUTS from AUDIO_CARDS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(station_name)+"\" && "+
|
|
QString().sprintf("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().sprintf("INPUTS=%d where ",inputs)+
|
|
"STATION_NAME=\""+RDEscapeString(station_name)+"\" && "+
|
|
QString().sprintf("CARD_NUMBER=%d",cardnum);
|
|
RDSqlQuery *q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
|
|
|
|
int RDStation::cardOutputs(int cardnum) const
|
|
{
|
|
int ret=-1;
|
|
QString sql=QString("select OUTPUTS from AUDIO_CARDS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(station_name)+"\" && "+
|
|
QString().sprintf("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().sprintf("OUTPUTS=%d where ",outputs)+
|
|
"STATION_NAME=\""+RDEscapeString(station_name)+"\" && "+
|
|
QString().sprintf("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().sprintf("CARD_NUMBER=%d",i);
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
|
|
//
|
|
// 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().sprintf("CARD_NUMBER=%d,",i)+
|
|
QString().sprintf("PORT_NUMBER=%d",j);
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
|
|
sql=QString("insert into AUDIO_OUTPUTS set ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\","+
|
|
QString().sprintf("CARD_NUMBER=%d,",i)+
|
|
QString().sprintf("PORT_NUMBER=%d",j);
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
}
|
|
|
|
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().sprintf("INSTANCE=%u",i);
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
|
|
sql=QString("insert into RDPANEL_CHANNELS set ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\","+
|
|
QString().sprintf("INSTANCE=%u",i);
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
for(int i=0;i<RD_RDVAIRPLAY_LOG_QUAN;i++) {
|
|
sql=QString("insert into RDAIRPLAY_CHANNELS set ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\","+
|
|
QString().sprintf("INSTANCE=%u",i+RD_RDVAIRPLAY_LOG_BASE);
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
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().sprintf("CHANNEL=%u,",j+129)+
|
|
QString().sprintf("NUMBER=%u",i+1);
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
}
|
|
|
|
//
|
|
// RDAirPlay Log Modes
|
|
//
|
|
for(int i=0;i<RDAIRPLAY_LOG_QUANTITY;i++) {
|
|
sql=QString().sprintf("insert into LOG_MODES set ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\","+
|
|
QString().sprintf("MACHINE=%d",i);
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
for(int i=0;i<RD_RDVAIRPLAY_LOG_QUAN;i++) {
|
|
sql=QString().sprintf("insert into LOG_MODES set ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\","+
|
|
QString().sprintf("MACHINE=%d",i+RD_RDVAIRPLAY_LOG_BASE);
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
|
|
//
|
|
// Log Machine Parameters
|
|
//
|
|
for(int i=0;i<3;i++) {
|
|
sql=QString("insert into LOG_MACHINES set ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\","+
|
|
QString().sprintf("MACHINE=%d",i);
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
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().sprintf("MACHINE=%d",i);
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
}
|
|
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
|
|
"EDITOR_PATH,"+ // 06
|
|
"FILTER_MODE,"+ // 07
|
|
"SYSTEM_MAINT,"+ // 08
|
|
"HTTP_STATION,"+ // 09
|
|
"CAE_STATION,"+ // 10
|
|
"START_JACK,"+ // 11
|
|
"JACK_SERVER_NAME,"+ // 12
|
|
"JACK_COMMAND_LINE,"+ // 13
|
|
"JACK_PORTS,"+ // 14
|
|
"CUE_CARD,"+ // 15
|
|
"CUE_PORT,"+ // 16
|
|
"CUE_START_CART,"+ // 17
|
|
"CUE_STOP_CART,"+ // 18
|
|
"CARTSLOT_COLUMNS,"+ // 19
|
|
"CARTSLOT_ROWS,"+ // 20
|
|
"ENABLE_DRAGDROP,"+ // 21
|
|
"ENFORCE_PANEL_SETUP,"+ // 22
|
|
"REPORT_EDITOR_PATH,"+ // 23
|
|
"BROWSER_PATH "+ // 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().sprintf("STARTUP_CART=%u,",q->value(1).toUInt())+
|
|
QString().sprintf("TIME_OFFSET=%d,",q->value(2).toInt())+
|
|
QString().sprintf("BROADCAST_SECURITY=%u,",q->value(3).toUInt())+
|
|
QString().sprintf("HEARTBEAT_CART=%u,",q->value(4).toUInt())+
|
|
QString().sprintf("HEARTBEAT_INTERVAL=%u,",q->value(5).toUInt())+
|
|
"EDITOR_PATH=\""+RDEscapeString(q->value(6).toString())+"\","+
|
|
QString().sprintf("FILTER_MODE=%d,",q->value(7).toInt())+
|
|
"SYSTEM_MAINT=\""+RDEscapeString(q->value(8).toString())+"\","+
|
|
"HTTP_STATION=\""+RDEscapeString(q->value(9).toString())+"\","+
|
|
"CAE_STATION=\""+RDEscapeString(q->value(10).toString())+"\","+
|
|
"START_JACK=\""+RDEscapeString(q->value(11).toString())+"\","+
|
|
"JACK_SERVER_NAME=\""+RDEscapeString(q->value(12).toString())+"\","+
|
|
"JACK_COMMAND_LINE=\""+RDEscapeString(q->value(13).toString())+"\","+
|
|
QString().sprintf("JACK_PORTS=%d,",q->value(14).toInt())+
|
|
QString().sprintf("CUE_CARD=%d,",q->value(15).toInt())+
|
|
QString().sprintf("CUE_PORT=%d,",q->value(16).toInt())+
|
|
QString().sprintf("CUE_START_CART=%u,",q->value(17).toInt())+
|
|
QString().sprintf("CUE_STOP_CART=%u,",q->value(18).toInt())+
|
|
QString().sprintf("CARTSLOT_COLUMNS=%d,",q->value(19).toInt())+
|
|
QString().sprintf("CARTSLOT_ROWS=%d,",q->value(20).toInt())+
|
|
"ENABLE_DRAGDROP=\""+RDEscapeString(q->value(21).toString())+"\","+
|
|
"ENFORCE_PANEL_SETUP=\""+RDEscapeString(q->value(22).toString())+"\","+
|
|
"REPORT_EDITOR_PATH=\""+RDEscapeString(q->value(23).toString())+"\","+
|
|
"BROWSER_PATH=\""+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())+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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
|
|
"from RDLIBRARY where "+
|
|
"STATION=\""+RDEscapeString(exemplar)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
if(q->first()) {
|
|
sql=QString("insert into RDLIBRARY set ")+
|
|
QString().sprintf("INPUT_CARD=%d,",q->value(0).toInt())+
|
|
QString().sprintf("INPUT_PORT=%d,",q->value(1).toInt())+
|
|
QString().sprintf("INPUT_TYPE=%d,",q->value(2).toInt())+
|
|
QString().sprintf("OUTPUT_CARD=%d,",q->value(3).toInt())+
|
|
QString().sprintf("OUTPUT_PORT=%d,",q->value(4).toInt())+
|
|
QString().sprintf("VOX_THRESHOLD=%d,",q->value(5).toInt())+
|
|
QString().sprintf("TRIM_THRESHOLD=%d,",q->value(6).toInt())+
|
|
QString().sprintf("DEFAULT_FORMAT=%u,",q->value(7).toUInt())+
|
|
QString().sprintf("DEFAULT_CHANNELS=%u,",q->value(8).toUInt())+
|
|
QString().sprintf("DEFAULT_LAYER=%u,",q->value(9).toUInt())+
|
|
QString().sprintf("DEFAULT_BITRATE=%u,",q->value(10).toUInt())+
|
|
QString().sprintf("DEFAULT_RECORD_MODE=%u,",q->value(11).toUInt())+
|
|
"DEFAULT_TRIM_STATE=\""+RDEscapeString(q->value(12).toString())+"\","+
|
|
QString().sprintf("MAXLENGTH=%d,",q->value(13).toInt())+
|
|
QString().sprintf("TAIL_PREROLL=%u,",q->value(14).toUInt())+
|
|
"RIPPER_DEVICE=\""+RDEscapeString(q->value(15).toString())+"\","+
|
|
QString().sprintf("PARANOIA_LEVEL=%d,",q->value(16).toInt())+
|
|
QString().sprintf("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().sprintf("SRC_CONVERTER=%d,",q->value(21).toInt())+
|
|
QString().sprintf("LIMIT_SEARCH=%d,",q->value(22).toInt())+
|
|
"SEARCH_LIMITED=\""+RDEscapeString(q->value(23).toString())+"\","+
|
|
"STATION=\""+RDEscapeString(name)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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
|
|
"from RDLOGEDIT where "+
|
|
"STATION=\""+RDEscapeString(exemplar)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
if(q->first()) {
|
|
sql=QString("insert into RDLOGEDIT set ")+
|
|
QString().sprintf("INPUT_CARD=%d,",q->value(0).toInt())+
|
|
QString().sprintf("INPUT_PORT=%d,",q->value(1).toInt())+
|
|
QString().sprintf("OUTPUT_CARD=%d,",q->value(2).toInt())+
|
|
QString().sprintf("OUTPUT_PORT=%d,",q->value(3).toInt())+
|
|
QString().sprintf("FORMAT=%u,",q->value(4).toUInt())+
|
|
QString().sprintf("DEFAULT_CHANNELS=%u,",q->value(5).toUInt())+
|
|
QString().sprintf("LAYER=%u,",q->value(6).toUInt())+
|
|
QString().sprintf("BITRATE=%u,",q->value(7).toUInt())+
|
|
QString().sprintf("MAXLENGTH=%d,",q->value(8).toInt())+
|
|
QString().sprintf("TAIL_PREROLL=%u,",q->value(9).toUInt())+
|
|
"STATION=\""+RDEscapeString(name)+"\","+
|
|
QString().sprintf("START_CART=%u,",q->value(10).toUInt())+
|
|
QString().sprintf("END_CART=%u,",q->value(11).toUInt())+
|
|
QString().sprintf("REC_START_CART=%u,",q->value(12).toUInt())+
|
|
QString().sprintf("REC_END_CART=%u,",q->value(13).toUInt())+
|
|
QString().sprintf("TRIM_THRESHOLD=%d,",q->value(14).toInt())+
|
|
QString().sprintf("RIPPER_LEVEL=%d,",q->value(15).toInt())+
|
|
QString().sprintf("DEFAULT_TRANS_TYPE=%d,",q->value(16).toInt())+
|
|
"ENABLE_SECOND_START=\""+RDEscapeString(q->value(17).toString())+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("CHANNEL=%u,",q->value(0).toUInt())+
|
|
QString().sprintf("CARD_NUMBER=%d,",q->value(1).toInt())+
|
|
QString().sprintf("PORT_NUMBER=%d,",q->value(2).toInt())+
|
|
QString().sprintf("MON_PORT_NUMBER=%d,",q->value(3).toInt())+
|
|
"DEFAULT_MONITOR_ON=\""+RDEscapeString(q->value(4).toString())+"\","+
|
|
"PORT_TYPE=\""+RDEscapeString(q->value(5).toString())+"\","+
|
|
QString().sprintf("DEFAULT_FORMAT=%d,",q->value(6).toInt())+
|
|
QString().sprintf("DEFAULT_CHANNELS=%d,",q->value(7).toInt())+
|
|
QString().sprintf("DEFAULT_BITRATE=%d,",q->value(8).toInt())+
|
|
QString().sprintf("DEFAULT_THRESHOLD=%d,",q->value(9).toInt())+
|
|
"SWITCH_STATION=\""+RDEscapeString(q->value(10).toString())+"\","+
|
|
QString().sprintf("SWITCH_MATRIX=%d,",q->value(11).toInt())+
|
|
QString().sprintf("SWITCH_OUTPUT=%d,",q->value(12).toInt())+
|
|
QString().sprintf("SWITCH_DELAY=%d,",q->value(13).toInt())+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("CHANNEL=%u,",q->value(0).toUInt())+
|
|
QString().sprintf("NUMBER=%d,",q->value(1).toInt())+
|
|
QString().sprintf("CART_NUMBER=%u",q->value(2).toUInt());
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("SEGUE_LENGTH=%d,",q->value(0).toInt())+
|
|
QString().sprintf("TRANS_LENGTH=%d,",q->value(1).toInt())+
|
|
QString().sprintf("LOG_MODE_STYLE=%d,",q->value(2).toInt())+
|
|
QString().sprintf("PIE_COUNT_LENGTH=%d,",q->value(3).toInt())+
|
|
QString().sprintf("PIE_COUNT_ENDPOINT=%d,",q->value(4).toInt())+
|
|
"CHECK_TIMESYNC=\""+RDEscapeString(q->value(5).toString())+"\","+
|
|
QString().sprintf("STATION_PANELS=%d,",q->value(6).toInt())+
|
|
QString().sprintf("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().sprintf("DEFAULT_TRANS_TYPE=%u,",q->value(11).toUInt())+
|
|
QString().sprintf("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)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("INSTANCE=%u,",q->value(0).toUInt())+
|
|
QString().sprintf("CARD=%d,",q->value(1).toInt())+
|
|
QString().sprintf("PORT=%d,",q->value(2).toInt())+
|
|
"START_RML=\""+RDEscapeString(q->value(3).toString())+"\","+
|
|
"STOP_RML=\""+RDEscapeString(q->value(4).toString())+"\","+
|
|
QString().sprintf("START_GPI_MATRIX=%d,",q->value(5).toInt())+
|
|
QString().sprintf("START_GPI_LINE=%d,",q->value(6).toInt())+
|
|
QString().sprintf("START_GPO_MATRIX=%d,",q->value(7).toInt())+
|
|
QString().sprintf("START_GPO_LINE=%d,",q->value(8).toInt())+
|
|
QString().sprintf("STOP_GPI_MATRIX=%d,",q->value(9).toInt())+
|
|
QString().sprintf("STOP_GPI_LINE=%d,",q->value(10).toInt())+
|
|
QString().sprintf("STOP_GPO_MATRIX=%d,",q->value(11).toInt())+
|
|
QString().sprintf("STOP_GPO_LINE=%d",q->value(12).toInt());
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("insert into LOG_MODES set ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\","+
|
|
QString().sprintf("MACHINE=%d,",q->value(0).toInt())+
|
|
QString().sprintf("START_MODE=%d,",q->value(1).toInt())+
|
|
QString().sprintf("OP_MODE=%d",q->value(2).toInt());
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("STATION_PANELS=%d,",q->value(0).toInt())+
|
|
QString().sprintf("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)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("INSTANCE=%u,",q->value(0).toUInt())+
|
|
QString().sprintf("CARD=%d,",q->value(1).toInt())+
|
|
QString().sprintf("PORT=%d,",q->value(2).toInt())+
|
|
"START_RML=\""+RDEscapeString(q->value(3).toString())+"\","+
|
|
"STOP_RML=\""+RDEscapeString(q->value(4).toString())+"\","+
|
|
QString().sprintf("GPIO_TYPE=%d,",q->value(5).toInt())+
|
|
QString().sprintf("START_GPI_MATRIX=%d,",q->value(6).toInt())+
|
|
QString().sprintf("START_GPI_LINE=%d,",q->value(7).toInt())+
|
|
QString().sprintf("START_GPO_MATRIX=%d,",q->value(8).toInt())+
|
|
QString().sprintf("START_GPO_LINE=%d,",q->value(9).toInt())+
|
|
QString().sprintf("STOP_GPI_MATRIX=%d,",q->value(10).toInt())+
|
|
QString().sprintf("STOP_GPI_LINE=%d,",q->value(11).toInt())+
|
|
QString().sprintf("STOP_GPO_MATRIX=%d,",q->value(12).toInt())+
|
|
QString().sprintf("STOP_GPO_LINE=%d",q->value(13).toInt());
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("PORT_ID=%u,",q->value(0).toUInt())+
|
|
"ACTIVE=\""+RDEscapeString(q->value(1).toString())+"\","+
|
|
"PORT=\""+RDEscapeString(q->value(2).toString())+"\","+
|
|
QString().sprintf("BAUD_RATE=%d,",q->value(3).toInt())+
|
|
QString().sprintf("DATA_BITS=%d,",q->value(4).toInt())+
|
|
QString().sprintf("STOP_BITS=%d,",q->value(5).toInt())+
|
|
QString().sprintf("PARITY=%d,",q->value(6).toInt())+
|
|
QString().sprintf("TERMINATION=%d,",q->value(7).toInt())+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("MATRIX=%d,",q->value(1).toInt())+
|
|
QString().sprintf("TYPE=%d,",q->value(2).toInt())+
|
|
QString().sprintf("LAYER=%d,",q->value(3).toInt())+
|
|
QString().sprintf("PORT_TYPE=%d,",q->value(4).toInt())+
|
|
QString().sprintf("PORT_TYPE_2=%d,",q->value(5).toInt())+
|
|
QString().sprintf("CARD=%d,",q->value(6).toInt())+
|
|
QString().sprintf("PORT=%d,",q->value(7).toInt())+
|
|
QString().sprintf("PORT_2=%d,",q->value(8).toInt())+
|
|
"IP_ADDRESS=\""+RDEscapeString(q->value(9).toString())+"\","+
|
|
"IP_ADDRESS_2=\""+RDEscapeString(q->value(10).toString())+"\","+
|
|
QString().sprintf("IP_PORT=%d,",q->value(11).toInt())+
|
|
QString().sprintf("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().sprintf("INPUTS=%d,",q->value(22).toInt())+
|
|
QString().sprintf("OUTPUTS=%d,",q->value(23).toInt())+
|
|
QString().sprintf("GPIS=%d,",q->value(24).toInt())+
|
|
QString().sprintf("GPOS=%d,",q->value(25).toInt())+
|
|
QString().sprintf("FADERS=%d,",q->value(26).toInt())+
|
|
QString().sprintf("DISPLAYS=%d ",q->value(27).toInt());
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("MATRIX=%d,",q->value(0).toInt())+
|
|
QString().sprintf("NUMBER=%d,",q->value(1).toInt())+
|
|
"NAME=\""+RDEscapeString(q->value(2).toString())+"\","+
|
|
"FEED_NAME=\""+RDEscapeString(q->value(3).toString())+"\","+
|
|
QString().sprintf("CHANNEL_MODE=%d,",q->value(4).toInt())+
|
|
QString().sprintf("ENGINE_NUM=%d,",q->value(5).toInt())+
|
|
QString().sprintf("DEVICE_NUM=%d,",q->value(6).toInt())+
|
|
"NODE_HOSTNAME=\""+RDEscapeString(q->value(7).toString())+"\","+
|
|
QString().sprintf("NODE_TCP_PORT=%d,",q->value(8).toInt())+
|
|
QString().sprintf("NODE_SLOT=%d,",q->value(9).toInt())+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("MATRIX=%d,",q->value(0).toInt())+
|
|
QString().sprintf("NUMBER=%d,",q->value(1).toInt())+
|
|
"NAME=\""+RDEscapeString(q->value(2).toString())+"\","+
|
|
QString().sprintf("ENGINE_NUM=%d,",q->value(3).toInt())+
|
|
QString().sprintf("DEVICE_NUM=%d,",q->value(4).toInt())+
|
|
"NODE_HOSTNAME=\""+RDEscapeString(q->value(5).toString())+"\","+
|
|
QString().sprintf("NODE_TCP_PORT=%d,",q->value(6).toInt())+
|
|
QString().sprintf("NODE_SLOT=%d,",q->value(7).toInt())+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("MATRIX=%d,",q->value(0).toInt())+
|
|
QString().sprintf("NUMBER=%d,",q->value(1).toInt())+
|
|
QString().sprintf("MACRO_CART=%d,",q->value(2).toInt())+
|
|
QString().sprintf("OFF_MACRO_CART=%d,",q->value(3).toInt())+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("MATRIX=%d,",q->value(0).toInt())+
|
|
QString().sprintf("NUMBER=%d,",q->value(1).toInt())+
|
|
QString().sprintf("MACRO_CART=%d,",q->value(2).toInt())+
|
|
QString().sprintf("OFF_MACRO_CART=%d,",q->value(3).toInt())+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("MATRIX_NUM=%d,",q->value(0).toInt())+
|
|
QString().sprintf("VGUEST_TYPE=%d,",q->value(1).toInt())+
|
|
QString().sprintf("NUMBER=%d,",q->value(2).toInt())+
|
|
QString().sprintf("ENGINE_NUM=%d,",q->value(3).toInt())+
|
|
QString().sprintf("DEVICE_NUM=%d,",q->value(4).toInt())+
|
|
QString().sprintf("SURFACE_NUM=%d,",q->value(5).toInt())+
|
|
QString().sprintf("RELAY_NUM=%d,",q->value(6).toInt())+
|
|
QString().sprintf("BUSS_NUM=%d,",q->value(7).toInt())+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone System Panels
|
|
//
|
|
sql=QString("select ")+
|
|
"PANEL_NO,"+
|
|
"ROW_NO,"+
|
|
"COLUMN_NO,"+
|
|
"LABEL,"+
|
|
"CART,"+
|
|
"DEFAULT_COLOR "+
|
|
"from PANELS where "+
|
|
QString().sprintf("(TYPE=%d)&&",RDAirPlayConf::StationPanel)+
|
|
"(OWNER=\""+RDEscapeString(exemplar)+"\")";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into PANELS set ")+
|
|
QString().sprintf("PANEL_NO=%d,",q->value(0).toInt())+
|
|
QString().sprintf("ROW_NO=%d,",q->value(1).toInt())+
|
|
QString().sprintf("COLUMN_NO=%d,",q->value(2).toInt())+
|
|
"LABEL=\""+RDEscapeString(q->value(3).toString())+"\","+
|
|
QString().sprintf("CART=%u,",q->value(4).toUInt())+
|
|
"DEFAULT_COLOR=\""+RDEscapeString(q->value(5).toString())+"\","+
|
|
QString().sprintf("TYPE=%d,",RDAirPlayConf::StationPanel)+
|
|
"OWNER=\""+RDEscapeString(name)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("(TYPE=%d)&&",RDAirPlayConf::StationPanel)+
|
|
"(OWNER=\""+RDEscapeString(exemplar)+"\")";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("insert into EXTENDED_PANELS set ")+
|
|
QString().sprintf("PANEL_NO=%d,",q->value(0).toInt())+
|
|
QString().sprintf("ROW_NO=%d,",q->value(1).toInt())+
|
|
QString().sprintf("COLUMN_NO=%d,",q->value(2).toInt())+
|
|
"LABEL=\""+RDEscapeString(q->value(3).toString())+"\","+
|
|
QString().sprintf("CART=%u,",q->value(4).toUInt())+
|
|
"DEFAULT_COLOR=\""+RDEscapeString(q->value(5).toString())+"\","+
|
|
QString().sprintf("TYPE=%d,",RDAirPlayConf::StationPanel)+
|
|
"OWNER=\""+RDEscapeString(name)+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// 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().sprintf("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())+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("SLOT_NUMBER=%u,",q->value(0).toUInt())+
|
|
QString().sprintf("MODE=%d,",q->value(1).toInt())+
|
|
QString().sprintf("DEFAULT_MODE=%d,",q->value(2).toInt())+
|
|
QString().sprintf("STOP_ACTION=%d,",q->value(3).toInt())+
|
|
QString().sprintf("DEFAULT_STOP_ACTION=%d,",q->value(4).toInt())+
|
|
QString().sprintf("CART_NUMBER=%d,",q->value(5).toInt())+
|
|
QString().sprintf("DEFAULT_CART_NUMBER=%d,",q->value(6).toInt())+
|
|
QString().sprintf("HOOK_MODE=%d,",q->value(7).toInt())+
|
|
QString().sprintf("DEFAULT_HOOK_MODE=%d,",q->value(8).toInt())+
|
|
"SERVICE_NAME=\""+RDEscapeString(q->value(9).toString())+"\","+
|
|
QString().sprintf("CARD=%d,",q->value(10).toInt())+
|
|
QString().sprintf("INPUT_PORT=%d,",q->value(11).toInt())+
|
|
QString().sprintf("OUTPUT_PORT=%d",q->value(12).toInt());
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("MATRIX=%d,",q->value(0).toInt())+
|
|
QString().sprintf("BASE_OUTPUT=%d,",q->value(1).toInt())+
|
|
"HOSTNAME=\""+RDEscapeString(q->value(2).toString())+"\","+
|
|
"PASSWORD=\""+RDEscapeString(q->value(3).toString())+"\","+
|
|
QString().sprintf("TCP_PORT=%d,",q->value(4).toInt())+
|
|
"DESCRIPTION=\""+RDEscapeString(q->value(5).toString())+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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())+"\"";
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("MACHINE=%d,",q->value(0).toInt())+
|
|
QString().sprintf("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().sprintf("LOG_ID=%d,",q->value(6).toInt())+
|
|
QString().sprintf("LOG_LINE=%d,",q->value(7).toInt())+
|
|
QString().sprintf("NOW_CART=%u,",q->value(8).toUInt())+
|
|
QString().sprintf("NEXT_CART=%u",q->value(9).toUInt());
|
|
RDSqlQuery::apply(sql);
|
|
}
|
|
delete q;
|
|
|
|
//
|
|
// Clone Audio Cards
|
|
//
|
|
sql=QString("select CARD_NUMBER,CLOCK_SOURCE from AUDIO_CARDS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(exemplar)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
while(q->next()) {
|
|
sql=QString("update AUDIO_CARDS set ")+
|
|
QString().sprintf("CLOCK_SOURCE=%d where ",q->value(1).toInt())+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\" && "+
|
|
QString().sprintf("CARD_NUMBER=%d",q->value(0).toInt());
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("LEVEL=%d,",q->value(2).toInt())+
|
|
QString().sprintf("TYPE=%d,",q->value(3).toInt())+
|
|
QString().sprintf("MODE=%d where ",q->value(4).toInt())+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\" && "+
|
|
QString().sprintf("CARD_NUMBER=%d && ",q->value(0).toInt())+
|
|
QString().sprintf("PORT_NUMBER=%d",q->value(1).toInt());
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
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().sprintf("LEVEL=%d where ",q->value(2).toInt())+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\" && "+
|
|
QString().sprintf("CARD_NUMBER=%d && ",q->value(0).toInt())+
|
|
QString().sprintf("PORT_NUMBER=%d",q->value(1).toInt());
|
|
q1=new RDSqlQuery(sql);
|
|
delete q1;
|
|
}
|
|
delete q;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
void RDStation::remove(const QString &name)
|
|
{
|
|
QString sql;
|
|
RDSqlQuery *q;
|
|
|
|
sql=QString("delete from DECKS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from DECK_EVENTS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from TTYS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
|
|
sql=QString("delete from RECORDINGS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from SERVICE_PERMS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from RDAIRPLAY where ")+
|
|
"STATION=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from RDAIRPLAY_CHANNELS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from RDPANEL where ")+
|
|
"STATION=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from RDPANEL_CHANNELS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from RDLOGEDIT where ")+
|
|
"STATION=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from MATRICES where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from INPUTS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from OUTPUTS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from VGUEST_RESOURCES where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from RDLIBRARY where ")+
|
|
"STATION=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from GPIS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from HOSTVARS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from STATIONS where ")+
|
|
"NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=
|
|
QString("delete from REPORT_STATIONS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from PANELS where ")+
|
|
QString().sprintf("(TYPE=%d && ",RDAirPlayConf::StationPanel)+
|
|
"OWNER=\""+RDEscapeString(name)+"\")";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from EXTENDED_PANELS where ")+
|
|
QString().sprintf("(TYPE=%d && ",RDAirPlayConf::StationPanel)+
|
|
"OWNER=\""+RDEscapeString(name)+"\")";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString().sprintf("delete from RDHOTKEYS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
sql=QString("delete from LOG_MODES where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
|
|
sql=QString("delete from PYPAD_INSTANCES where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
|
|
sql=QString("delete from CARTSLOTS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
|
|
sql=QString("delete from SWITCHER_NODES where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
|
|
sql=QString("delete from JACK_CLIENTS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
|
|
sql=QString("delete from LOG_MACHINES where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
|
|
sql=QString("delete from AUDIO_CARDS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
|
|
sql=QString("delete from AUDIO_INPUTS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
|
|
sql=QString("delete from AUDIO_OUTPUTS where ")+
|
|
"STATION_NAME=\""+RDEscapeString(name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
|
|
|
|
void RDStation::SetRow(const QString ¶m,const QString &value) const
|
|
{
|
|
RDSqlQuery *q;
|
|
QString sql;
|
|
|
|
sql=QString("update STATIONS set ")+
|
|
param+"=\""+RDEscapeString(value)+"\" where "+
|
|
"NAME=\""+RDEscapeString(station_name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
|
|
|
|
void RDStation::SetRow(const QString ¶m,int value) const
|
|
{
|
|
RDSqlQuery *q;
|
|
QString sql;
|
|
|
|
sql=QString().sprintf("update STATIONS set ")+
|
|
param+QString().sprintf("=%d where ",value)+
|
|
"NAME=\""+RDEscapeString(station_name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
|
|
|
|
void RDStation::SetRow(const QString ¶m,unsigned value) const
|
|
{
|
|
RDSqlQuery *q;
|
|
QString sql;
|
|
|
|
sql=QString("update STATIONS set ")+
|
|
param+QString().sprintf("=%u where ",value)+
|
|
"NAME=\""+RDEscapeString(station_name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|
|
|
|
|
|
void RDStation::SetRow(const QString ¶m,bool value) const
|
|
{
|
|
RDSqlQuery *q;
|
|
QString sql;
|
|
|
|
sql=QString("update STATIONS set ")+
|
|
param+"=\""+RDYesNo(value)+"\" where "+
|
|
"NAME=\""+RDEscapeString(station_name)+"\"";
|
|
q=new RDSqlQuery(sql);
|
|
delete q;
|
|
}
|