diff --git a/ChangeLog b/ChangeLog index 4ed8d8e4..70e8d2a7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16068,3 +16068,17 @@ * Fixed bugs that broke the build under Windows. 2017-09-21 Fred Gleason * Incremented the package version to 2.16.0int09. +2017-09-30 Fred Gleason + * Added a [Provisioning] section to rd.conf(5). + * Moved code to create new hosts to the 'RDStation::create()' method. + * Moved code to delete hosts to the 'RDStation::remove()' method. + * Implemented 'CreateHost=' and 'NewHostTemplate=' parameters + in the [Provisioning] section of rd.conf(5). +2017-09-30 Fred Gleason + * Added static 'RDSvc::create()' and 'RDSvc::remove()' methods. + * Implemented 'CreateService=' and 'NewServiceTemplate=' parameters + in the [Provisioning] section of rd.conf(5). +2017-10-02 Fred Gleason + * Added an '%s' datetime wildcard for Service Name. +2017-10-03 Fred Gleason + * Implemented the '%s' wildcard in the report file path. diff --git a/cae/cae.cpp b/cae/cae.cpp index db6f7f36..5066e215 100644 --- a/cae/cae.cpp +++ b/cae/cae.cpp @@ -42,8 +42,11 @@ #include #include #include +#include +#include #include #include +#include #include #include @@ -240,6 +243,11 @@ MainObject::MainObject(QObject *parent,const char *name) exit(1); } + // + // Provisioning + // + InitProvisioning(); + // // Start Up the Drivers // @@ -568,6 +576,60 @@ void MainObject::updateMeters() } +void MainObject::InitProvisioning() const +{ + QString sql; + RDSqlQuery *q; + QString err_msg; + + // + // Provision a Host + // + if(rd_config->provisioningCreateHost()) { + if(!rd_config->provisioningHostTemplate().isEmpty()) { + sql=QString("select NAME from STATIONS where ")+ + "NAME=\""+RDEscapeString(rd_config->stationName())+"\""; + q=new RDSqlQuery(sql); + if(!q->first()) { + if(RDStation::create(rd_config->stationName(),&err_msg,rd_config->provisioningHostTemplate())) { + syslog(LOG_INFO,"created new host entry \"%s\"", + (const char *)rd_config->stationName()); + } + else { + fprintf(stderr,"caed: unable to provision host [%s]\n", + (const char *)err_msg); + exit(256); + } + } + delete q; + } + } + + // + // Provision a Service + // + if(rd_config->provisioningCreateService()) { + if(!rd_config->provisioningServiceTemplate().isEmpty()) { + sql=QString("select NAME from SERVICES where ")+ + "NAME=\""+RDEscapeString(rd_config->stationName())+"\""; + q=new RDSqlQuery(sql); + if(!q->first()) { + if(RDSvc::create(rd_config->stationName(),&err_msg,rd_config->provisioningServiceTemplate())) { + syslog(LOG_INFO,"created new service entry \"%s\"", + (const char *)rd_config->stationName()); + } + else { + fprintf(stderr,"caed: unable to provision service [%s]\n", + (const char *)err_msg); + exit(256); + } + } + delete q; + } + } +} + + void MainObject::InitMixers() { for(int i=0;icart + + Host already exists! + + + + host already exists + + + + service already exists + + + + template service + + + + does not exist + + + + template host + + RDAddCart diff --git a/lib/librd_de.ts b/lib/librd_de.ts index 0360fd36..09944b46 100644 --- a/lib/librd_de.ts +++ b/lib/librd_de.ts @@ -487,6 +487,30 @@ cart + + Host already exists! + + + + host already exists + + + + service already exists + + + + template service + + + + does not exist + + + + template host + + RDAddCart diff --git a/lib/librd_es.ts b/lib/librd_es.ts index 95dc5035..ab8cb19b 100644 --- a/lib/librd_es.ts +++ b/lib/librd_es.ts @@ -487,6 +487,30 @@ cart + + Host already exists! + + + + host already exists + + + + service already exists + + + + template service + + + + does not exist + + + + template host + + RDAddCart diff --git a/lib/librd_fr.ts b/lib/librd_fr.ts index bf7a39cf..90cb2f86 100644 --- a/lib/librd_fr.ts +++ b/lib/librd_fr.ts @@ -465,6 +465,30 @@ cart + + Host already exists! + + + + host already exists + + + + service already exists + + + + template service + + + + does not exist + + + + template host + + RDAddCart diff --git a/lib/librd_nb.ts b/lib/librd_nb.ts index 2bf9da6f..a46a78e5 100644 --- a/lib/librd_nb.ts +++ b/lib/librd_nb.ts @@ -487,6 +487,30 @@ cart + + Host already exists! + + + + host already exists + + + + service already exists + + + + template service + + + + does not exist + + + + template host + + RDAddCart diff --git a/lib/librd_nn.ts b/lib/librd_nn.ts index 2bf9da6f..a46a78e5 100644 --- a/lib/librd_nn.ts +++ b/lib/librd_nn.ts @@ -487,6 +487,30 @@ cart + + Host already exists! + + + + host already exists + + + + service already exists + + + + template service + + + + does not exist + + + + template host + + RDAddCart diff --git a/lib/librd_pt_BR.ts b/lib/librd_pt_BR.ts index b2c14540..25b1df61 100644 --- a/lib/librd_pt_BR.ts +++ b/lib/librd_pt_BR.ts @@ -487,6 +487,30 @@ cart + + Host already exists! + + + + host already exists + + + + service already exists + + + + template service + + + + does not exist + + + + template host + + RDAddCart diff --git a/lib/rdconfig.cpp b/lib/rdconfig.cpp index ce1b1209..aa6758a5 100644 --- a/lib/rdconfig.cpp +++ b/lib/rdconfig.cpp @@ -249,6 +249,30 @@ void RDConfig::log(const QString &module,LogPriority prio,const QString &msg) } +bool RDConfig::provisioningCreateHost() const +{ + return conf_provisioning_create_host; +} + + +QString RDConfig::provisioningHostTemplate() const +{ + return conf_provisioning_host_template; +} + + +bool RDConfig::provisioningCreateService() const +{ + return conf_provisioning_create_service; +} + + +QString RDConfig::provisioningServiceTemplate() const +{ + return conf_provisioning_service_template; +} + + int RDConfig::alsaPeriodQuantity() const { return conf_alsa_period_quantity; @@ -461,6 +485,15 @@ void RDConfig::load() conf_audio_store_xport_hostname= profile->stringValue("AudioStore","XportHostname","localhost"); + conf_provisioning_create_host= + profile->boolValue("Provisioning","CreateHost"); + conf_provisioning_host_template= + profile->stringValue("Provisioning","NewHostTemplate"); + conf_provisioning_create_service= + profile->boolValue("Provisioning","CreateService"); + conf_provisioning_service_template= + profile->stringValue("Provisioning","NewServiceTemplate"); + conf_audio_root= profile->stringValue("Cae","AudioRoot",RD_AUDIO_ROOT); conf_audio_extension= @@ -560,6 +593,10 @@ void RDConfig::clear() conf_log_core_dump_directory=DEFAULT_LOG_CORE_DUMP_DIRECTORY; conf_log_pattern=DEFAULT_LOG_PATTERN; conf_log_xload_debug_data=false; + conf_provisioning_create_host=false; + conf_provisioning_host_template=""; + conf_provisioning_create_service=false; + conf_provisioning_service_template=""; conf_alsa_period_quantity=RD_ALSA_DEFAULT_PERIOD_QUANTITY; conf_alsa_period_size=RD_ALSA_DEFAULT_PERIOD_SIZE; conf_alsa_channels_per_pcm=-1; diff --git a/lib/rdconfig.h b/lib/rdconfig.h index 82e0c38d..472f6d39 100644 --- a/lib/rdconfig.h +++ b/lib/rdconfig.h @@ -65,6 +65,10 @@ class RDConfig QString logPattern() const; bool logXloadDebugData() const; void log(const QString &module,LogPriority prio,const QString &msg); + bool provisioningCreateHost() const; + QString provisioningHostTemplate() const; + bool provisioningCreateService() const; + QString provisioningServiceTemplate() const; int alsaPeriodQuantity() const; int alsaPeriodSize() const; int alsaChannelsPerPcm() const; @@ -121,6 +125,10 @@ class RDConfig QString conf_log_directory; QString conf_log_core_dump_directory; QString conf_log_pattern; + bool conf_provisioning_create_host; + QString conf_provisioning_host_template; + bool conf_provisioning_create_service; + QString conf_provisioning_service_template; bool conf_log_xload_debug_data; int conf_alsa_period_quantity; int conf_alsa_period_size; diff --git a/lib/rddatedecode.cpp b/lib/rddatedecode.cpp index 6fce5ccf..e200f76e 100644 --- a/lib/rddatedecode.cpp +++ b/lib/rddatedecode.cpp @@ -22,7 +22,7 @@ #include -QString RDDateDecode(QString str,QDate date) +QString RDDateDecode(QString str,const QDate &date,const QString &svcname) { QString string; int yearnum; @@ -117,6 +117,12 @@ QString RDDateDecode(QString str,QDate date) field=QString().sprintf("%02d",date.month()); break; + case 's': // Service name + if(!svcname.isEmpty()) { + field=svcname; + } + break; + case 'u': // Day of week (numeric, 1..7, 1=Monday) field=QString().sprintf("%d",date.dayOfWeek()); break; @@ -164,7 +170,8 @@ QString RDDateDecode(QString str,QDate date) } -QString RDDateTimeDecode(QString str,QDateTime datetime) +QString RDDateTimeDecode(QString str,const QDateTime &datetime, + const QString &svcname) { QString string; int yearnum; @@ -291,6 +298,12 @@ QString RDDateTimeDecode(QString str,QDateTime datetime) field=QString().sprintf("%02d",datetime.time().second()); break; + case 's': // Service name + if(!svcname.isEmpty()) { + field=svcname; + } + break; + case 'u': // Day of week (numeric, 1..7, 1=Monday) field=QString().sprintf("%d",datetime.date().dayOfWeek()); break; diff --git a/lib/rddatedecode.h b/lib/rddatedecode.h index 48fb9fe8..d0ae5f74 100644 --- a/lib/rddatedecode.h +++ b/lib/rddatedecode.h @@ -23,8 +23,9 @@ #include -QString RDDateDecode(QString str,QDate date); -QString RDDateTimeDecode(QString str,QDateTime datetime); +QString RDDateDecode(QString str,const QDate &date,const QString &svcname=""); +QString RDDateTimeDecode(QString str,const QDateTime &datetime, + const QString &svcname=""); #endif // RDDATEDECODE diff --git a/lib/rdstation.cpp b/lib/rdstation.cpp index 6b81c9ad..f1e31bef 100644 --- a/lib/rdstation.cpp +++ b/lib/rdstation.cpp @@ -18,6 +18,9 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // +#include + +#include #include #include #include @@ -660,6 +663,978 @@ void RDStation::setCardOutputs(int cardnum,int outputs) const } +bool RDStation::create(const QString &name,QString *err_msg, + const QString &exemplar) +{ + QString sql; + RDSqlQuery *q; + RDSqlQuery *q1; + + if(exemplar.isEmpty()) { // Create Blank Host Config + sql=QString("insert into STATIONS set ")+ + "NAME=\""+RDEscapeString(name)+"\","+ + "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(unsigned i=0;ifirst()) { + sql=QString("insert into STATIONS set ")+ + "NAME=\""+RDEscapeString(name)+"\","+ + "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())+"\""; + 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_SAMPRATE,"+ // 09 + "DEFAULT_LAYER,"+ // 10 + "DEFAULT_BITRATE,"+ // 11 + "DEFAULT_RECORD_MODE,"+ // 12 + "DEFAULT_TRIM_STATE,"+ // 13 + "MAXLENGTH,"+ // 14 + "TAIL_PREROLL,"+ // 15 + "RIPPER_DEVICE,"+ // 16 + "PARANOIA_LEVEL,"+ // 17 + "RIPPER_LEVEL,"+ // 18 + "CDDB_SERVER "+ // 19 + "from RDLIBRARY where "+ + "(STATION=\""+RDEscapeString(exemplar)+"\")&&"+ + "(INSTANCE=0)"; + 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_SAMPRATE=%u,",q->value(9).toUInt())+ + QString().sprintf("DEFAULT_LAYER=%u,",q->value(10).toUInt())+ + QString().sprintf("DEFAULT_BITRATE=%u,",q->value(11).toUInt())+ + QString().sprintf("DEFAULT_RECORD_MODE=%u,",q->value(12).toUInt())+ + "DEFAULT_TRIM_STATE=\""+RDEscapeString(q->value(13).toString())+"\","+ + QString().sprintf("MAXLENGTH=%d,",q->value(14).toInt())+ + QString().sprintf("TAIL_PREROLL=%u,",q->value(15).toUInt())+ + "RIPPER_DEVICE=\""+RDEscapeString(q->value(16).toString())+"\","+ + QString().sprintf("PARANOIA_LEVEL=%d,",q->value(17).toInt())+ + QString().sprintf("RIPPER_LEVEL=%d,",q->value(18).toInt())+ + "CDDB_SERVER=\""+RDEscapeString(q->value(19).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 + "SAMPRATE,"+ // 06 + "LAYER,"+ // 07 + "BITRATE,"+ // 08 + "MAXLENGTH,"+ // 09 + "TAIL_PREROLL,"+ // 10 + "START_CART,"+ // 11 + "END_CART,"+ // 12 + "REC_START_CART,"+ // 13 + "REC_END_CART,"+ // 14 + "TRIM_THRESHOLD,"+ // 15 + "RIPPER_LEVEL,"+ // 16 + "DEFAULT_TRANS_TYPE "+ // 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("SAMPRATE=%u,",q->value(6).toUInt())+ + QString().sprintf("LAYER=%u,",q->value(7).toUInt())+ + QString().sprintf("BITRATE=%u,",q->value(8).toUInt())+ + QString().sprintf("MAXLENGTH=%d,",q->value(9).toInt())+ + QString().sprintf("TAIL_PREROLL=%u,",q->value(10).toUInt())+ + "STATION=\""+RDEscapeString(name)+"\","+ + QString().sprintf("START_CART=%u,",q->value(11).toUInt())+ + QString().sprintf("END_CART=%u,",q->value(12).toUInt())+ + QString().sprintf("REC_START_CART=%u,",q->value(13).toUInt())+ + QString().sprintf("REC_END_CART=%u,",q->value(14).toUInt())+ + QString().sprintf("TRIM_THRESHOLD=%d,",q->value(15).toInt())+ + QString().sprintf("RIPPER_LEVEL=%d,",q->value(16).toInt())+ + QString().sprintf("DEFAULT_TRANS_TYPE=%d",q->value(17).toInt()); + 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 + "PORT_TYPE,"+ // 04 + "DEFAULT_FORMAT,"+ // 05 + "DEFAULT_CHANNELS,"+ // 06 + "DEFAULT_SAMPRATE,"+ // 07 + "DEFAULT_BITRATE,"+ // 08 + "DEFAULT_THRESHOLD,"+ // 09 + "DEFAULT_MONITOR_ON "+ // 10 + "from DECKS where "+ + "STATION_NAME=\""+RDEscapeString(exemplar)+"\""; + q=new RDSqlQuery(sql); + if(q->first()) { + 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())+ + "PORT_TYPE=\""+RDEscapeString(q->value(4).toString())+"\","+ + QString().sprintf("DEFAULT_FORMAT=%d,",q->value(5).toInt())+ + QString().sprintf("DEFAULT_CHANNELS=%d,",q->value(6).toInt())+ + QString().sprintf("DEFAULT_SAMPRATE=%d,",q->value(7).toInt())+ + QString().sprintf("DEFAULT_BITRATE=%d,",q->value(8).toInt())+ + QString().sprintf("DEFAULT_THRESHOLD=%d,",q->value(9).toInt())+ + "STATION_NAME=\""+RDEscapeString(name)+"\","+ + "DEFAULT_MONITOR_ON=\""+RDEscapeString(q->value(10).toString())+"\""; + 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 + "OP_MODE,"+ // 02 + "START_MODE,"+ // 03 + "PIE_COUNT_LENGTH,"+ // 04 + "PIE_COUNT_ENDPOINT,"+ // 05 + "CHECK_TIMESYNC,"+ // 06 + "STATION_PANELS,"+ // 07 + "USER_PANELS," // 08 + "SHOW_AUX_1,"+ // 09 + "SHOW_AUX_2,"+ // 10 + "CLEAR_FILTER,"+ // 11 + "DEFAULT_TRANS_TYPE,"+ // 12 + "BAR_ACTION,"+ // 13 + "FLASH_PANEL,"+ // 14 + "PAUSE_ENABLED,"+ // 15 + "UDP_ADDR0,"+ // 16 + "UDP_PORT0,"+ // 17 + "UDP_STRING0,"+ // 18 + "UDP_ADDR1,"+ // 19 + "UDP_PORT1,"+ // 20 + "UDP_STRING1,"+ // 21 + "UDP_ADDR2,"+ // 22 + "UDP_PORT2,"+ // 23 + "UDP_STRING2,"+ // 24 + "DEFAULT_SERVICE,"+ // 25 + "LOG_RML0,"+ // 26 + "LOG_RML1,"+ // 27 + "LOG_RML2,"+ // 28 + "BUTTON_LABEL_TEMPLATE,"+ // 29 + "EXIT_PASSWORD "+ // 30 + "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("OP_MODE=%d,",q->value(2).toInt())+ + QString().sprintf("START_MODE=%d,",q->value(3).toInt())+ + QString().sprintf("PIE_COUNT_LENGTH=%d,",q->value(4).toInt())+ + QString().sprintf("PIE_COUNT_ENDPOINT=%d,",q->value(5).toInt())+ + "CHECK_TIMESYNC=\""+RDEscapeString(q->value(6).toString())+"\","+ + QString().sprintf("STATION_PANELS=%d,",q->value(7).toInt())+ + QString().sprintf("USER_PANELS=%d,",q->value(8).toInt())+ + "SHOW_AUX_1=\""+RDEscapeString(q->value(9).toString())+"\","+ + "SHOW_AUX_2=\""+RDEscapeString(q->value(10).toString())+"\","+ + "CLEAR_FILTER=\""+RDEscapeString(q->value(11).toString())+"\","+ + QString().sprintf("DEFAULT_TRANS_TYPE=%u,",q->value(12).toUInt())+ + QString().sprintf("BAR_ACTION=%u,",q->value(13).toUInt())+ + "FLASH_PANEL=\""+RDEscapeString(q->value(14).toString())+"\","+ + "PAUSE_ENABLED=\""+RDEscapeString(q->value(15).toString())+"\","+ + "UDP_ADDR0=\""+RDEscapeString(q->value(16).toString())+"\","+ + QString().sprintf("UDP_PORT0=%u,",q->value(17).toUInt())+ + "UDP_STRING0=\""+RDEscapeString(q->value(18).toString())+"\","+ + "UDP_ADDR1=\""+RDEscapeString(q->value(19).toString())+"\","+ + QString().sprintf("UDP_PORT1=%u,",q->value(20).toUInt())+ + "UDP_STRING1=\""+RDEscapeString(q->value(21).toString())+"\","+ + "UDP_ADDR2=\""+RDEscapeString(q->value(22).toString())+"\","+ + QString().sprintf("UDP_PORT2=%u,",q->value(23).toUInt())+ + "UDP_STRING2=\""+RDEscapeString(q->value(24).toString())+"\","+ + "STATION=\""+RDEscapeString(name)+"\","+ + "DEFAULT_SERVICE=\""+RDEscapeString(q->value(25).toString())+"\","+ + "LOG_RML0=\""+RDEscapeString(q->value(26).toString())+"\","+ + "LOG_RML1=\""+RDEscapeString(q->value(27).toString())+"\","+ + "LOG_RML2=\""+RDEscapeString(q->value(28).toString())+"\","+ + "BUTTON_LABEL_TEMPLATE=\""+RDEscapeString(q->value(29).toString())+ + "\","+ + "EXIT_PASSWORD=\""+RDEscapeString(q->value(30).toString())+"\""; + 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; + + // + // RDAirPlay Log Modes + // + sql=QString("select ")+ + "MACHINE,"+ // 00 + "START_MODE,"+ // 01 + "OP_MODE 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 + "DEFAULT_SERVICE,"+ // 04 + "BUTTON_LABEL_TEMPLATE "+ // 05 + "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())+"\","+ + "STATION=\""+RDEscapeString(name)+"\","+ + "DEFAULT_SERVICE=\""+RDEscapeString(q->value(4).toString())+"\","+ + "BUTTON_LABEL_TEMPLATE=\""+RDEscapeString(q->value(5).toString())+"\""; + q1=new RDSqlQuery(sql); + delete q1; + } + delete q; + + sql=QString("select ")+ + "INSTANCE,"+ + "CARD,"+ + "PORT,"+ + "START_RML,"+ + "STOP_RML,"+ + "START_GPI_MATRIX,"+ + "START_GPI_LINE,"+ + "START_GPO_MATRIX,"+ + "START_GPO_LINE,"+ + "STOP_GPI_MATRIX,"+ + "STOP_GPI_LINE,"+ + "STOP_GPO_MATRIX,"+ + "STOP_GPO_LINE "+ + "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("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 Audio Port Settings + // + sql=QString("select ")+ + "CARD_NUMBER," // 00 + "CLOCK_SOURCE,"; // 01 + for(int i=0;inext()) { + sql=QString("insert into AUDIO_PORTS set ")+ + QString().sprintf("CARD_NUMBER=%u,",q->value(0).toUInt())+ + QString().sprintf("CLOCK_SOURCE=%d,",q->value(1).toInt())+ + "STATION_NAME=\""+RDEscapeString(name)+"\","; + for(int i=0;ivalue(2+3*i).toInt(), + i,q->value(3+3*i).toInt(), + i,q->value(4+3*i).toInt(), + i,q->value(5+3*i).toInt()); + } + sql=sql.left(sql.length()-1); + 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 + "PORT_TYPE,"+ // 03 + "CARD,PORT,"+ // 04 + "IP_ADDRESS,"+ // 05 + "IP_PORT,"+ // 06 + "USERNAME,"+ // 07 + "PASSWORD,"+ // 08 + "GPIO_DEVICE,"+ // 09 + "INPUTS,"+ // 10 + "OUTPUTS,"+ // 11 + "GPIS,"+ // 12 + "GPOS,"+ // 13 + "DISPLAYS,"+ // 14 + "FADERS,"+ // 15 + "PORT_TYPE_2,"+ // 16 + "PORT_2,"+ // 17 + "IP_ADDRESS_2,"+ // 18 + "IP_PORT_2,"+ // 19 + "USERNAME_2,"+ // 20 + "PASSWORD_2 "+ // 21 + "from MATRICES where "+ + "STATION_NAME=\""+RDEscapeString(exemplar)+"\""; + q=new RDSqlQuery(sql); + while(q->next()) { + sql=QString("insert into MATRICES set ")+ + "NAME=\""+RDEscapeString(q->value(0).toString())+"\","+ + QString().sprintf("MATRIX=%d,",q->value(1).toInt())+ + QString().sprintf("TYPE=%d,",q->value(2).toInt())+ + QString().sprintf("PORT_TYPE=%d,",q->value(3).toInt())+ + QString().sprintf("CARD=%d,",q->value(4).toInt())+ + QString().sprintf("PORT=%d,",q->value(5).toInt())+ + "IP_ADDRESS=\""+RDEscapeString(q->value(6).toString())+"\","+ + QString().sprintf("IP_PORT=%d,",q->value(7).toInt())+ + "USERNAME=\""+RDEscapeString(q->value(8).toString())+"\","+ + "PASSWORD=\""+RDEscapeString(q->value(9).toString())+"\","+ + "GPIO_DEVICE=\""+RDEscapeString(q->value(10).toString())+"\","+ + QString().sprintf("INPUTS=%d,",q->value(11).toInt())+ + QString().sprintf("OUTPUTS=%d,",q->value(12).toInt())+ + QString().sprintf("GPIS=%d,",q->value(13).toInt())+ + QString().sprintf("GPOS=%d,",q->value(14).toInt())+ + QString().sprintf("DISPLAYS=%d,",q->value(15).toInt())+ + "STATION_NAME=\""+RDEscapeString(name)+"\","+ + QString().sprintf("FADERS=%d,",q->value(16).toInt())+ + QString().sprintf("PORT_TYPE_2=%d,",q->value(17).toInt())+ + QString().sprintf("PORT_2=%d,",q->value(18).toInt())+ + "IP_ADDRESS_2=\""+RDEscapeString(q->value(19).toString())+"\","+ + QString().sprintf("IP_PORT_2=%d,",q->value(20).toInt())+ + "USERNAME_2=\""+RDEscapeString(q->value(21).toString())+"\","+ + "PASSWORD_2=\""+RDEscapeString(q->value(22).toString())+"\""; + 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 + "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("QDEVICE_NUM=%d,",q->value(6).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 + "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())+ + "STATION_NAME=\""+RDEscapeString(name)+"\""; + q1=new RDSqlQuery(sql); + delete q1; + } + delete q; + + // + // Clone GPIs + // + sql=QString("select ")+ + "MATRIX,"+ // 00 + "NUMBER,"+ // 01 + "MACRO_CART "+ // 02 + "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())+ + "STATION_NAME=\""+RDEscapeString(name)+"\""; + q1=new RDSqlQuery(sql); + delete q1; + } + delete q; + + // + // Close vGuest Settings + // + sql=QString("select ")+ + "MATRIX_NUM,"+ + "VGUEST_TYPE,"+ + "NUMBER,"+ + "ENGINE_NUM,"+ + "DEVICE_NUM,"+ + "SURFACE_NUM,"+ + "RELAY_NUM,"+ + "BUSS_NUM "+ + "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,"+ + "VARVALUE,"+ + "REMARK "+ + "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; + } + return true; +} + + +void RDStation::remove(const QString &name) +{ + QString sql; + RDSqlQuery *q; + RDSqlQuery *q1; + + sql=QString().sprintf("delete from DECKS where STATION_NAME=\"%s\"", + (const char *)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().sprintf("delete from TTYS where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from AUDIO_PORTS where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from RECORDINGS where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql= + QString().sprintf("delete from SERVICE_PERMS where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from RDAIRPLAY where STATION=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from RDAIRPLAY_CHANNELS where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from RDPANEL where STATION=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from RDPANEL_CHANNELS where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from RDLOGEDIT where STATION=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from MATRICES where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from INPUTS where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from OUTPUTS where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from VGUEST_RESOURCES where\ + STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from RDLIBRARY where STATION=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from GPIS where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from HOSTVARS where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from STATIONS where NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql= + QString().sprintf("delete from REPORT_STATIONS where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from PANELS where (TYPE=%d && OWNER=\"%s\")", + RDAirPlayConf::StationPanel, + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString(). + sprintf("delete from EXTENDED_PANELS where (TYPE=%d && OWNER=\"%s\")", + RDAirPlayConf::StationPanel,(const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + + sql=QString().sprintf("select ID from ENCODERS where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + while(q->next()) { + sql=QString().sprintf("delete from ENCODER_CHANNELS where ENCODER_ID=%d", + q->value(0).toInt()); + q1=new RDSqlQuery(sql); + delete q1; + sql=QString().sprintf("delete from ENCODER_SAMPLERATES where ENCODER_ID=%d", + q->value(0).toInt()); + q1=new RDSqlQuery(sql); + delete q1; + sql=QString().sprintf("delete from ENCODER_BITRATES where ENCODER_ID=%d", + q->value(0).toInt()); + q1=new RDSqlQuery(sql); + delete q1; + } + delete q; + sql=QString().sprintf("delete from ENCODERS where STATION_NAME=\"%s\"", + (const char *)RDEscapeString(name)); + q=new RDSqlQuery(sql); + delete q; + sql=QString().sprintf("delete from RDHOTKEYS where STATION_NAME=\"%s\"", + (const char *)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; +} + void RDStation::SetRow(const QString ¶m,const QString &value) const { RDSqlQuery *q; diff --git a/lib/rdstation.h b/lib/rdstation.h index 0145a8e2..3bdbdabb 100644 --- a/lib/rdstation.h +++ b/lib/rdstation.h @@ -131,6 +131,9 @@ class RDStation void setCardInputs(int cardnum,int inputs) const; int cardOutputs(int cardnum) const; void setCardOutputs(int cardnum,int outputs) const; + static bool create(const QString &name,QString *err_msg, + const QString &exemplar=""); + static void remove(const QString &name); private: void SetRow(const QString ¶m,const QString &value) const; diff --git a/lib/rdsvc.cpp b/lib/rdsvc.cpp index c74cf9b4..66bee7e9 100644 --- a/lib/rdsvc.cpp +++ b/lib/rdsvc.cpp @@ -1036,16 +1036,61 @@ void RDSvc::clearLogLinks(RDSvc::ImportSource src,const QDate &date, void RDSvc::create(const QString exemplar) const +{ + QString err_msg; + RDSvc::create(svc_name,&err_msg,exemplar); +} + + +void RDSvc::remove() const +{ + RDSvc::remove(svc_name); +} + + +QString RDSvc::xml() const +{ + QString sql; + RDSqlQuery *q; + QString ret; +#ifndef WIN32 + sql="select DESCRIPTION from SERVICES where NAME=\""+ + RDEscapeString(svc_name)+"\""; + + q=new RDSqlQuery(sql); + if(q->first()) { + ret+=" \n"; + ret+=" "+RDXmlField("name",svc_name); + ret+=" "+RDXmlField("description",q->value(0).toString()); + ret+=" \n"; + } + delete q; +#endif // WIN32 + return ret; +} + + +bool RDSvc::create(const QString &name,QString *err_msg, + const QString &exemplar) { QString sql; RDSqlQuery *q; RDSqlQuery *q1; + sql=QString("select NAME from SERVICES where ")+ + "NAME=\""+RDEscapeString(name)+"\""; + q=new RDSqlQuery(sql); + if(q->first()) { + *err_msg=QObject::tr("service already exists"); + delete q; + return false; + } + if(exemplar.isEmpty()) { // Create Empty Service sql=QString("insert into SERVICES set NAME=\"")+ - RDEscapeString(svc_name)+"\","+ - "NAME_TEMPLATE=\""+RDEscapeString(svc_name)+"-%m%d\","+ - "DESCRIPTION_TEMPLATE=\""+RDEscapeString(svc_name)+" log for %d/%m/%Y\""; + RDEscapeString(name)+"\","+ + "NAME_TEMPLATE=\""+RDEscapeString(name)+"-%m%d\","+ + "DESCRIPTION_TEMPLATE=\""+RDEscapeString(name)+" log for %d/%m/%Y\""; q=new RDSqlQuery(sql); delete q; @@ -1059,7 +1104,7 @@ void RDSvc::create(const QString exemplar) const GROUP_NAME=\"%s\",SERVICE_NAME=\"%s\"", (const char *) RDEscapeString(q->value(0).toString()), - (const char *)RDEscapeString(svc_name)); + (const char *)RDEscapeString(name)); q1=new RDSqlQuery(sql); delete q1; } @@ -1075,7 +1120,7 @@ void RDSvc::create(const QString exemplar) const STATION_NAME=\"%s\",SERVICE_NAME=\"%s\"", (const char *) RDEscapeString(q->value(0).toString()), - (const char *)RDEscapeString(svc_name)); + (const char *)RDEscapeString(name)); q1=new RDSqlQuery(sql); delete q1; } @@ -1083,7 +1128,7 @@ void RDSvc::create(const QString exemplar) const for(int i=0;i<168;i++) { sql=QString("insert into SERVICE_CLOCKS set ")+ - "SERVICE_NAME=\""+RDEscapeString(svc_name)+"\","+ + "SERVICE_NAME=\""+RDEscapeString(name)+"\","+ QString().sprintf("HOUR=%d,",i)+ "CLOCK_NAME=null"; q=new RDSqlQuery(sql); @@ -1186,7 +1231,7 @@ void RDSvc::create(const QString exemplar) const QString().sprintf("MUS_EVENT_ID_LENGTH=%d,",q->value(42).toInt())+ QString().sprintf("MUS_ANNC_TYPE_OFFSET=%d,",q->value(43).toInt())+ QString().sprintf("MUS_ANNC_TYPE_LENGTH=%d,",q->value(44).toInt())+ - "NAME=\""+RDEscapeString(svc_name)+"\""; + "NAME=\""+RDEscapeString(name)+"\""; q=new RDSqlQuery(sql); delete q; sql=QString("select HOUR,CLOCK_NAME from SERVICE_CLOCKS where ")+ @@ -1194,7 +1239,7 @@ void RDSvc::create(const QString exemplar) const q=new RDSqlQuery(sql); while(q->next()) { sql=QString("insert into SERVICE_CLOCKS set ")+ - "SERVICE_NAME=\""+RDEscapeString(svc_name)+"\","+ + "SERVICE_NAME=\""+RDEscapeString(name)+"\","+ QString().sprintf("HOUR=%d,",q->value(0).toInt()); if(q->value(1).isNull()) { @@ -1208,6 +1253,12 @@ void RDSvc::create(const QString exemplar) const } delete q; } + else { + *err_msg=QObject::tr("template service")+" \""+exemplar+"\" "+ + QObject::tr("does not exist"); + delete q; + return false; + } // // Clone Audio Perms @@ -1221,7 +1272,7 @@ void RDSvc::create(const QString exemplar) const GROUP_NAME=\"%s\",SERVICE_NAME=\"%s\"", (const char *) RDEscapeString(q->value(0).toString()), - (const char *)RDEscapeString(svc_name)); + (const char *)RDEscapeString(name)); q1=new RDSqlQuery(sql); delete q1; } @@ -1239,7 +1290,7 @@ void RDSvc::create(const QString exemplar) const STATION_NAME=\"%s\",SERVICE_NAME=\"%s\"", (const char *) RDEscapeString(q->value(0).toString()), - (const char *)RDEscapeString(svc_name)); + (const char *)RDEscapeString(name)); q1=new RDSqlQuery(sql); delete q1; } @@ -1256,7 +1307,7 @@ void RDSvc::create(const QString exemplar) const sql=QString().sprintf("insert into AUTOFILLS set\ CART_NUMBER=%u,SERVICE=\"%s\"", q->value(0).toUInt(), - (const char *)RDEscapeString(svc_name)); + (const char *)RDEscapeString(name)); q1=new RDSqlQuery(sql); delete q1; } @@ -1274,7 +1325,7 @@ void RDSvc::create(const QString exemplar) const CLOCK_NAME=\"%s\",SERVICE_NAME=\"%s\"", (const char *) RDEscapeString(q->value(0).toString()), - (const char *)RDEscapeString(svc_name)); + (const char *)RDEscapeString(name)); q1=new RDSqlQuery(sql); delete q1; } @@ -1292,7 +1343,7 @@ void RDSvc::create(const QString exemplar) const EVENT_NAME=\"%s\",SERVICE_NAME=\"%s\"", (const char *) RDEscapeString(q->value(0).toString()), - (const char *)RDEscapeString(svc_name)); + (const char *)RDEscapeString(name)); q1=new RDSqlQuery(sql); delete q1; } @@ -1302,13 +1353,15 @@ void RDSvc::create(const QString exemplar) const // // Create Service Reconciliation Table // - sql=RDCreateReconciliationTableSql(RDSvc::svcTableName(svc_name)); + sql=RDCreateReconciliationTableSql(RDSvc::svcTableName(name)); q=new RDSqlQuery(sql); delete q; + + return true; } -void RDSvc::remove() const +void RDSvc::remove(const QString &name) { QString sql; RDSqlQuery *q; @@ -1316,53 +1369,53 @@ void RDSvc::remove() const QString logname; sql=QString("delete from AUDIO_PERMS where ")+ - "SERVICE_NAME=\""+RDEscapeString(svc_name)+"\""; + "SERVICE_NAME=\""+RDEscapeString(name)+"\""; q=new RDSqlQuery(sql); delete q; sql=QString("delete from SERVICE_PERMS where ")+ - "SERVICE_NAME=\""+RDEscapeString(svc_name)+"\""; + "SERVICE_NAME=\""+RDEscapeString(name)+"\""; q=new RDSqlQuery(sql); delete q; sql=QString("update RDAIRPLAY set ")+ "DEFAULT_SERVICE=\"\" where "+ - "DEFAULT_SERVICE=\""+RDEscapeString(svc_name)+"\""; + "DEFAULT_SERVICE=\""+RDEscapeString(name)+"\""; q=new RDSqlQuery(sql); delete q; sql=QString("delete from EVENT_PERMS where ")+ - "SERVICE_NAME=\""+RDEscapeString(svc_name)+"\""; + "SERVICE_NAME=\""+RDEscapeString(name)+"\""; q=new RDSqlQuery(sql); delete q; sql=QString("delete from CLOCK_PERMS where ")+ - "SERVICE_NAME=\""+RDEscapeString(svc_name)+"\""; + "SERVICE_NAME=\""+RDEscapeString(name)+"\""; q=new RDSqlQuery(sql); delete q; sql=QString("delete from AUTOFILLS where ")+ - "SERVICE=\""+RDEscapeString(svc_name)+"\""; + "SERVICE=\""+RDEscapeString(name)+"\""; q=new RDSqlQuery(sql); delete q; sql=QString("delete from REPORT_SERVICES where ")+ - "SERVICE_NAME=\""+RDEscapeString(svc_name)+"\""; + "SERVICE_NAME=\""+RDEscapeString(name)+"\""; q=new RDSqlQuery(sql); delete q; sql=QString("delete from SERVICES where ")+ - "NAME=\""+RDEscapeString(svc_name)+"\""; + "NAME=\""+RDEscapeString(name)+"\""; q=new RDSqlQuery(sql); delete q; sql=QString("delete from SERVICE_CLOCKS where ")+ - "SERVICE_NAME=\""+RDEscapeString(svc_name)+"\""; + "SERVICE_NAME=\""+RDEscapeString(name)+"\""; q=new RDSqlQuery(sql); delete q; sql=QString("select NAME from LOGS where ")+ - "SERVICE=\""+RDEscapeString(svc_name)+"\""; + "SERVICE=\""+RDEscapeString(name)+"\""; q=new RDSqlQuery(sql); while(q->next()) { logname=q->value(0).toString(); @@ -1376,7 +1429,7 @@ void RDSvc::remove() const } delete q; - QString tablename=svc_name; + QString tablename=name; tablename.replace(" ","_"); sql=QString().sprintf("drop table `%s_SRT`",(const char *)tablename); q=new RDSqlQuery(sql); @@ -1387,34 +1440,12 @@ void RDSvc::remove() const delete q; sql=QString("delete from LOGS where ")+ - "SERVICE=\""+RDEscapeString(svc_name)+"\""; + "SERVICE=\""+RDEscapeString(name)+"\""; q=new RDSqlQuery(sql); delete q; } -QString RDSvc::xml() const -{ - QString sql; - RDSqlQuery *q; - QString ret; -#ifndef WIN32 - sql="select DESCRIPTION from SERVICES where NAME=\""+ - RDEscapeString(svc_name)+"\""; - - q=new RDSqlQuery(sql); - if(q->first()) { - ret+=" \n"; - ret+=" "+RDXmlField("name",svc_name); - ret+=" "+RDXmlField("description",q->value(0).toString()); - ret+=" \n"; - } - delete q; -#endif // WIN32 - return ret; -} - - QString RDSvc::svcTableName(const QString &svc_name) { QString ret=svc_name; diff --git a/lib/rdsvc.h b/lib/rdsvc.h index 3c7a1322..c3a757e2 100644 --- a/lib/rdsvc.h +++ b/lib/rdsvc.h @@ -2,7 +2,7 @@ // // Abstract a Rivendell Service // -// (C) Copyright 2002-2004,2016 Fred Gleason +// (C) Copyright 2002-2004,2016-2017 Fred Gleason // // 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 @@ -90,6 +90,9 @@ class RDSvc : public QObject void create(const QString exemplar) const; void remove() const; QString xml() const; + static bool create(const QString &name,QString *err_msg, + const QString &exemplar); + static void remove(const QString &name); static QString timeString(int hour,int secs); static QString svcTableName(const QString &svc_name); diff --git a/rdadmin/add_station.cpp b/rdadmin/add_station.cpp index 506ff0cb..d83fc33b 100644 --- a/rdadmin/add_station.cpp +++ b/rdadmin/add_station.cpp @@ -141,9 +141,8 @@ QSizePolicy AddStation::sizePolicy() const void AddStation::okData() { - RDSqlQuery *q; - RDSqlQuery *q1; - QString sql; + QString err_msg; + bool ok=false; if(add_name_edit->text().isEmpty()) { QMessageBox::warning(this,tr("Invalid Name"), @@ -152,820 +151,17 @@ void AddStation::okData() } if(add_exemplar_box->currentItem()==0) { // Create Blank Host Config - sql=QString().sprintf("insert into STATIONS set NAME=\"%s\",\ - DESCRIPTION=\"Workstation %s\",USER_NAME=\"user\",\ - DEFAULT_NAME=\"user\"", - (const char *)add_name_edit->text(), - (const char *)add_name_edit->text()); - q=new RDSqlQuery(sql); - if(!q->isActive()) { - QMessageBox::warning(this,tr("Host Exists"),tr("Host Already Exists!"), - 1,0,0); - delete q; - return; - } - delete q; - - // - // Create Service Perms - // - sql="select NAME from SERVICES"; - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into SERVICE_PERMS set\ - SERVICE_NAME=\"%s\",STATION_NAME=\"%s\"", - (const char *)q->value(0).toString(), - (const char *)add_name_edit->text()); - 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(add_name_edit->text())+"\","+ - QString().sprintf("INSTANCE=%u",i); - q=new RDSqlQuery(sql); - delete q; - - sql=QString("insert into RDPANEL_CHANNELS set ")+ - "STATION_NAME=\""+RDEscapeString(add_name_edit->text())+"\","+ - QString().sprintf("INSTANCE=%u",i); - q=new RDSqlQuery(sql); - delete q; - } - for(unsigned i=0;itext())+"\","+ - 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;itext())+"\","+ - QString().sprintf("MACHINE=%d",i); - q=new RDSqlQuery(sql); - delete q; - } + ok=RDStation::create(add_name_edit->text(),&err_msg); } - else { // Use Specified Config - - sql=QString().sprintf("select DEFAULT_NAME,STARTUP_CART,TIME_OFFSET,\ - BROADCAST_SECURITY,HEARTBEAT_CART,\ - HEARTBEAT_INTERVAL,EDITOR_PATH,FILTER_MODE,\ - SYSTEM_MAINT,HTTP_STATION,CAE_STATION from STATIONS\ - where NAME=\"%s\"", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - if(q->first()) { - sql=QString().sprintf("insert into STATIONS set NAME=\"%s\",\ - DESCRIPTION=\"Workstation %s\",\ - USER_NAME=\"%s\",\ - DEFAULT_NAME=\"%s\",\ - STARTUP_CART=%u,\ - TIME_OFFSET=%d,\ - BROADCAST_SECURITY=%u,\ - HEARTBEAT_CART=%u,\ - HEARTBEAT_INTERVAL=%u,\ - EDITOR_PATH=\"%s\",\ - FILTER_MODE=%d,\ - SYSTEM_MAINT=\"%s\",\ - HTTP_STATION=\"%s\",\ - CAE_STATION=\"%s\"", - (const char *)RDEscapeString(add_name_edit->text()), - (const char *)RDEscapeString(add_name_edit->text()), - (const char *)RDEscapeString(q->value(0). - toString()), - (const char *)RDEscapeString(q->value(0). - toString()), - q->value(1).toUInt(), - q->value(2).toInt(), - q->value(3).toUInt(), - q->value(4).toUInt(), - q->value(5).toUInt(), - (const char *)RDEscapeString(q->value(6). - toString()), - q->value(7).toInt(), - (const char *)q->value(8).toString(), - (const char *)RDEscapeString(q->value(9). - toString()), - (const char *)RDEscapeString(q->value(10). - toString())); - q1=new RDSqlQuery(sql); - if(!q1->isActive()) { - QMessageBox::warning(this,tr("Host Exists"),tr("Host Already Exists!"), - 1,0,0); - delete q1; - delete q; - return; - } - delete q1; - } - delete q; - - // - // Clone Service Perms - // - sql=QString().sprintf("select SERVICE_NAME from SERVICE_PERMS\ - where STATION_NAME=\"%s\"", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into SERVICE_PERMS set\ - STATION_NAME=\"%s\",SERVICE_NAME=\"%s\"", - (const char *)add_name_edit->text(), - (const char *)q->value(0).toString()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - // - // Clone RDLibrary Config - // - sql=QString().sprintf("select INPUT_CARD,INPUT_PORT,INPUT_TYPE,\ - OUTPUT_CARD,OUTPUT_PORT,VOX_THRESHOLD,\ - TRIM_THRESHOLD,DEFAULT_FORMAT,DEFAULT_CHANNELS,\ - DEFAULT_SAMPRATE,DEFAULT_LAYER,DEFAULT_BITRATE,\ - DEFAULT_RECORD_MODE,DEFAULT_TRIM_STATE,MAXLENGTH,\ - TAIL_PREROLL,RIPPER_DEVICE,PARANOIA_LEVEL,\ - RIPPER_LEVEL,CDDB_SERVER from RDLIBRARY\ - where (STATION=\"%s\")&&(INSTANCE=0)", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - if(q->first()) { - sql=QString().sprintf("insert into RDLIBRARY set\ - INPUT_CARD=%d,INPUT_PORT=%d,INPUT_TYPE=%d,\ - OUTPUT_CARD=%d,OUTPUT_PORT=%d,VOX_THRESHOLD=%d,\ - TRIM_THRESHOLD=%d,DEFAULT_FORMAT=%u,\ - DEFAULT_CHANNELS=%u,DEFAULT_SAMPRATE=%u,\ - DEFAULT_LAYER=%u,DEFAULT_BITRATE=%u,\ - DEFAULT_RECORD_MODE=%u,DEFAULT_TRIM_STATE=\"%s\",\ - MAXLENGTH=%d,TAIL_PREROLL=%u,\ - RIPPER_DEVICE=\"%s\",PARANOIA_LEVEL=%d,\ - RIPPER_LEVEL=%d,CDDB_SERVER=\"%s\",\ - STATION=\"%s\"", - q->value(0).toInt(), - q->value(1).toInt(), - q->value(2).toInt(), - q->value(3).toInt(), - q->value(4).toInt(), - q->value(5).toInt(), - q->value(6).toInt(), - q->value(7).toUInt(), - q->value(8).toUInt(), - q->value(9).toUInt(), - q->value(10).toUInt(), - q->value(11).toUInt(), - q->value(12).toUInt(), - (const char *)q->value(13).toString(), - q->value(14).toInt(), - q->value(15).toUInt(), - (const char *)q->value(16).toString(), - q->value(17).toInt(), - q->value(18).toInt(), - (const char *)q->value(19).toString(), - (const char *)add_name_edit->text()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - // - // Clone RDLogEdit Config - // - sql=QString().sprintf("select INPUT_CARD,INPUT_PORT,\ - OUTPUT_CARD,OUTPUT_PORT,\ - FORMAT,DEFAULT_CHANNELS,\ - SAMPRATE,LAYER,BITRATE,MAXLENGTH,\ - TAIL_PREROLL,START_CART,END_CART,\ - REC_START_CART,REC_END_CART,TRIM_THRESHOLD,\ - RIPPER_LEVEL,DEFAULT_TRANS_TYPE from RDLOGEDIT\ - where (STATION=\"%s\")", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - if(q->first()) { - sql=QString().sprintf("insert into RDLOGEDIT set\ - INPUT_CARD=%d,INPUT_PORT=%d,\ - OUTPUT_CARD=%d,OUTPUT_PORT=%d,\ - FORMAT=%u,\ - DEFAULT_CHANNELS=%u,SAMPRATE=%u,\ - LAYER=%u,BITRATE=%u,\ - MAXLENGTH=%d,TAIL_PREROLL=%u,\ - STATION=\"%s\",\ - START_CART=%u,\ - END_CART=%d,\ - REC_START_CART=%u,\ - REC_END_CART=%u,\ - TRIM_THRESHOLD=%d,\ - RIPPER_LEVEL=%d,\ - DEFAULT_TRANS_TYPE=%d", - q->value(0).toInt(), - q->value(1).toInt(), - q->value(2).toInt(), - q->value(3).toInt(), - q->value(4).toUInt(), - q->value(5).toUInt(), - q->value(6).toUInt(), - q->value(7).toUInt(), - q->value(8).toUInt(), - q->value(9).toInt(), - q->value(10).toUInt(), - (const char *)add_name_edit->text(), - q->value(11).toUInt(), - q->value(12).toUInt(), - q->value(13).toUInt(), - q->value(14).toUInt(), - q->value(15).toInt(), - q->value(16).toInt(), - q->value(17).toInt()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - // - // Clone RDCatch Config - // - sql=QString().sprintf("select CHANNEL,CARD_NUMBER,PORT_NUMBER,\ - MON_PORT_NUMBER,PORT_TYPE,DEFAULT_FORMAT,\ - DEFAULT_CHANNELS,DEFAULT_SAMPRATE,DEFAULT_BITRATE,\ - DEFAULT_THRESHOLD,DEFAULT_MONITOR_ON from DECKS\ - where STATION_NAME=\"%s\"", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - if(q->first()) { - sql=QString().sprintf("insert into DECKS set\ - CHANNEL=%u,CARD_NUMBER=%d,PORT_NUMBER=%d,\ - MON_PORT_NUMBER=%d,PORT_TYPE=\"%s\",\ - DEFAULT_FORMAT=%d,DEFAULT_CHANNELS=%d,\ - DEFAULT_SAMPRATE=%d,DEFAULT_BITRATE=%d,\ - DEFAULT_THRESHOLD=%d,STATION_NAME=\"%s\",\ - DEFAULT_MONITOR_ON=\"%s\"", - q->value(0).toUInt(), - q->value(1).toInt(), - q->value(2).toInt(), - q->value(3).toInt(), - (const char *)q->value(4).toString(), - q->value(5).toInt(), - q->value(6).toInt(), - q->value(7).toInt(), - q->value(8).toInt(), - q->value(9).toInt(), - (const char *)add_name_edit->text(), - (const char *)q->value(10).toString()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - // - // Clone Deck Events - // - sql=QString("select CHANNEL,NUMBER,CART_NUMBER from DECK_EVENTS ")+ - "where STATION_NAME=\""+RDEscapeString(add_exemplar_box->currentText())+ - "\""; - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString("insert into DECK_EVENTS set ")+ - "STATION_NAME=\""+RDEscapeString(add_name_edit->text())+"\","+ - 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().sprintf("select SEGUE_LENGTH,\ - TRANS_LENGTH,OP_MODE,START_MODE,PIE_COUNT_LENGTH,\ - PIE_COUNT_ENDPOINT,CHECK_TIMESYNC,STATION_PANELS,\ - USER_PANELS,SHOW_AUX_1,SHOW_AUX_2,CLEAR_FILTER,\ - DEFAULT_TRANS_TYPE,BAR_ACTION,FLASH_PANEL,\ - PAUSE_ENABLED,UDP_ADDR0,UDP_PORT0,UDP_STRING0,\ - UDP_ADDR1,UDP_PORT1,UDP_STRING1,UDP_ADDR2,\ - UDP_PORT2,UDP_STRING2,DEFAULT_SERVICE,\ - LOG_RML0,LOG_RML1,LOG_RML2,\ - BUTTON_LABEL_TEMPLATE,EXIT_PASSWORD from RDAIRPLAY \ - where (STATION=\"%s\")", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - if(q->first()) { - sql=QString().sprintf("insert into RDAIRPLAY set\ - SEGUE_LENGTH=%d,TRANS_LENGTH=%d,OP_MODE=%d,\ - START_MODE=%d,PIE_COUNT_LENGTH=%d,\ - PIE_COUNT_ENDPOINT=%d,CHECK_TIMESYNC=\"%s\",\ - STATION_PANELS=%d,USER_PANELS=%d,\ - SHOW_AUX_1=\"%s\",SHOW_AUX_2=\"%s\",\ - CLEAR_FILTER=\"%s\",DEFAULT_TRANS_TYPE=%u,\ - BAR_ACTION=%u,FLASH_PANEL=\"%s\",\ - PAUSE_ENABLED=\"%s\",\ - UDP_ADDR0=\"%s\",UDP_PORT0=%u,UDP_STRING0=\"%s\",\ - UDP_ADDR1=\"%s\",UDP_PORT1=%u,UDP_STRING1=\"%s\",\ - UDP_ADDR2=\"%s\",UDP_PORT2=%u,UDP_STRING2=\"%s\",\ - STATION=\"%s\",DEFAULT_SERVICE=\"%s\",\ - LOG_RML0=\"%s\",\ - LOG_RML1=\"%s\",\ - LOG_RML2=\"%s\",\ - BUTTON_LABEL_TEMPLATE=\"%s\",\ - EXIT_PASSWORD=\"%s\"", - q->value(0).toInt(), - q->value(1).toInt(), - q->value(2).toInt(), - q->value(3).toInt(), - q->value(4).toInt(), - q->value(5).toInt(), - (const char *)q->value(6).toString(), - q->value(7).toInt(), - q->value(8).toInt(), - (const char *)q->value(9).toString(), - (const char *)q->value(10).toString(), - (const char *)q->value(11).toString(), - q->value(12).toUInt(), - q->value(13).toUInt(), - (const char *)q->value(14).toString(), - (const char *)q->value(15).toString(), - (const char *)q->value(16).toString(), - q->value(17).toUInt(), - (const char *)q->value(18).toString(), - (const char *)q->value(19).toString(), - q->value(20).toUInt(), - (const char *)q->value(21).toString(), - (const char *)q->value(22).toString(), - q->value(23).toUInt(), - (const char *)q->value(24).toString(), - (const char *)add_name_edit->text(), - (const char *)q->value(25).toString(), - (const char *)q->value(26).toString(), - (const char *)q->value(27).toString(), - (const char *)q->value(28).toString(), - (const char *)q->value(29).toString(), - (const char *)q->value(30).toString()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - sql=QString("select INSTANCE,CARD,PORT,START_RML,STOP_RML,")+ - "START_GPI_MATRIX,"+ - "START_GPI_LINE,START_GPO_MATRIX,START_GPO_LINE,STOP_GPI_MATRIX,"+ - "STOP_GPI_LINE,STOP_GPO_MATRIX,STOP_GPO_LINE from RDAIRPLAY_CHANNELS "+ - "where STATION_NAME=\""+RDEscapeString(add_exemplar_box->currentText())+ - "\""; - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString("insert into RDAIRPLAY_CHANNELS set ")+ - "STATION_NAME=\""+RDEscapeString(add_name_edit->text())+"\","+ - 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; - - // - // RDAirPlay Log Modes - // - sql=QString("select ")+ - "MACHINE,"+ - "START_MODE,"+ - "OP_MODE from LOG_MODES where "+ - "STATION_NAME=\""+RDEscapeString(add_exemplar_box->currentText())+"\""; - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into LOG_MODES set ")+ - "STATION_NAME=\""+RDEscapeString(add_name_edit->text())+"\","+ - 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().sprintf("select STATION_PANELS,\ - USER_PANELS,CLEAR_FILTER,\ - FLASH_PANEL,\ - DEFAULT_SERVICE,\ - BUTTON_LABEL_TEMPLATE from RDPANEL \ - where (STATION=\"%s\")", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - if(q->first()) { - sql=QString().sprintf("insert into RDPANEL set\ - STATION_PANELS=%d,\ - USER_PANELS=%d,\ - CLEAR_FILTER=\"%s\",\ - FLASH_PANEL=\"%s\",\ - STATION=\"%s\",\ - DEFAULT_SERVICE=\"%s\",\ - BUTTON_LABEL_TEMPLATE=\"%s\"", - q->value(0).toInt(), - q->value(1).toInt(), - (const char *)q->value(2).toString(), - (const char *)q->value(3).toString(), - (const char *)add_name_edit->text(), - (const char *)q->value(4).toString(), - (const char *)q->value(5).toString()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - sql=QString("select INSTANCE,CARD,PORT,START_RML,STOP_RML,")+ - "START_GPI_MATRIX,"+ - "START_GPI_LINE,START_GPO_MATRIX,START_GPO_LINE,STOP_GPI_MATRIX,"+ - "STOP_GPI_LINE,STOP_GPO_MATRIX,STOP_GPO_LINE from RDPANEL_CHANNELS "+ - "where STATION_NAME=\""+RDEscapeString(add_exemplar_box->currentText())+ - "\""; - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString("insert into RDPANEL_CHANNELS set ")+ - "STATION_NAME=\""+RDEscapeString(add_name_edit->text())+"\","+ - 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 Audio Port Settings - // - sql="select CARD_NUMBER,CLOCK_SOURCE,"; - for(int i=0;icurrentText()); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into AUDIO_PORTS set\ - CARD_NUMBER=%u,CLOCK_SOURCE=%d,\ - STATION_NAME=\"%s\",", - q->value(0).toUInt(), - q->value(1).toInt(), - (const char *)add_name_edit->text()); - for(int i=0;ivalue(2+3*i).toInt(), - i,q->value(3+3*i).toInt(), - i,q->value(4+3*i).toInt(), - i,q->value(5+3*i).toInt()); - } - sql=sql.left(sql.length()-1); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - // - // Clone the Serial Setups - // - sql=QString().sprintf("select PORT_ID,ACTIVE,PORT,BAUD_RATE,DATA_BITS,\ - STOP_BITS,PARITY,TERMINATION from TTYS\ - where STATION_NAME=\"%s\"", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into TTYS set\ - PORT_ID=%u,ACTIVE=\"%s\",PORT=\"%s\",\ - BAUD_RATE=%d,DATA_BITS=%d,STOP_BITS=%d,\ - PARITY=%d,TERMINATION=%d,STATION_NAME=\"%s\"", - q->value(0).toUInt(), - (const char *)q->value(1).toString(), - (const char *)q->value(2).toString(), - q->value(3).toInt(), - q->value(4).toInt(), - q->value(5).toInt(), - q->value(6).toInt(), - q->value(7).toInt(), - (const char *)add_name_edit->text()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - // - // Clone Matrices - // - sql=QString().sprintf("select NAME,MATRIX,TYPE,PORT_TYPE,CARD,PORT,\ - IP_ADDRESS,IP_PORT,USERNAME,PASSWORD,GPIO_DEVICE,\ - INPUTS,OUTPUTS,GPIS,GPOS,DISPLAYS,FADERS,\ - PORT_TYPE_2,PORT_2,IP_ADDRESS_2,IP_PORT_2,\ - USERNAME_2,PASSWORD_2 \ - from MATRICES where STATION_NAME=\"%s\"", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into MATRICES set\ - NAME=\"%s\",MATRIX=%d,TYPE=%d,PORT_TYPE=%d,\ - CARD=%d,PORT=%d,IP_ADDRESS=\"%s\",IP_PORT=%d,\ - USERNAME=\"%s\",PASSWORD=\"%s\",\ - GPIO_DEVICE=\"%s\",INPUTS=%d,OUTPUTS=%d,GPIS=%d,\ - GPOS=%d,DISPLAYS=%d,STATION_NAME=\"%s\",\ - FADERS=%d,PORT_TYPE_2=%d,PORT_2=%d,\ - IP_ADDRESS_2=\"%s\",IP_PORT_2=%d,\ - USERNAME_2=\"%s\",PASSWORD_2=\"%s\"", - (const char *)q->value(0).toString(), - q->value(1).toInt(), - q->value(2).toInt(), - q->value(3).toInt(), - q->value(4).toInt(), - q->value(5).toInt(), - (const char *)q->value(6).toString(), - q->value(7).toInt(), - (const char *)q->value(8).toString(), - (const char *)q->value(9).toString(), - (const char *)q->value(10).toString(), - q->value(11).toInt(), - q->value(12).toInt(), - q->value(13).toInt(), - q->value(14).toInt(), - q->value(15).toInt(), - (const char *)add_name_edit->text(), - q->value(16).toInt(), - q->value(17).toInt(), - q->value(18).toInt(), - (const char *)q->value(19).toString(), - q->value(20).toInt(), - (const char *)q->value(21).toString(), - (const char *)q->value(22).toString()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - // - // Clone Matrix Inputs - // - sql=QString().sprintf("select MATRIX,NUMBER,NAME,FEED_NAME,CHANNEL_MODE,\ - ENGINE_NUM,DEVICE_NUM from INPUTS\ - where STATION_NAME=\"%s\"", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into INPUTS set\ - MATRIX=%d,NUMBER=%d,NAME=\"%s\",FEED_NAME=\"%s\",\ - CHANNEL_MODE=%d,ENGINE_NUM=%d,DEVICE_NUM=%d,\ - STATION_NAME=\"%s\"", - q->value(0).toInt(), - q->value(1).toInt(), - (const char *)q->value(2).toString(), - (const char *)q->value(3).toString(), - q->value(4).toInt(), - q->value(5).toInt(), - q->value(6).toInt(), - (const char *)add_name_edit->text()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - // - // Clone Matrix Outputs - // - sql=QString().sprintf("select MATRIX,NUMBER,NAME,\ - ENGINE_NUM,DEVICE_NUM from OUTPUTS\ - where STATION_NAME=\"%s\"", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into OUTPUTS set\ - MATRIX=%d,NUMBER=%d,NAME=\"%s\",\ - ENGINE_NUM=%d,DEVICE_NUM=%d,\ - STATION_NAME=\"%s\"", - q->value(0).toInt(), - q->value(1).toInt(), - (const char *)q->value(2).toString(), - q->value(3).toInt(), - q->value(4).toInt(), - (const char *)add_name_edit->text()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - // - // Clone GPIs - // - sql=QString().sprintf("select MATRIX,NUMBER,MACRO_CART from GPIS\ - where STATION_NAME=\"%s\"", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into GPIS set\ - MATRIX=%d,NUMBER=%d,MACRO_CART=%d,\ - STATION_NAME=\"%s\"", - q->value(0).toInt(), - q->value(1).toInt(), - q->value(2).toInt(), - (const char *)add_name_edit->text()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - // - // Close vGuest Settings - // - sql=QString().sprintf("select MATRIX_NUM,VGUEST_TYPE,NUMBER,ENGINE_NUM,\ - DEVICE_NUM,SURFACE_NUM,RELAY_NUM,BUSS_NUM\ - from VGUEST_RESOURCES where STATION_NAME=\"%s\"", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into VGUEST_RESOURCES set\ - MATRIX_NUM=%d,VGUEST_TYPE=%d,NUMBER=%d,\ - ENGINE_NUM=%d,DEVICE_NUM=%d,SURFACE_NUM=%d,\ - RELAY_NUM=%d,BUSS_NUM=%d,STATION_NAME=\"%s\"", - q->value(0).toInt(), - q->value(1).toInt(), - q->value(2).toInt(), - q->value(3).toInt(), - q->value(4).toInt(), - q->value(5).toInt(), - q->value(6).toInt(), - q->value(7).toInt(), - (const char *)add_name_edit->text()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - // - // Clone Host Variables - // - sql=QString().sprintf("select NAME,VARVALUE,REMARK from HOSTVARS\ - where STATION_NAME=\"%s\"", - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into HOSTVARS set\ - NAME=\"%s\",VARVALUE=\"%s\",REMARK=\"%s\",\ - STATION_NAME=\"%s\"", - (const char *)q->value(0).toString(), - (const char *)q->value(1).toString(), - (const char *)q->value(2).toString(), - (const char *)add_name_edit->text()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - // - // Clone System Panels - // - sql=QString().sprintf("select PANEL_NO,ROW_NO,COLUMN_NO,LABEL,CART,\ - DEFAULT_COLOR from PANELS where \ - (TYPE=%d && OWNER=\"%s\")", - RDAirPlayConf::StationPanel, - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into PANELS set PANEL_NO=%d,ROW_NO=%d,\ - COLUMN_NO=%d,LABEL=\"%s\",CART=%u,\ - DEFAULT_COLOR=\"%s\",TYPE=%d,OWNER=\"%s\"", - q->value(0).toInt(), - q->value(1).toInt(), - q->value(2).toInt(), - (const char *)q->value(3).toString(), - q->value(4).toUInt(), - (const char *)q->value(5).toString(), - RDAirPlayConf::StationPanel, - (const char *)add_name_edit->text()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - sql=QString().sprintf("select PANEL_NO,ROW_NO,COLUMN_NO,LABEL,CART,\ - DEFAULT_COLOR from EXTENDED_PANELS where \ - (TYPE=%d && OWNER=\"%s\")", - RDAirPlayConf::StationPanel, - (const char *)add_exemplar_box->currentText()); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into EXTENDED_PANELS set PANEL_NO=%d,\ - ROW_NO=%d,COLUMN_NO=%d,LABEL=\"%s\",CART=%u,\ - DEFAULT_COLOR=\"%s\",TYPE=%d,OWNER=\"%s\"", - q->value(0).toInt(), - q->value(1).toInt(), - q->value(2).toInt(), - (const char *)q->value(3).toString(), - q->value(4).toUInt(), - (const char *)q->value(5).toString(), - RDAirPlayConf::StationPanel, - (const char *)add_name_edit->text()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - - // - // Clone Encoders - // - sql=QString().sprintf("select ID,NAME,COMMAND_LINE from ENCODERS \ - where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(add_exemplar_box-> - currentText())); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString(). - sprintf("insert into ENCODERS set NAME=\"%s\",\ - COMMAND_LINE=\"%s\",STATION_NAME=\"%s\"", - (const char *)RDEscapeString(q->value(1).toString()), - (const char *)RDEscapeString(q->value(2).toString()), - (const char *)RDEscapeString(add_name_edit->text())); - q1=new RDSqlQuery(sql); - delete q1; - sql=QString(). - sprintf("select ID from ENCODERS \ - where (NAME=\"%s\")&&(STATION_NAME=\"%s\")", - (const char *)RDEscapeString(q->value(1).toString()), - (const char *)RDEscapeString(add_name_edit->text())); - q1=new RDSqlQuery(sql); - if(q1->first()) { - CloneEncoderValues("CHANNELS",q->value(0).toInt(),q1->value(0).toInt()); - CloneEncoderValues("SAMPLERATES",q->value(0).toInt(), - q1->value(0).toInt()); - CloneEncoderValues("BITRATES",q->value(0).toInt(),q1->value(0).toInt()); - } - delete q1; - } - delete q; - - // - // Clone Hotkeys - // - sql=QString().sprintf("select MODULE_NAME,KEY_ID,KEY_VALUE,KEY_LABEL\ - from RDHOTKEYS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(add_exemplar_box->currentText())); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("insert into RDHOTKEYS set \ - MODULE_NAME=\"%s\",\ - KEY_ID=%d,\ - KEY_VALUE=\"%s\",\ - KEY_LABEL=\"%s\",\ - STATION_NAME=\"%s\"", - (const char *)RDEscapeString(q->value(0). - toString()), - q->value(1).toInt(), - (const char *)RDEscapeString(q->value(2). - toString()), - (const char *)RDEscapeString(q->value(3). - toString()), - (const char *)RDEscapeString(add_name_edit-> - text())); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; + else { + ok=RDStation::create(add_name_edit->text(),&err_msg,add_exemplar_box->currentText()); } + if(!ok) { + QMessageBox::warning(this,"RDAdmin - "+tr("Error"), + tr("Unable to create host!")+"\n"+err_msg); + return; + } + *add_name=add_name_edit->text(); EditStation *station=new EditStation(add_name_edit->text(),this); diff --git a/rdadmin/list_stations.cpp b/rdadmin/list_stations.cpp index 4b655f8c..1954982e 100644 --- a/rdadmin/list_stations.cpp +++ b/rdadmin/list_stations.cpp @@ -133,7 +133,7 @@ void ListStations::addData() AddStation *add_station=new AddStation(&stationname,this); if(add_station->exec()<0) { - DeleteStation(stationname); + RDStation::remove(stationname); delete add_station; return; } @@ -164,7 +164,7 @@ void ListStations::deleteData() (const char *)list_box->currentText()), QMessageBox::Yes,QMessageBox::No)== QMessageBox::Yes) { - DeleteStation(list_box->currentText()); + RDStation::remove(list_box->currentText()); list_box->removeItem(list_box->currentItem()); if(list_box->currentItem()>=0) { list_box->setSelected(list_box->currentItem(),true); @@ -200,138 +200,3 @@ void ListStations::RefreshList(QString stationname) } delete q; } - - -void ListStations::DeleteStation(QString name) -{ - QString sql; - RDSqlQuery *q; - RDSqlQuery *q1; - - sql=QString().sprintf("delete from DECKS where STATION_NAME=\"%s\"", - (const char *)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().sprintf("delete from TTYS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from AUDIO_PORTS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from RECORDINGS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql= - QString().sprintf("delete from SERVICE_PERMS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from RDAIRPLAY where STATION=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from RDAIRPLAY_CHANNELS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from RDPANEL where STATION=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from RDPANEL_CHANNELS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from RDLOGEDIT where STATION=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from MATRICES where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from INPUTS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from OUTPUTS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from VGUEST_RESOURCES where\ - STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from RDLIBRARY where STATION=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from GPIS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from HOSTVARS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from STATIONS where NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql= - QString().sprintf("delete from REPORT_STATIONS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from PANELS where (TYPE=%d && OWNER=\"%s\")", - RDAirPlayConf::StationPanel, - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString(). - sprintf("delete from EXTENDED_PANELS where (TYPE=%d && OWNER=\"%s\")", - RDAirPlayConf::StationPanel,(const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - - sql=QString().sprintf("select ID from ENCODERS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - while(q->next()) { - sql=QString().sprintf("delete from ENCODER_CHANNELS where ENCODER_ID=%d", - q->value(0).toInt()); - q1=new RDSqlQuery(sql); - delete q1; - sql=QString().sprintf("delete from ENCODER_SAMPLERATES where ENCODER_ID=%d", - q->value(0).toInt()); - q1=new RDSqlQuery(sql); - delete q1; - sql=QString().sprintf("delete from ENCODER_BITRATES where ENCODER_ID=%d", - q->value(0).toInt()); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - sql=QString().sprintf("delete from ENCODERS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; - sql=QString().sprintf("delete from RDHOTKEYS where STATION_NAME=\"%s\"", - (const char *)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; -} - diff --git a/rdadmin/list_stations.h b/rdadmin/list_stations.h index 94aec1f3..dbbff499 100644 --- a/rdadmin/list_stations.h +++ b/rdadmin/list_stations.h @@ -46,7 +46,6 @@ class ListStations : public QDialog private: void RefreshList(QString stationname=""); - void DeleteStation(QString name); QListBox *list_box; }; diff --git a/rdadmin/rdadmin_cs.ts b/rdadmin/rdadmin_cs.ts index 5f57c587..090e824c 100644 --- a/rdadmin/rdadmin_cs.ts +++ b/rdadmin/rdadmin_cs.ts @@ -532,11 +532,19 @@ a záloha původní databáze uložena v Host Exists - Server existuje + Server existuje Host Already Exists! - Server již existuje! + Server již existuje! + + + Error + + + + Unable to create host! + diff --git a/rdadmin/rdadmin_de.ts b/rdadmin/rdadmin_de.ts index 196684bc..3d8a17bb 100644 --- a/rdadmin/rdadmin_de.ts +++ b/rdadmin/rdadmin_de.ts @@ -498,11 +498,19 @@ worden. Aktuelle Version Host Exists - Host existiert + Host existiert Host Already Exists! - Host existiert bereits! + Host existiert bereits! + + + Error + + + + Unable to create host! + diff --git a/rdadmin/rdadmin_es.ts b/rdadmin/rdadmin_es.ts index 7ed2a2f0..7052b45d 100644 --- a/rdadmin/rdadmin_es.ts +++ b/rdadmin/rdadmin_es.ts @@ -532,11 +532,19 @@ y un respaldo de la base de datos se guardó en Host Exists - El equipo ya existe + El equipo ya existe Host Already Exists! - ¡El equipo ya existe! + ¡El equipo ya existe! + + + Error + + + + Unable to create host! + diff --git a/rdadmin/rdadmin_fr.ts b/rdadmin/rdadmin_fr.ts index 0a59ee24..a3963ef2 100644 --- a/rdadmin/rdadmin_fr.ts +++ b/rdadmin/rdadmin_fr.ts @@ -314,11 +314,11 @@ - Host Exists + Error - Host Already Exists! + Unable to create host! diff --git a/rdadmin/rdadmin_nb.ts b/rdadmin/rdadmin_nb.ts index 52f73b93..330e3b87 100644 --- a/rdadmin/rdadmin_nb.ts +++ b/rdadmin/rdadmin_nb.ts @@ -480,11 +480,19 @@ oppdatert til versjon Host Exists - Verten eksisterer + Verten eksisterer Host Already Exists! - Verten finst frå før! + Verten finst frå før! + + + Error + + + + Unable to create host! + diff --git a/rdadmin/rdadmin_nn.ts b/rdadmin/rdadmin_nn.ts index 52f73b93..330e3b87 100644 --- a/rdadmin/rdadmin_nn.ts +++ b/rdadmin/rdadmin_nn.ts @@ -480,11 +480,19 @@ oppdatert til versjon Host Exists - Verten eksisterer + Verten eksisterer Host Already Exists! - Verten finst frå før! + Verten finst frå før! + + + Error + + + + Unable to create host! + diff --git a/rdadmin/rdadmin_pt_BR.ts b/rdadmin/rdadmin_pt_BR.ts index c60717ef..5d0bb1a9 100644 --- a/rdadmin/rdadmin_pt_BR.ts +++ b/rdadmin/rdadmin_pt_BR.ts @@ -481,11 +481,19 @@ atualizada para a Versão Host Exists - Cliente existente + Cliente existente Host Already Exists! - Cliente já Existe! + Cliente já Existe! + + + Error + + + + Unable to create host! + diff --git a/rdadmin/test_import.cpp b/rdadmin/test_import.cpp index e9bd213e..288f749f 100644 --- a/rdadmin/test_import.cpp +++ b/rdadmin/test_import.cpp @@ -253,7 +253,8 @@ void TestImport::importData() void TestImport::dateChangedData(const QDate &date) { test_filename_edit-> - setText(RDDateDecode(test_svc->importPath(test_src,RDSvc::Linux),date)); + setText(RDDateDecode(test_svc->importPath(test_src,RDSvc::Linux),date, + test_svc->name())); } diff --git a/rdlogmanager/commandline_ops.cpp b/rdlogmanager/commandline_ops.cpp index 9d162919..b1d4547b 100644 --- a/rdlogmanager/commandline_ops.cpp +++ b/rdlogmanager/commandline_ops.cpp @@ -83,7 +83,7 @@ int RunLogOperation(int argc,char *argv[],const QString &svcname, return 256; } QDate start_date=QDate::currentDate().addDays(1+start_offset); - QString logname=RDDateDecode(svc->nameTemplate(),start_date); + QString logname=RDDateDecode(svc->nameTemplate(),start_date,svc->name()); RDLog *log=new RDLog(logname); // @@ -106,8 +106,10 @@ int RunLogOperation(int argc,char *argv[],const QString &svcname, } delete q; if(!svc->generateLog(start_date, - RDDateDecode(svc->nameTemplate(),start_date), - RDDateDecode(svc->nameTemplate(),start_date.addDays(1)), + RDDateDecode(svc->nameTemplate(),start_date, + svc->name()), + RDDateDecode(svc->nameTemplate(),start_date.addDays(1), + svc->name()), &unused_report)) { fprintf(stderr,"rdlogmanager: unable to generate log\n"); return 256; diff --git a/rdlogmanager/generate_log.cpp b/rdlogmanager/generate_log.cpp index 5b4c6681..776867eb 100644 --- a/rdlogmanager/generate_log.cpp +++ b/rdlogmanager/generate_log.cpp @@ -307,7 +307,8 @@ void GenerateLog::createData() // Generate Log // RDSvc *svc=new RDSvc(gen_service_box->currentText(),this); - QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date()); + QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date(), + svc->name()); RDLog *log=new RDLog(logname); if(log->exists()) { str1=QString(tr("The log for")); @@ -361,9 +362,10 @@ void GenerateLog::createData() connect(svc,SIGNAL(generationProgress(int)), gen_progress_dialog,SLOT(setProgress(int))); svc->generateLog(gen_date_edit->date(), - RDDateDecode(svc->nameTemplate(),gen_date_edit->date()), + RDDateDecode(svc->nameTemplate(),gen_date_edit->date(), + svc->name()), RDDateDecode(svc->nameTemplate(),gen_date_edit->date(). - addDays(1)),&unused_report); + addDays(1),svc->name()),&unused_report); log->updateTracks(); delete log; delete svc; @@ -392,7 +394,8 @@ void GenerateLog::musicData() unsigned tracks=0; RDSvc *svc=new RDSvc(gen_service_box->currentText(),this); - QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date()); + QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date(), + svc->name()); RDLog *log=new RDLog(logname); if(((log->linkState(RDLog::SourceMusic)==RDLog::LinkDone)|| (log->linkState(RDLog::SourceTraffic)==RDLog::LinkDone))) { @@ -443,7 +446,8 @@ void GenerateLog::musicData() void GenerateLog::trafficData() { RDSvc *svc=new RDSvc(gen_service_box->currentText(),this); - QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date()); + QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date(), + svc->name()); RDLog *log=new RDLog(logname); if((log->linkState(RDLog::SourceTraffic)==RDLog::LinkDone)) { QString str1=QString(tr("The log for")); @@ -477,7 +481,8 @@ void GenerateLog::trafficData() void GenerateLog::fileScanData() { RDSvc *svc=new RDSvc(gen_service_box->currentText(),this); - QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date()); + QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date(), + svc->name()); RDLog *log=new RDLog(logname); if(gen_music_enabled) { if(QFile::exists(svc-> @@ -545,7 +550,8 @@ void GenerateLog::resizeEvent(QResizeEvent *e) void GenerateLog::UpdateControls() { RDSvc *svc=new RDSvc(gen_service_box->currentText(),this); - QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date()); + QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date(), + svc->name()); RDLog *log=new RDLog(logname); if(log->exists()) { if(log->linkQuantity(RDLog::SourceMusic)>0) { diff --git a/rdlogmanager/pick_report_dates.cpp b/rdlogmanager/pick_report_dates.cpp index 7094fa82..ebf9bf6f 100644 --- a/rdlogmanager/pick_report_dates.cpp +++ b/rdlogmanager/pick_report_dates.cpp @@ -195,10 +195,10 @@ void PickReportDates::generateData() } #ifdef WIN32 QString filename=RDDateDecode(report->exportPath(RDReport::Windows), - edit_startdate_edit->date()); + edit_startdate_edit->date(),edit_svcname); #else QString filename=RDDateDecode(report->exportPath(RDReport::Linux), - edit_startdate_edit->date()); + edit_startdate_edit->date(),edit_svcname); #endif QFile file(filename); if(file.exists()) {