mirror of
				https://github.com/ElvishArtisan/rivendell.git
				synced 2025-10-31 22:24:02 +01:00 
			
		
		
		
	* Fixed a bug in rddbmgr(8) that caused multiple default records to be created in 'SERVICE_PERMS' when creating a new database.
		
			
				
	
	
		
			2807 lines
		
	
	
		
			85 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			2807 lines
		
	
	
		
			85 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // create.cpp
 | |
| //
 | |
| // Routines for --create for rddbmgr(8)
 | |
| //
 | |
| //   (C) Copyright 2018 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 <netdb.h>
 | |
| #include <unistd.h>
 | |
| #include <sys/stat.h>
 | |
| 
 | |
| #include <rd.h>
 | |
| #include <rdconf.h>
 | |
| #include <rddb.h>
 | |
| #include <rdescape_string.h>
 | |
| #include <rdpaths.h>
 | |
| 
 | |
| #include "rddbmgr.h"
 | |
| 
 | |
| bool MainObject::Create(const QString &station_name,bool gen_audio,
 | |
| 			QString *err_msg) const
 | |
| {
 | |
|   //
 | |
|   // Check that the DB is empty
 | |
|   //
 | |
|   QString sql=QString("show tables");
 | |
|   RDSqlQuery *q=new RDSqlQuery(sql,false);
 | |
|   if(q->first()) {
 | |
|     delete q;
 | |
|     *err_msg=tr("database is not empty, aborting");
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create tables
 | |
|   //
 | |
|   if(!CreateNewDb(err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Initialize
 | |
|   //
 | |
|   return InititalizeNewDb(station_name,gen_audio,err_msg);
 | |
| }
 | |
| 
 | |
| 
 | |
| bool MainObject::CreateNewDb(QString *err_msg) const
 | |
| {
 | |
|   //
 | |
|   // Create a Rivendell DB of schema number 286
 | |
|   //
 | |
|   // Maintainer's Note:
 | |
|   //
 | |
|   // DO NOT alter the schema in this method! Rather, when adding schema
 | |
|   // changes, add the update to the 'UpdateSchema()' [updateschema.cpp]
 | |
|   // and the reversion to the 'RevertSchema()' [revertschema.cpp] methods.
 | |
|   //
 | |
| 
 | |
|   QString sql;
 | |
|   bool ok=false;
 | |
| 
 | |
|   //
 | |
|   // Create USERS table
 | |
|   //
 | |
|   sql=QString("create table if not exists USERS (")+
 | |
|     "LOGIN_NAME char(255) not null primary key,"+
 | |
|     "FULL_NAME char(255),"+
 | |
|     "PHONE_NUMBER char(20),"+
 | |
|     "DESCRIPTION char(255),"+
 | |
|     "PASSWORD char(32),"+
 | |
|     "WEBAPI_AUTH_TIMEOUT int not null default 3600,"+
 | |
|     "ENABLE_WEB enum('N','Y') default 'N',"+
 | |
|     "LOCAL_AUTH enum('N','Y') default 'Y',"+
 | |
|     "PAM_SERVICE char(32) default \"rivendell\","+
 | |
|     "ADMIN_USERS_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "ADMIN_CONFIG_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "CREATE_CARTS_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "DELETE_CARTS_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "MODIFY_CARTS_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "EDIT_AUDIO_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "WEBGET_LOGIN_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "ASSIGN_CART_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "CREATE_LOG_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "DELETE_LOG_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "DELETE_REC_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "PLAYOUT_LOG_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "ARRANGE_LOG_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "MODIFY_TEMPLATE_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "ADDTO_LOG_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "REMOVEFROM_LOG_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "CONFIG_PANELS_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "VOICETRACK_LOG_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "EDIT_CATCHES_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "ADD_PODCAST_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "EDIT_PODCAST_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "DELETE_PODCAST_PRIV enum('N','Y') not null default 'N',"+
 | |
|     "INDEX FULL_NAME_IDX (FULL_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create STATIONS table
 | |
|   //
 | |
|   sql=QString("create table if not exists STATIONS (")+
 | |
|     "NAME char(64) primary key not null,"+
 | |
|     "SHORT_NAME char(64),"+
 | |
|     "DESCRIPTION char(64),"+
 | |
|     "USER_NAME char(255),"+
 | |
|     "DEFAULT_NAME char(255),"+
 | |
|     "IPV4_ADDRESS char(15) default \"127.0.0.2\","+
 | |
|     "HTTP_STATION char(64) default \"localhost\","+
 | |
|     "CAE_STATION char(64) default \"localhost\","+
 | |
|     "TIME_OFFSET int default 0,"+
 | |
|     "BACKUP_DIR char(255),"+
 | |
|     "BACKUP_LIFE int default 0,"+
 | |
|     "BROADCAST_SECURITY int unsigned default 0,"+
 | |
|     "HEARTBEAT_CART int unsigned default 0,"+
 | |
|     "HEARTBEAT_INTERVAL int unsigned default 0,"+
 | |
|     "STARTUP_CART int unsigned default 0,"+
 | |
|     "EDITOR_PATH char(255) default \"\","+
 | |
|     "FILTER_MODE int default 0,"+
 | |
|     "START_JACK enum('N','Y') default 'N',"+
 | |
|     "JACK_SERVER_NAME char(64),"+
 | |
|     "JACK_COMMAND_LINE char(255),"+
 | |
|     "CUE_CARD int default 0,"+
 | |
|     "CUE_PORT int default 0,"+
 | |
|     "CUE_START_CART int unsigned,"+
 | |
|     "CUE_STOP_CART int unsigned,"+
 | |
|     "CARTSLOT_COLUMNS int default 1,"+
 | |
|     "CARTSLOT_ROWS int default 8,"+
 | |
|     "ENABLE_DRAGDROP enum('N','Y') default 'Y',"+
 | |
|     "ENFORCE_PANEL_SETUP enum('N','Y') default 'N',"+
 | |
|     "SYSTEM_MAINT enum('N','Y') default 'Y',"+
 | |
|     "STATION_SCANNED enum('N','Y') default 'N',"+
 | |
|     "HAVE_OGGENC enum('N','Y') default 'N',"+
 | |
|     "HAVE_OGG123 enum('N','Y') default 'N',"+
 | |
|     "HAVE_FLAC enum('N','Y') default 'N',"+
 | |
|     "HAVE_TWOLAME enum('N','Y') default 'N',"+
 | |
|     "HAVE_LAME enum('N','Y') default 'N',"+
 | |
|     "HAVE_MPG321 enum('N','Y') default 'N',"+
 | |
|     "HAVE_MP4_DECODE enum('N','Y') default 'N',"+
 | |
|     "HPI_VERSION char(16),"+
 | |
|     "JACK_VERSION char(16),"+
 | |
|     "ALSA_VERSION char(16),"+
 | |
|     "INDEX DESCRIPTION_IDX (DESCRIPTION),"+
 | |
|     "index IPV4_ADDRESS_IDX (IPV4_ADDRESS))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create CART table
 | |
|   //
 | |
|   sql=QString("create table if not exists CART (")+
 | |
|     "NUMBER int unsigned not null primary key,"+
 | |
|     "TYPE int unsigned not null,"+
 | |
|     "GROUP_NAME char(10) not null,"+
 | |
|     "TITLE char(255),"+
 | |
|     "ARTIST char(255),"+
 | |
|     "ALBUM char(255),"+
 | |
|     "YEAR date,"+
 | |
|     "CONDUCTOR char(64),"+
 | |
|     "LABEL char(64),"+
 | |
|     "CLIENT char(64),"+
 | |
|     "AGENCY char(64),"+
 | |
|     "PUBLISHER char(64),"+
 | |
|     "COMPOSER char(64),"+
 | |
|     "USER_DEFINED char(255),"+
 | |
|     "SONG_ID char(32),"+
 | |
|     "BPM int unsigned default 0,"+
 | |
|     "USAGE_CODE int default 0,"+
 | |
|     "FORCED_LENGTH int unsigned,"+
 | |
|     "AVERAGE_LENGTH int unsigned,"+
 | |
|     "LENGTH_DEVIATION int unsigned default 0,"+
 | |
|     "AVERAGE_SEGUE_LENGTH int unsigned,"+
 | |
|     "AVERAGE_HOOK_LENGTH int unsigned default 0,"+
 | |
|     "CUT_QUANTITY int unsigned,"+
 | |
|     "LAST_CUT_PLAYED int unsigned,"+
 | |
|     "PLAY_ORDER int unsigned,"+
 | |
|     "VALIDITY int unsigned default 2,"+
 | |
|     "START_DATETIME datetime,"+
 | |
|     "END_DATETIME datetime,"+
 | |
|     "ENFORCE_LENGTH enum('N','Y') default 'N',"+
 | |
|     "PRESERVE_PITCH enum('N','Y') default 'N',"+
 | |
|     "USE_WEIGHTING enum('N','Y') default 'Y',"+
 | |
|     "ASYNCRONOUS enum('N','Y') default 'N',"+
 | |
|     "OWNER char(64),"+
 | |
|     "MACROS text,"+
 | |
|     "SCHED_CODES VARCHAR( 255 ) NULL default NULL,"+
 | |
|     "NOTES text,"+
 | |
|     "METADATA_DATETIME datetime,"+
 | |
|     "USE_EVENT_LENGTH enum('N','Y') default 'N',"+
 | |
|     "PENDING_STATION char(64),"+
 | |
|     "PENDING_PID int,"+
 | |
|     "PENDING_DATETIME datetime,"+
 | |
|     "index GROUP_NAME_IDX (GROUP_NAME),"+
 | |
|     "index TITLE_IDX (TITLE),"+
 | |
|     "index ARTIST_IDX (ARTIST),"+
 | |
|     "index ALBUM_IDX (ALBUM),"+
 | |
|     "index CONDUCTOR_IDX (CONDUCTOR),"+
 | |
|     "index LABEL_IDX (LABEL),"+
 | |
|     "index CLIENT_IDX (CLIENT),"+
 | |
|     "index AGENCY_IDX (AGENCY),"+
 | |
|     "index PUBLISHER_IDX (PUBLISHER),"+
 | |
|     "index COMPOSER_IDX (COMPOSER),"+
 | |
|     "index USER_DEFINED_IDX (USER_DEFINED),"+
 | |
|     "index SONG_ID_IDX (SONG_ID),"+
 | |
|     "index OWNER_IDX (OWNER),"+
 | |
|     "index METADATA_DATETIME_IDX (METADATA_DATETIME),"+
 | |
|     "index PENDING_STATION_IDX(PENDING_STATION),"+
 | |
|     "index PENDING_PID_IDX(PENDING_STATION,PENDING_PID),"+
 | |
|     "index PENDING_DATETIME_IDX(PENDING_DATETIME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create CUTS table
 | |
|   //
 | |
|   sql=QString("create table if not exists CUTS (")+
 | |
|     "CUT_NAME char(12) primary key not null,"+
 | |
|     "CART_NUMBER int unsigned not null,"+
 | |
|     "EVERGREEN enum('N','Y') default 'N',"+
 | |
|     "DESCRIPTION char(64),"+
 | |
|     "OUTCUE char(64),"+
 | |
|     "ISRC char(12),"+
 | |
|     "ISCI char(32),"+
 | |
|     "LENGTH int unsigned,"+
 | |
|     "SHA1_HASH char(40),"+
 | |
|     "ORIGIN_DATETIME datetime,"+
 | |
|     "START_DATETIME datetime,"+
 | |
|     "END_DATETIME datetime,"+
 | |
|     "SUN enum('N','Y') default 'Y',"+
 | |
|     "MON enum('N','Y') default 'Y',"+
 | |
|     "TUE enum('N','Y') default 'Y',"+
 | |
|     "WED enum('N','Y') default 'Y',"+
 | |
|     "THU enum('N','Y') default 'Y',"+
 | |
|     "FRI enum('N','Y') default 'Y',"+
 | |
|     "SAT enum('N','Y') default 'Y',"+
 | |
|     "START_DAYPART time,"+
 | |
|     "END_DAYPART time,"+
 | |
|     "ORIGIN_NAME char(64),"+
 | |
|     "ORIGIN_LOGIN_NAME char(255),"+
 | |
|     "SOURCE_HOSTNAME char(255),"+
 | |
|     "WEIGHT int unsigned default 1,"+
 | |
|     "PLAY_ORDER int,"+
 | |
|     "LAST_PLAY_DATETIME datetime,"+
 | |
|     "UPLOAD_DATETIME datetime,"+
 | |
|     "PLAY_COUNTER int unsigned default 0,"+
 | |
|     "LOCAL_COUNTER int unsigned default 0,"+
 | |
|     "VALIDITY int unsigned default 2,"+
 | |
|     "CODING_FORMAT int unsigned,"+
 | |
|     "SAMPLE_RATE int unsigned,"+
 | |
|     "BIT_RATE int unsigned,"+
 | |
|     "CHANNELS int unsigned,"+
 | |
|     "PLAY_GAIN int default 0,"+
 | |
|     "START_POINT int default -1,"+
 | |
|     "END_POINT int default -1,"+
 | |
|     "FADEUP_POINT int default -1,"+
 | |
|     "FADEDOWN_POINT int default -1,"+
 | |
|     "SEGUE_START_POINT int default -1,"+
 | |
|     "SEGUE_END_POINT int default -1,"+
 | |
|     QString().sprintf("SEGUE_GAIN int default %d,",RD_FADE_DEPTH)+
 | |
|     "HOOK_START_POINT int default -1,"+
 | |
|     "HOOK_END_POINT int default -1,"+
 | |
|     "TALK_START_POINT int default -1,"+
 | |
|     "TALK_END_POINT int default -1,"+
 | |
|     "index CART_NUMBER_IDX (CART_NUMBER),"+
 | |
|     "index DESCRIPTION_IDX (DESCRIPTION),"+
 | |
|     "index OUTCUE_IDX (OUTCUE),"+
 | |
|     "index ORIGIN_DATETIME_IDX (ORIGIN_DATETIME),"+
 | |
|     "index START_DATETIME_IDX (START_DATETIME),"+
 | |
|     "index END_DATETIME_IDX (END_DATETIME),"+
 | |
|     "index ISCI_IDX (ISCI),"+
 | |
|     "index ISRC_IDX (ISRC))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create CLIPBOARD table
 | |
|   //
 | |
|   sql=QString("create table if not exists CLIPBOARD (")+
 | |
|     "CUT_NAME char(12) primary key not null,"+
 | |
|     "CART_NUMBER int unsigned not null,"+
 | |
|     "DESCRIPTION char(64),"+
 | |
|     "OUTCUE char(64),"+
 | |
|     "LENGTH int unsigned,"+
 | |
|     "ORIGIN_DATETIME datetime,"+
 | |
|     "ORIGIN_NAME char(64),"+
 | |
|     "WEIGHT int unsigned default 1,"+
 | |
|     "LAST_PLAY_DATETIME datetime,"+
 | |
|     "PLAY_COUNTER int unsigned default 0,"+
 | |
|     "CODING_FORMAT int unsigned,"+
 | |
|     "SAMPLE_RATE int unsigned,"+
 | |
|     "BIT_RATE int unsigned,"+
 | |
|     "CHANNELS int unsigned,"+
 | |
|     "PLAY_GAIN int default 0,"+
 | |
|     "START_POINT int default -1,"+
 | |
|     "END_POINT int default -1,"+
 | |
|     "FADEUP_POINT int default -1,"+
 | |
|     "FADEDOWN_POINT int default -1,"+
 | |
|     "SEGUE_START_POINT int default -1,"+
 | |
|     "SEGUE_END_POINT int default -1,"+
 | |
|     "HOOK_START_POINT int default -1,"+
 | |
|     "HOOK_END_POINT int default -1,"+
 | |
|     "TALK_START_POINT int default -1,"+
 | |
|     "TALK_END_POINT int default -1,"+
 | |
|     "index CART_NUMBER_IDX (CART_NUMBER),"+
 | |
|     "index DESCRIPTION_IDX (DESCRIPTION),"+
 | |
|     "index OUTCUE_IDX (OUTCUE))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create SERVICES table
 | |
|   //
 | |
|   sql=QString("create table if not exists SERVICES (")+
 | |
|     "NAME char(10) not null primary key,"+
 | |
|     "DESCRIPTION char(255),"+
 | |
|     "NAME_TEMPLATE char(255),"+
 | |
|     "DESCRIPTION_TEMPLATE char(255),"+
 | |
|     "PROGRAM_CODE char(255),"+
 | |
|     "CHAIN_LOG enum('N','Y') default 'N',"+
 | |
|     "TRACK_GROUP char(10),"+
 | |
|     "AUTOSPOT_GROUP char(10),"+
 | |
|     "AUTO_REFRESH enum('N','Y') default 'N',"+
 | |
|     "DEFAULT_LOG_SHELFLIFE int default -1,"+
 | |
|     "LOG_SHELFLIFE_ORIGIN int default 0,"+
 | |
|     "ELR_SHELFLIFE int default -1,"+
 | |
|     "TFC_PATH char(255),"+
 | |
|     "TFC_PREIMPORT_CMD text,"+
 | |
|     "TFC_WIN_PATH char(255),"+
 | |
|     "TFC_WIN_PREIMPORT_CMD text,"+
 | |
|     "TFC_IMPORT_TEMPLATE char(64) default \"Rivendell Standard Import\","+
 | |
|     "TFC_LABEL_CART char(32),"+
 | |
|     "TFC_TRACK_CART char(32),"+
 | |
|     "TFC_BREAK_STRING char(64),"+
 | |
|     "TFC_TRACK_STRING char(64),"+
 | |
|     "TFC_CART_OFFSET int,"+
 | |
|     "TFC_CART_LENGTH int,"+
 | |
|     "TFC_TITLE_OFFSET int,"+
 | |
|     "TFC_TITLE_LENGTH int,"+
 | |
|     "TFC_HOURS_OFFSET int,"+
 | |
|     "TFC_HOURS_LENGTH int,"+
 | |
|     "TFC_MINUTES_OFFSET int,"+
 | |
|     "TFC_MINUTES_LENGTH int,"+
 | |
|     "TFC_SECONDS_OFFSET int,"+
 | |
|     "TFC_SECONDS_LENGTH int,"+
 | |
|     "TFC_LEN_HOURS_OFFSET int,"+
 | |
|     "TFC_LEN_HOURS_LENGTH int,"+
 | |
|     "TFC_LEN_MINUTES_OFFSET int,"+
 | |
|     "TFC_LEN_MINUTES_LENGTH int,"+
 | |
|     "TFC_LEN_SECONDS_OFFSET int,"+
 | |
|     "TFC_LEN_SECONDS_LENGTH int,"+
 | |
|     "TFC_DATA_OFFSET int,"+
 | |
|     "TFC_DATA_LENGTH int,"+
 | |
|     "TFC_EVENT_ID_OFFSET int,"+
 | |
|     "TFC_EVENT_ID_LENGTH int,"+
 | |
|     "TFC_ANNC_TYPE_OFFSET int,"+
 | |
|     "TFC_ANNC_TYPE_LENGTH int,"+
 | |
|     "MUS_PATH char(255),"+
 | |
|     "MUS_PREIMPORT_CMD text,"+
 | |
|     "MUS_WIN_PATH char(255),"+
 | |
|     "MUS_WIN_PREIMPORT_CMD text,"+
 | |
|     "MUS_IMPORT_TEMPLATE char(64) default \"Rivendell Standard Import\","+
 | |
|     "MUS_LABEL_CART char(32),"+
 | |
|     "MUS_TRACK_CART char(32),"+
 | |
|     "MUS_BREAK_STRING char(64),"+
 | |
|     "MUS_TRACK_STRING char(64),"+
 | |
|     "MUS_CART_OFFSET int,"+
 | |
|     "MUS_CART_LENGTH int,"+
 | |
|     "MUS_TITLE_OFFSET int,"+
 | |
|     "MUS_TITLE_LENGTH int,"+
 | |
|     "MUS_HOURS_OFFSET int,"+
 | |
|     "MUS_HOURS_LENGTH int,"+
 | |
|     "MUS_MINUTES_OFFSET int,"+
 | |
|     "MUS_MINUTES_LENGTH int,"+
 | |
|     "MUS_SECONDS_OFFSET int,"+
 | |
|     "MUS_SECONDS_LENGTH int,"+
 | |
|     "MUS_LEN_HOURS_OFFSET int,"+
 | |
|     "MUS_LEN_HOURS_LENGTH int,"+
 | |
|     "MUS_LEN_MINUTES_OFFSET int,"+
 | |
|     "MUS_LEN_MINUTES_LENGTH int,"+
 | |
|     "MUS_LEN_SECONDS_OFFSET int,"+
 | |
|     "MUS_LEN_SECONDS_LENGTH int,"+
 | |
|     "MUS_DATA_OFFSET int,"+
 | |
|     "MUS_DATA_LENGTH int,"+
 | |
|     "MUS_EVENT_ID_OFFSET int,"+
 | |
|     "MUS_EVENT_ID_LENGTH int,"+
 | |
|     "MUS_ANNC_TYPE_OFFSET int,"+
 | |
|     "MUS_ANNC_TYPE_LENGTH int)"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create GROUPS table
 | |
|   //
 | |
|   sql=QString("create table if not exists GROUPS (")+
 | |
|     "NAME char(10) not null primary key,"+
 | |
|     "DESCRIPTION char(255),"+
 | |
|     "DEFAULT_CART_TYPE int unsigned default 1,"+
 | |
|     "DEFAULT_LOW_CART int unsigned default 0,"+
 | |
|     "DEFAULT_HIGH_CART int unsigned default 0,"+
 | |
|     "DEFAULT_CUT_LIFE int default -1,"+
 | |
|     "CUT_SHELFLIFE int default -1,"+
 | |
|     "DELETE_EMPTY_CARTS enum('N','Y') default 'N',"+
 | |
|     "DEFAULT_TITLE char(255) default \"Imported from %f.%e\","+
 | |
|     "ENFORCE_CART_RANGE enum('N','Y') default 'N',"+
 | |
|     "REPORT_TFC enum('N','Y') default 'Y',"+
 | |
|     "REPORT_MUS enum('N','Y') default 'Y',"+
 | |
|     "ENABLE_NOW_NEXT enum('N','Y') default 'N',"+
 | |
|     "COLOR char(7),"+
 | |
|     "index IDX_REPORT_TFC (REPORT_TFC),"+
 | |
|     "index IDX_REPORT_MUS (REPORT_MUS))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create AUDIO_PERMS table
 | |
|   //
 | |
|   sql=QString("create table if not exists AUDIO_PERMS (")+
 | |
|     "ID int unsigned AUTO_INCREMENT not null primary key,"+
 | |
|     "GROUP_NAME char(10),"+
 | |
|     "SERVICE_NAME char(10),"+
 | |
|     "index GROUP_IDX (GROUP_NAME),"+
 | |
|     "index SERVICE_IDX (SERVICE_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create RDLIBRARY table
 | |
|   //
 | |
|   sql=QString("create table if not exists RDLIBRARY (")+
 | |
|     "ID int unsigned primary key AUTO_INCREMENT,"+
 | |
|     "STATION char(40) not null,"+
 | |
|     "INSTANCE int unsigned not null,"+
 | |
|     "INPUT_CARD int default 0,"+
 | |
|     "INPUT_PORT int default 0,"+
 | |
|     "INPUT_TYPE enum('A','D') default 'A',"+
 | |
|     "OUTPUT_CARD int default 0,"+
 | |
|     "OUTPUT_PORT int default 0,"+
 | |
|     "VOX_THRESHOLD int default -5000,"+
 | |
|     "TRIM_THRESHOLD int default 0,"+
 | |
|     "DEFAULT_FORMAT int unsigned default 0,"+
 | |
|     "DEFAULT_CHANNELS int unsigned default 2,"+
 | |
|     "DEFAULT_LAYER int unsigned default 0,"+
 | |
|     "DEFAULT_BITRATE int unsigned default 0,"+
 | |
|     "DEFAULT_RECORD_MODE int unsigned default 0,"+
 | |
|     "DEFAULT_TRIM_STATE enum('N','Y') default 'N',"+
 | |
|     "MAXLENGTH int,"+
 | |
|     "TAIL_PREROLL int unsigned default 1500,"+
 | |
|     "RIPPER_DEVICE char(64) default \"/dev/cdrom\","+
 | |
|     "PARANOIA_LEVEL int default 0,"+
 | |
|     "RIPPER_LEVEL int default -1300,"+
 | |
|     "CDDB_SERVER char(64) default \"freedb.freedb.org\","+
 | |
|     "READ_ISRC enum('N','Y') default 'Y',"+
 | |
|     "ENABLE_EDITOR enum('N','Y') default 'N',"+
 | |
|     "SRC_CONVERTER int default 1,"+
 | |
|     "LIMIT_SEARCH int default 1,"+
 | |
|     "SEARCH_LIMITED enum('N','Y') default 'Y',"+
 | |
|     "index STATION_IDX (STATION,INSTANCE))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create TRIGGERS table
 | |
|   //
 | |
|   sql=QString("create table if not exists TRIGGERS (")+
 | |
|     "ID int unsigned AUTO_INCREMENT not null primary key,"+
 | |
|     "CUT_NAME char(12),"+
 | |
|     "TRIGGER_CODE int unsigned,"+
 | |
|     "OFFSET int unsigned,"+
 | |
|     "index CUT_NAME_IDX (CUT_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create TTYS table
 | |
|   //
 | |
|   sql=QString("create table if not exists TTYS (")+
 | |
|     "ID int unsigned not null primary key AUTO_INCREMENT,"+
 | |
|     "PORT_ID int unsigned not null,"+
 | |
|     "ACTIVE enum('N','Y') not null default 'N',"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "PORT char(20),"+
 | |
|     "BAUD_RATE int default 9600,"+
 | |
|     "DATA_BITS int default 8,"+
 | |
|     "STOP_BITS int default 1,"+
 | |
|     "PARITY int default 0,"+
 | |
|     "TERMINATION int default 0,"+
 | |
|     "index STATION_NAME_IDX (STATION_NAME),"+
 | |
|     "index ACTIVE_IDX (ACTIVE),"+
 | |
|     "index PORT_ID_IDX (PORT_ID))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create DECKS table
 | |
|   //
 | |
|   sql=QString("create table if not exists DECKS (")+
 | |
|     "ID int unsigned not null primary key AUTO_INCREMENT,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "CHANNEL int unsigned not null,"+
 | |
|     "CARD_NUMBER int default -1,"+
 | |
|     "STREAM_NUMBER int default -1,"+
 | |
|     "PORT_NUMBER int default -1,"+
 | |
|     "MON_PORT_NUMBER int default -1,"+
 | |
|     "DEFAULT_MONITOR_ON enum('N','Y') default 'N',"+
 | |
|     "PORT_TYPE enum('A','D') default 'A',"+
 | |
|     "DEFAULT_FORMAT int default 0,"+
 | |
|     "DEFAULT_CHANNELS int default 2,"+
 | |
|     "DEFAULT_BITRATE int default 0,"+
 | |
|     "DEFAULT_THRESHOLD int default 0,"+
 | |
|     "SWITCH_STATION char(64),"+
 | |
|     "SWITCH_MATRIX int default -1,"+
 | |
|     "SWITCH_OUTPUT int default -1,"+
 | |
|     "SWITCH_DELAY int default 0,"+
 | |
|     "index STATION_NAME_IDX (STATION_NAME),"+
 | |
|     "index CHANNEL_IDX (CHANNEL))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create RECORDINGS table
 | |
|   //
 | |
|   sql=QString("create table if not exists RECORDINGS (")+
 | |
|     "ID int unsigned not null primary key AUTO_INCREMENT,"+
 | |
|     "IS_ACTIVE enum('N','Y') default 'Y',"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "TYPE int default 0,"+
 | |
|     "CHANNEL int unsigned not null,"+
 | |
|     "CUT_NAME char(12) not null,"+
 | |
|     "SUN enum('N','Y') default 'N',"+
 | |
|     "MON enum('N','Y') default 'N',"+
 | |
|     "TUE enum('N','Y') default 'N',"+
 | |
|     "WED enum('N','Y') default 'N',"+
 | |
|     "THU enum('N','Y') default 'N',"+
 | |
|     "FRI enum('N','Y') default 'N',"+
 | |
|     "SAT enum('N','Y') default 'N',"+
 | |
|     "DESCRIPTION char(64),"+
 | |
|     "START_TYPE int unsigned default 0,"+
 | |
|     "START_TIME time,"+
 | |
|     "START_LENGTH int default 0,"+
 | |
|     "START_MATRIX int default -1,"+
 | |
|     "START_LINE int default -1,"+
 | |
|     "START_OFFSET int default 0,"+
 | |
|     "END_TYPE int default 0,"+
 | |
|     "END_TIME time,"+
 | |
|     "END_LENGTH int default 0,"+
 | |
|     "END_MATRIX int default -1,"+
 | |
|     "END_LINE int default -1,"+
 | |
|     "LENGTH int unsigned,"+
 | |
|     "START_GPI int default -1,"+
 | |
|     "END_GPI int default -1,"+
 | |
|     "ALLOW_MULT_RECS enum('N','Y') default 'N',"+
 | |
|     "MAX_GPI_REC_LENGTH int unsigned default 3600000,"+
 | |
|     "TRIM_THRESHOLD int,"+
 | |
|     "NORMALIZE_LEVEL int default -1300,"+
 | |
|     "STARTDATE_OFFSET int unsigned default 0,"+
 | |
|     "ENDDATE_OFFSET int unsigned default 0,"+
 | |
|     "EVENTDATE_OFFSET int default 0,"+
 | |
|     "FORMAT int default 0,"+
 | |
|     "SAMPRATE int unsigned default 44100,"+
 | |
|     "CHANNELS int default 2,"+
 | |
|     "BITRATE int default 0,"+
 | |
|     "QUALITY int default 0,"+
 | |
|     "MACRO_CART int default -1,"+
 | |
|     "SWITCH_INPUT int default -1,"+
 | |
|     "SWITCH_OUTPUT int default -1,"+
 | |
|     "EXIT_CODE int default 0,"+
 | |
|     "EXIT_TEXT text,"+
 | |
|     "ONE_SHOT enum('N','Y') default 'N',"+
 | |
|     "URL char(255),"+
 | |
|     "URL_USERNAME char(64),"+
 | |
|     "URL_PASSWORD char(64),"+
 | |
|     "ENABLE_METADATA enum('N','Y') default 'N',"+
 | |
|     "FEED_ID int default -1,"+
 | |
|     "index STATION_NAME_IDX (STATION_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create LOGS table
 | |
|   //
 | |
|   sql=QString("create table if not exists LOGS (")+
 | |
|     "NAME char(64) not null primary key,"+
 | |
|     "LOG_EXISTS enum('N','Y') default 'Y',"+
 | |
|     "TYPE int not null default 0,"+
 | |
|     "SERVICE char(10) not null,"+
 | |
|     "DESCRIPTION char(64),"+
 | |
|     "ORIGIN_USER char(255) not null,"+
 | |
|     "ORIGIN_DATETIME datetime not null,"+
 | |
|     "LINK_DATETIME datetime,"+
 | |
|     "MODIFIED_DATETIME datetime not null,"+
 | |
|     "AUTO_REFRESH enum('N','Y') default 'N',"+
 | |
|     "START_DATE date,"+
 | |
|     "END_DATE date,"+
 | |
|     "PURGE_DATE date,"+
 | |
|     "IMPORT_DATE date,"+
 | |
|     "SCHEDULED_TRACKS int unsigned default 0,"+
 | |
|     "COMPLETED_TRACKS int unsigned default 0,"+
 | |
|     "MUSIC_LINKS int default 0,"+
 | |
|     "MUSIC_LINKED enum('N','Y') default 'N',"+
 | |
|     "TRAFFIC_LINKS int default 0,"+
 | |
|     "TRAFFIC_LINKED enum('N','Y') default 'N',"+
 | |
|     "NEXT_ID int default 0,"+
 | |
|     "LOCK_USER_NAME char(255),"+
 | |
|     "LOCK_STATION_NAME char(64),"+
 | |
|     "LOCK_IPV4_ADDRESS char(16),"+
 | |
|     "LOCK_DATETIME datetime,"+
 | |
|     "LOCK_GUID char(82),"+
 | |
|     "index NAME_IDX (NAME,LOG_EXISTS),"+
 | |
|     "index SERVICE_IDX (SERVICE),"+
 | |
|     "index DESCRIPTION_IDX (DESCRIPTION),"+
 | |
|     "index ORIGIN_USER_IDX (ORIGIN_USER),"+
 | |
|     "index START_DATE_IDX (START_DATE),"+
 | |
|     "index END_DATE_IDX (END_DATE),"+
 | |
|     "index TYPE_IDX(TYPE,LOG_EXISTS),"+
 | |
|     "index LOCK_GUID_IDX(LOCK_GUID))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create VERSION table
 | |
|   //
 | |
|   sql=QString("create table if not exists VERSION (")+
 | |
|     "DB int not null primary key,"+
 | |
|     "LAST_MAINT_DATETIME datetime default \"1970-01-01 00:00:00\","+
 | |
|     "LAST_ISCI_XREFERENCE datetime default \"1970-01-01 00:00:00\")"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create RDAIRPLAY Table
 | |
|   //
 | |
|   sql=QString("create table if not exists RDAIRPLAY (")+
 | |
|     "ID int not null primary key auto_increment,"+
 | |
|     "STATION char(40) not null,"+
 | |
|     "SEGUE_LENGTH int default 250,"+
 | |
|     "TRANS_LENGTH int default 50,"+
 | |
|     "LOG_MODE_STYLE int default 0,"+
 | |
|     "PIE_COUNT_LENGTH int default 15000,"+
 | |
|     "PIE_COUNT_ENDPOINT int default 0,"+
 | |
|     "CHECK_TIMESYNC enum('N','Y') default 'N',"+
 | |
|     "STATION_PANELS int default 3,"+
 | |
|     "USER_PANELS int default 3,"+
 | |
|     "SHOW_AUX_1 enum('N','Y') default 'Y',"+
 | |
|     "SHOW_AUX_2 enum('N','Y') default 'Y',"+
 | |
|     "CLEAR_FILTER enum('N','Y') default 'N',"+
 | |
|     "DEFAULT_TRANS_TYPE int default 0,"+
 | |
|     "BAR_ACTION int unsigned default 0,"+
 | |
|     "FLASH_PANEL enum('N','Y') default 'N',"+
 | |
|     "PANEL_PAUSE_ENABLED enum('N','Y') default 'N',"+
 | |
|     "BUTTON_LABEL_TEMPLATE char(32) default '%t',"+
 | |
|     "PAUSE_ENABLED enum('N','Y'),"+
 | |
|     "DEFAULT_SERVICE char(10),"+
 | |
|     "HOUR_SELECTOR_ENABLED enum('N','Y') default 'N',"+
 | |
|     "TITLE_TEMPLATE char(64) default '%t',"+
 | |
|     "ARTIST_TEMPLATE char(64) default '%a',"+
 | |
|     "OUTCUE_TEMPLATE char(64) default '%o',"+
 | |
|     "DESCRIPTION_TEMPLATE char(64) default '%i',"+
 | |
|     "EXIT_CODE int default 0,"+
 | |
|     "VIRTUAL_EXIT_CODE int default 0,"+
 | |
|     "EXIT_PASSWORD char(41) default \"\","+
 | |
|     "SKIN_PATH char(255) default \""+
 | |
|     RDEscapeString(RD_DEFAULT_RDAIRPLAY_SKIN)+"\","+
 | |
|     "SHOW_COUNTERS enum('N','Y') default 'N',"+
 | |
|     "AUDITION_PREROLL int default 10000,"+
 | |
|     "index STATION_IDX (STATION))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create PANELS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists PANELS (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "TYPE int not null,"+
 | |
|     "OWNER char(64) not null,"+
 | |
|     "PANEL_NO int not null,"+
 | |
|     "ROW_NO int not null,"+
 | |
|     "COLUMN_NO int not null,"+
 | |
|     "LABEL char(64),"+
 | |
|     "CART int,"+
 | |
|     "DEFAULT_COLOR char(7),"+
 | |
|     "index LOAD_IDX (TYPE,OWNER,PANEL_NO),"+
 | |
|     "index SAVE_IDX (TYPE,OWNER,PANEL_NO,ROW_NO,COLUMN_NO))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create MATRICES Table
 | |
|   //
 | |
|   sql=QString("create table if not exists MATRICES (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "NAME char(64),"+
 | |
|     "MATRIX int not null,"+
 | |
|     "TYPE int not null,"+
 | |
|     "LAYER int default 86,"+
 | |
|     "PORT_TYPE int default 0,"+
 | |
|     "PORT_TYPE_2 int default 0,"+
 | |
|     "CARD int default -1,"+
 | |
|     "PORT int not null default 0,"+
 | |
|     "PORT_2 int not null default 0,"+
 | |
|     "IP_ADDRESS char(16),"+
 | |
|     "IP_ADDRESS_2 char(16),"+
 | |
|     "IP_PORT int,"+
 | |
|     "IP_PORT_2 int,"+
 | |
|     "USERNAME char(32),"+
 | |
|     "USERNAME_2 char(32),"+
 | |
|     "PASSWORD char(32),"+
 | |
|     "PASSWORD_2 char(32),"+
 | |
|     "START_CART int unsigned,"+
 | |
|     "STOP_CART int unsigned,"+
 | |
|     "START_CART_2 int unsigned,"+
 | |
|     "STOP_CART_2 int unsigned,"+
 | |
|     "GPIO_DEVICE char(255),"+
 | |
|     "INPUTS int not null default 0,"+
 | |
|     "OUTPUTS int not null default 0,"+
 | |
|     "GPIS int not null default 0,"+
 | |
|     "GPOS int not null default 0,"+
 | |
|     "FADERS int default 0,"+
 | |
|     "DISPLAYS int default 0,"+
 | |
|     "index MATRIX_IDX (STATION_NAME,MATRIX))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create INPUTS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists INPUTS (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "MATRIX int not null,"+
 | |
|     "NUMBER int not null,"+
 | |
|     "NAME char(64),"+
 | |
|     "FEED_NAME char(8),"+
 | |
|     "CHANNEL_MODE int,"+
 | |
|     "ENGINE_NUM int default -1,"+
 | |
|     "DEVICE_NUM int default -1,"+
 | |
|     "NODE_HOSTNAME char(255),"+
 | |
|     "NODE_TCP_PORT int,"+
 | |
|     "NODE_SLOT int,"+
 | |
|     "index MATRIX_IDX (STATION_NAME,MATRIX,NUMBER),"+
 | |
|     "index NODE_IDX (STATION_NAME,MATRIX,NUMBER,NODE_HOSTNAME,NODE_TCP_PORT))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create OUTPUTS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists OUTPUTS (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "MATRIX int not null,"+
 | |
|     "NUMBER int not null,"+
 | |
|     "NAME char(64),"+
 | |
|     "ENGINE_NUM int default -1,"+
 | |
|     "DEVICE_NUM int default -1,"+
 | |
|     "NODE_HOSTNAME char(255),"+
 | |
|     "NODE_TCP_PORT int,"+
 | |
|     "NODE_SLOT int,"+
 | |
|     "index MATRIX_IDX (STATION_NAME,MATRIX,NUMBER),"+
 | |
|     "index NODE_IDX (STATION_NAME,MATRIX,NUMBER,NODE_HOSTNAME,NODE_TCP_PORT))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create GPIS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists GPIS (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "MATRIX int not null,"+
 | |
|     "NUMBER int not null,"+
 | |
|     "MACRO_CART int default 0,"+
 | |
|     "OFF_MACRO_CART int default 0,"+
 | |
|     "index MATRIX_IDX (STATION_NAME,MATRIX,NUMBER))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create EVENTS table
 | |
|   //
 | |
|   sql=QString("create table if not exists EVENTS (")+
 | |
|     "NAME char(64) not null primary key,"+
 | |
|     "PROPERTIES char(64),"+
 | |
|     "DISPLAY_TEXT char(64),"+
 | |
|     "NOTE_TEXT char(255),"+
 | |
|     "PREPOSITION int default -1,"+
 | |
|     "TIME_TYPE int default 0,"+
 | |
|     "GRACE_TIME int default 0,"+
 | |
|     "POST_POINT enum('N','Y') default 'N',"+
 | |
|     "USE_AUTOFILL enum('N','Y') default 'N',"+
 | |
|     "AUTOFILL_SLOP int default -1,"+
 | |
|     "USE_TIMESCALE enum('N','Y') default 'N',"+
 | |
|     "IMPORT_SOURCE int default 0,"+
 | |
|     "START_SLOP int default 0,"+
 | |
|     "END_SLOP int default 0,"+
 | |
|     "FIRST_TRANS_TYPE int default 0,"+
 | |
|     "DEFAULT_TRANS_TYPE int default 0,"+
 | |
|     "COLOR char(7),"+
 | |
|     "SCHED_GROUP VARCHAR(10),"+
 | |
|     "TITLE_SEP INT(10) unsigned,"+
 | |
|     "HAVE_CODE VARCHAR(10),"+
 | |
|     "HAVE_CODE2 VARCHAR(10),"+
 | |
|     "HOR_SEP INT(10) unsigned,"+
 | |
|     "HOR_DIST INT(10) unsigned,"+
 | |
|     "NESTED_EVENT char(64),"+
 | |
|     "REMARKS char(255))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create CLOCKS table
 | |
|   //
 | |
|   sql=QString("create table if not exists CLOCKS (")+
 | |
|     "NAME char(64) not null primary key,"+
 | |
|     "SHORT_NAME char(8),"+
 | |
|     "ARTISTSEP int(10) unsigned,"+
 | |
|     "COLOR char(7),"+
 | |
|     "REMARKS char(255))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create AUTOFILLS table
 | |
|   //
 | |
|   sql=QString("create table if not exists AUTOFILLS (")+
 | |
|     "ID int not null primary key auto_increment,"+
 | |
|     "SERVICE char(10),"+
 | |
|     "CART_NUMBER int unsigned,"+
 | |
|     "index SERVICE_IDX (SERVICE))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create HOSTVARS table
 | |
|   //
 | |
|   sql=QString("create table if not exists HOSTVARS (")+
 | |
|     "ID int not null primary key auto_increment,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "NAME char(32) not null,"+
 | |
|     "VARVALUE char(255),"+
 | |
|     "REMARK char(255),"+
 | |
|     "index NAME_IDX (STATION_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create SERVICE_PERMS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists SERVICE_PERMS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64),"+
 | |
|     "SERVICE_NAME char(10),"+
 | |
|     "index STATION_IDX (STATION_NAME),"+
 | |
|     "index SERVICE_IDX (SERVICE_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create REPORTS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists REPORTS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "NAME char(64) not null unique,"+
 | |
|     "DESCRIPTION char(64),"+
 | |
|     "EXPORT_FILTER int,"+
 | |
|     "EXPORT_PATH char(255),"+
 | |
|     "POST_EXPORT_CMD text,"+
 | |
|     "WIN_EXPORT_PATH char(255),"+
 | |
|     "WIN_POST_EXPORT_CMD text,"+
 | |
|     "EXPORT_TFC enum('N','Y') default 'N',"+
 | |
|     "FORCE_TFC enum('N','Y') default 'N',"+
 | |
|     "EXPORT_MUS enum('N','Y') default 'N',"+
 | |
|     "FORCE_MUS enum('N','Y') default 'N',"+
 | |
|     "EXPORT_GEN enum('N','Y') default 'N',"+
 | |
|     "STATION_ID char(16),"+
 | |
|     "CART_DIGITS int unsigned default 6,"+
 | |
|     "USE_LEADING_ZEROS enum('N','Y') default 'N',"+
 | |
|     "LINES_PER_PAGE int default 66,"+
 | |
|     "SERVICE_NAME char(64),"+
 | |
|     "STATION_TYPE int default 0,"+
 | |
|     "STATION_FORMAT char(64),"+
 | |
|     "FILTER_ONAIR_FLAG enum('N','Y') default 'N',"+
 | |
|     "FILTER_GROUPS enum('N','Y') default 'N',"+
 | |
|     "START_TIME time,"+
 | |
|     "END_TIME time,"+
 | |
|     "index IDX_NAME (NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create REPORT_SERVICES Table
 | |
|   //
 | |
|   sql=QString("create table if not exists REPORT_SERVICES (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "REPORT_NAME char(64) not null,"+
 | |
|     "SERVICE_NAME char(10),"+
 | |
|     "index IDX_REPORT_NAME (REPORT_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create REPORT_STATIONS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists REPORT_STATIONS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "REPORT_NAME char(64) not null,"+
 | |
|     "STATION_NAME char(64),"+
 | |
|     "index IDX_REPORT_NAME (REPORT_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create REPORT_GROUPS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists REPORT_GROUPS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "REPORT_NAME char(64) not null,"+
 | |
|     "GROUP_NAME char(10),"+
 | |
|     "index IDX_REPORT_NAME (REPORT_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create CLOCK_PERMS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists CLOCK_PERMS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "CLOCK_NAME char(64),"+
 | |
|     "SERVICE_NAME char(10),"+
 | |
|     "index STATION_IDX (CLOCK_NAME),"+
 | |
|     "index SERVICE_IDX (SERVICE_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create EVENT_PERMS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists EVENT_PERMS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "EVENT_NAME char(64),"+
 | |
|     "SERVICE_NAME char(10),"+
 | |
|     "index STATION_IDX (EVENT_NAME),"+
 | |
|     "index SERVICE_IDX (SERVICE_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create USER_PERMS table
 | |
|   //
 | |
|   sql=QString("create table if not exists USER_PERMS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "USER_NAME char(255),"+
 | |
|     "GROUP_NAME char(10),"+
 | |
|     "index USER_IDX (USER_NAME),"+
 | |
|     "index GROUP_IDX (GROUP_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create VGUEST_RESOURCES Table
 | |
|   //
 | |
|   sql=QString("create table if not exists VGUEST_RESOURCES (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "MATRIX_NUM int not null,"+
 | |
|     "VGUEST_TYPE int not null,"+
 | |
|     "NUMBER int not null,"+
 | |
|     "ENGINE_NUM int default -1,"+
 | |
|     "DEVICE_NUM int default -1,"+
 | |
|     "SURFACE_NUM int default 0,"+
 | |
|     "RELAY_NUM int default -1,"+
 | |
|     "BUSS_NUM int default -1,"+
 | |
|     "index STATION_MATRIX_IDX (STATION_NAME,MATRIX_NUM,VGUEST_TYPE))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create RDLOGEDIT table
 | |
|   //
 | |
|   sql=QString("create table if not exists RDLOGEDIT (")+
 | |
|     "ID int unsigned primary key auto_increment,"+
 | |
|     "STATION char(64) not null,"+
 | |
|     "INPUT_CARD int default -1,"+
 | |
|     "INPUT_PORT int default 0,"+
 | |
|     "OUTPUT_CARD int default -1,"+
 | |
|     "OUTPUT_PORT int default 0,"+
 | |
|     "FORMAT int unsigned default 0,"+
 | |
|     "LAYER int unsigned default 0,"+
 | |
|     "BITRATE int unsigned default 0,"+
 | |
|     "ENABLE_SECOND_START enum('N','Y') default 'Y',"+
 | |
|     "DEFAULT_CHANNELS int unsigned default 2,"+
 | |
|     "MAXLENGTH int default 0,"+
 | |
|     "TAIL_PREROLL int unsigned default 2000,"+
 | |
|     "START_CART int unsigned default 0,"+
 | |
|     "END_CART int unsigned default 0,"+
 | |
|     "REC_START_CART int unsigned default 0,"+
 | |
|     "REC_END_CART int unsigned default 0,"+
 | |
|     "TRIM_THRESHOLD int default -3000,"+
 | |
|     "RIPPER_LEVEL int default -1300,"+
 | |
|     "DEFAULT_TRANS_TYPE int default 0,"+
 | |
|     "index STATION_IDX (STATION))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create RDCATCH table
 | |
|   //
 | |
|   sql=QString("create table if not exists RDCATCH (")+
 | |
|     "ID int unsigned primary key auto_increment,"+
 | |
|     "STATION char(64) not null,"+
 | |
|     "ERROR_RML char(255),"+
 | |
|     "index STATION_IDX (STATION))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create SCHED_CODES Table
 | |
|   //
 | |
|   sql=QString("create table if not exists SCHED_CODES")+
 | |
|     "(CODE varchar(10) not null primary key,"+
 | |
|     "DESCRIPTION varchar(255))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create DROPBOXES Table
 | |
|   //
 | |
|   sql=QString("create table if not exists DROPBOXES ")+
 | |
|     "(ID int auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64),"+
 | |
|     "GROUP_NAME char(10),"+
 | |
|     "PATH char(255),"+
 | |
|     "NORMALIZATION_LEVEL int default 1,"+
 | |
|     "AUTOTRIM_LEVEL int default 1,"+
 | |
|     "SINGLE_CART enum('N','Y') default 'N',"+
 | |
|     "TO_CART int unsigned default 0,"+
 | |
|     "FORCE_TO_MONO enum('N','Y') default 'N',"+
 | |
|     "SEGUE_LEVEL int(11) default 1,"+
 | |
|     "SEGUE_LENGTH int(11) default 0,"+
 | |
|     "USE_CARTCHUNK_ID enum('N','Y') default 'N',"+
 | |
|     "TITLE_FROM_CARTCHUNK_ID enum('N','Y') default 'N',"+
 | |
|     "DELETE_CUTS enum('N','Y') default 'N',"+
 | |
|     "DELETE_SOURCE enum('N','Y') default 'Y',"+
 | |
|     "METADATA_PATTERN char(64),"+
 | |
|     "STARTDATE_OFFSET int default 0,"+
 | |
|     "ENDDATE_OFFSET int default 0,"+
 | |
|     "FIX_BROKEN_FORMATS enum('N','Y') default 'N',"+
 | |
|     "LOG_PATH char(255),"+
 | |
|     "IMPORT_CREATE_DATES enum('N','Y') default 'N',"+
 | |
|     "CREATE_STARTDATE_OFFSET int default 0,"+
 | |
|     "CREATE_ENDDATE_OFFSET int default 0,"+
 | |
|     "SET_USER_DEFINED char(255),"+
 | |
|     "index STATION_NAME_IDX (STATION_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create RDPANEL Table
 | |
|   //
 | |
|   sql=QString("create table if not exists RDPANEL (")+
 | |
|     "ID int not null primary key auto_increment,"+
 | |
|     "STATION char(40) not null,"+
 | |
|     "STATION_PANELS int default 3,"+
 | |
|     "USER_PANELS int default 3,"+
 | |
|     "CLEAR_FILTER enum('N','Y') default 'N',"+
 | |
|     "FLASH_PANEL enum('N','Y') default 'N',"+
 | |
|     "PANEL_PAUSE_ENABLED enum('N','Y') default 'N',"+
 | |
|     "BUTTON_LABEL_TEMPLATE char(32) default \"%t\","+
 | |
|     "DEFAULT_SERVICE char(10),"+
 | |
|     "SKIN_PATH char(255) default \""+
 | |
|     RDEscapeString(RD_DEFAULT_RDPANEL_SKIN)+"\","+
 | |
|     "index STATION_IDX (STATION))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create EXTENDED_PANELS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists EXTENDED_PANELS (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "TYPE int not null,"+
 | |
|     "OWNER char(64) not null,"+
 | |
|     "PANEL_NO int not null,"+
 | |
|     "ROW_NO int not null,"+
 | |
|     "COLUMN_NO int not null,"+
 | |
|     "LABEL char(64),"+
 | |
|     "CART int,"+
 | |
|     "DEFAULT_COLOR char(7),"+
 | |
|     "index LOAD_IDX (TYPE,OWNER,PANEL_NO),"+
 | |
|     "index SAVE_IDX (TYPE,OWNER,PANEL_NO,ROW_NO,COLUMN_NO))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create PANEL_NAMES Table
 | |
|   //
 | |
|   sql=QString("create table if not exists PANEL_NAMES (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "TYPE int not null,"+
 | |
|     "OWNER char(64) not null,"+
 | |
|     "PANEL_NO int not null,"+
 | |
|     "NAME char(64),"+
 | |
|     "index LOAD_IDX (TYPE,OWNER,PANEL_NO))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create EXTENDED_PANEL_NAMES Table
 | |
|   //
 | |
|   sql=QString("create table if not exists EXTENDED_PANEL_NAMES (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "TYPE int not null,"+
 | |
|     "OWNER char(64) not null,"+
 | |
|     "PANEL_NO int not null,"+
 | |
|     "NAME char(64),"+
 | |
|     "index LOAD_IDX (TYPE,OWNER,PANEL_NO))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create FEEDS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists FEEDS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "KEY_NAME char(8) unique not null,"+
 | |
|     "CHANNEL_TITLE char(255),"+
 | |
|     "CHANNEL_DESCRIPTION text,"+
 | |
|     "CHANNEL_CATEGORY char(64),"+
 | |
|     "CHANNEL_LINK char(255),"+
 | |
|     "CHANNEL_COPYRIGHT char(64),"+
 | |
|     "CHANNEL_WEBMASTER char(64),"+
 | |
|     "CHANNEL_LANGUAGE char(5) default \"en-us\","+
 | |
|     "BASE_URL char(255),"+
 | |
|     "BASE_PREAMBLE char(255),"+
 | |
|     "PURGE_URL char(255),"+
 | |
|     "PURGE_USERNAME char(64),"+
 | |
|     "PURGE_PASSWORD char(64),"+
 | |
|     "HEADER_XML text,"+
 | |
|     "CHANNEL_XML text,"+
 | |
|     "ITEM_XML text,"+
 | |
|     "CAST_ORDER enum('N','Y') default 'N',"+
 | |
|     "MAX_SHELF_LIFE int,"+
 | |
|     "LAST_BUILD_DATETIME datetime,"+
 | |
|     "ORIGIN_DATETIME datetime,"+
 | |
|     "ENABLE_AUTOPOST enum('N','Y') default 'N',"+
 | |
|     "KEEP_METADATA enum('N','Y') default 'Y',"+
 | |
|     "UPLOAD_FORMAT int default 2,"+
 | |
|     "UPLOAD_CHANNELS int default 2,"+
 | |
|     "UPLOAD_SAMPRATE int default 44100,"+
 | |
|     "UPLOAD_BITRATE int default 32000,"+
 | |
|     "UPLOAD_QUALITY int default 0,"+
 | |
|     "UPLOAD_EXTENSION char(16) default \"mp3\","+
 | |
|     "NORMALIZE_LEVEL int default -100,"+
 | |
|     "REDIRECT_PATH char(255),"+
 | |
|     "MEDIA_LINK_MODE int default 0,"+
 | |
|     "index KEY_NAME_IDX(KEY_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create PODCASTS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists PODCASTS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "FEED_ID int unsigned not null,"+
 | |
|     "STATUS int unsigned default 1,"+
 | |
|     "ITEM_TITLE char(255),"+
 | |
|     "ITEM_DESCRIPTION text,"+
 | |
|     "ITEM_CATEGORY char(64),"+
 | |
|     "ITEM_LINK char(255),"+
 | |
|     "ITEM_COMMENTS char(255),"+
 | |
|     "ITEM_AUTHOR char(255),"+
 | |
|     "ITEM_SOURCE_TEXT char(64),"+
 | |
|     "ITEM_SOURCE_URL char(255),"+
 | |
|     "AUDIO_FILENAME char(255),"+
 | |
|     "AUDIO_LENGTH int unsigned,"+
 | |
|     "AUDIO_TIME int unsigned,"+
 | |
|     "SHELF_LIFE int,"+
 | |
|     "ORIGIN_DATETIME datetime,"+
 | |
|     "EFFECTIVE_DATETIME datetime,"+
 | |
|     "index FEED_ID_IDX(FEED_ID,ORIGIN_DATETIME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create AUX_METADATA Table
 | |
|   //
 | |
|   sql=QString("create table if not exists AUX_METADATA (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "FEED_ID int unsigned,"+
 | |
|     "VAR_NAME char(16),"+
 | |
|     "CAPTION char(64),"+
 | |
|     "index FEED_ID_IDX(FEED_ID))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create FEED_PERMS table
 | |
|   //
 | |
|   sql=QString("create table if not exists FEED_PERMS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "USER_NAME char(255),"+
 | |
|     "KEY_NAME char(8),"+
 | |
|     "index USER_IDX (USER_NAME),"+
 | |
|     "index KEYNAME_IDX (KEY_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create WEB_CONNECTIONS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists WEB_CONNECTIONS (")+
 | |
|     "SESSION_ID int unsigned not null primary key,"+
 | |
|     "LOGIN_NAME char(255),"+
 | |
|     "IP_ADDRESS char(16),"+
 | |
|     "TIME_STAMP datetime)"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create SWITCHER_NODES Table
 | |
|   //
 | |
|   sql=QString("create table if not exists SWITCHER_NODES (")+
 | |
|     "ID int not null auto_increment primary key,"+
 | |
|     "STATION_NAME char(64),"+
 | |
|     "MATRIX int,"+
 | |
|     "BASE_OUTPUT int default 0,"+
 | |
|     "HOSTNAME char(64),"+
 | |
|     "PASSWORD char(64),"+
 | |
|     "TCP_PORT int,"+
 | |
|     "DESCRIPTION char(255),"+
 | |
|     "index STATION_IDX (STATION_NAME,MATRIX))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create ENCODERS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists ENCODERS (")+
 | |
|     "ID int not null auto_increment primary key,"+
 | |
|     "NAME char(32) not null,"+
 | |
|     "STATION_NAME char(64),"+
 | |
|     "COMMAND_LINE char(255),"+
 | |
|     "DEFAULT_EXTENSION char(16),"+
 | |
|     "index NAME_IDX(NAME,STATION_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
|   RDSqlQuery::run(sql,&ok);
 | |
|   if(!ok) {
 | |
|     return false;
 | |
|   }
 | |
|   // Ensure that dynamic format IDs start after 100
 | |
|   sql=QString("insert into ENCODERS set ID=100,NAME=\"dummy\"");
 | |
|   RDSqlQuery::run(sql,&ok);
 | |
|   if(!ok) {
 | |
|     return false;
 | |
|   }
 | |
|   sql=QString("delete from ENCODERS where ID=100");
 | |
|   RDSqlQuery::run(sql,&ok);
 | |
|   if(!ok) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create ENCODER_BITRATES Table
 | |
|   //
 | |
|   sql=QString("create table if not exists ENCODER_BITRATES (")+
 | |
|     "ID int not null auto_increment primary key,"+
 | |
|     "ENCODER_ID int not null,"+
 | |
|     "BITRATES int not null,"+
 | |
|     "index ENCODER_ID_IDX(ENCODER_ID))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create ENCODER_CHANNELS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists ENCODER_CHANNELS (")+
 | |
|     "ID int not null auto_increment primary key,"+
 | |
|     "ENCODER_ID int not null,"+
 | |
|     "CHANNELS int not null,"+
 | |
|     "index ENCODER_ID_IDX(ENCODER_ID))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create ENCODER_SAMPLERATES Table
 | |
|   //
 | |
|   sql=QString("create table if not exists ENCODER_SAMPLERATES (")+
 | |
|     "ID int not null auto_increment primary key,"+
 | |
|     "ENCODER_ID int not null,"+
 | |
|     "SAMPLERATES int not null,"+
 | |
|     "index ENCODER_ID_IDX(ENCODER_ID))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create GPOS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists GPOS (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "MATRIX int not null,"+
 | |
|     "NUMBER int not null,"+
 | |
|     "MACRO_CART int default 0,"+
 | |
|     "OFF_MACRO_CART int default 0,"+
 | |
|     "index MATRIX_IDX (STATION_NAME,MATRIX,NUMBER))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // DROPBOX_PATHS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists DROPBOX_PATHS (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "DROPBOX_ID int not null,"+
 | |
|     "FILE_PATH char(255) not null,"+
 | |
|     "FILE_DATETIME datetime,"+
 | |
|     "index FILE_PATH_IDX (DROPBOX_ID,FILE_PATH))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create NOWNEXT_PLUGINS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists NOWNEXT_PLUGINS (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "LOG_MACHINE int unsigned not null default 0,"+
 | |
|     "PLUGIN_PATH char(255),"+
 | |
|     "PLUGIN_ARG char(255),"+
 | |
|     "index STATION_IDX (STATION_NAME,LOG_MACHINE))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create SYSTEM Table
 | |
|   //
 | |
|   sql=QString("create table if not exists SYSTEM (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     QString().sprintf("SAMPLE_RATE int unsigned default %d,",
 | |
| 		      RD_DEFAULT_SAMPLE_RATE)+
 | |
|     "DUP_CART_TITLES enum('N','Y') not null default 'Y',"+
 | |
|     "FIX_DUP_CART_TITLES enum('N','Y') not null default 'Y',"+
 | |
|     QString().sprintf("MAX_POST_LENGTH int unsigned default %u,",
 | |
| 		      RD_DEFAULT_MAX_POST_LENGTH)+
 | |
|     "ISCI_XREFERENCE_PATH char(255),"+
 | |
|     "TEMP_CART_GROUP char(10),"+
 | |
|     "SHOW_USER_LIST enum('N','Y') not null default 'Y',"+
 | |
|     "NOTIFICATION_ADDRESS char(15) default \""+RD_NOTIFICATION_ADDRESS+"\")"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create IMPORT_TEMPLATES table
 | |
|   //
 | |
|   sql=QString("create table if not exists IMPORT_TEMPLATES (")+
 | |
|     "NAME char(64) not null primary key,"+
 | |
|     "CART_OFFSET int,"+
 | |
|     "CART_LENGTH int,"+
 | |
|     "TITLE_OFFSET int,"+
 | |
|     "TITLE_LENGTH int,"+
 | |
|     "HOURS_OFFSET int,"+
 | |
|     "HOURS_LENGTH int,"+
 | |
|     "MINUTES_OFFSET int,"+
 | |
|     "MINUTES_LENGTH int,"+
 | |
|     "SECONDS_OFFSET int,"+
 | |
|     "SECONDS_LENGTH int,"+
 | |
|     "LEN_HOURS_OFFSET int,"+
 | |
|     "LEN_HOURS_LENGTH int,"+
 | |
|     "LEN_MINUTES_OFFSET int,"+
 | |
|     "LEN_MINUTES_LENGTH int,"+
 | |
|     "LEN_SECONDS_OFFSET int,"+
 | |
|     "LEN_SECONDS_LENGTH int,"+
 | |
|     "LENGTH_OFFSET int,"+
 | |
|     "LENGTH_LENGTH int,"+
 | |
|     "DATA_OFFSET int,"+
 | |
|     "DATA_LENGTH int,"+
 | |
|     "EVENT_ID_OFFSET int,"+
 | |
|     "EVENT_ID_LENGTH int,"+
 | |
|     "ANNC_TYPE_OFFSET int,"+
 | |
|     "ANNC_TYPE_LENGTH int)"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
|   if(!InsertImportFormats(err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create REPLICATORS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists REPLICATORS (")+
 | |
|     "NAME char(32) not null primary key,"+
 | |
|     "DESCRIPTION char(64),"+
 | |
|     "TYPE_ID int unsigned not null,"+
 | |
|     "STATION_NAME char(64),"+
 | |
|     "FORMAT int unsigned default 0,"+
 | |
|     "CHANNELS int unsigned default 2,"+
 | |
|     QString().sprintf("SAMPRATE int unsigned default %u,",
 | |
| 		      RD_DEFAULT_SAMPLE_RATE)+
 | |
|     "BITRATE int unsigned default 0,"+
 | |
|     "QUALITY int unsigned default 0,"+
 | |
|     "URL char(255),"+
 | |
|     "URL_USERNAME char(64),"+
 | |
|     "URL_PASSWORD char(64),"+
 | |
|     "ENABLE_METADATA enum('N','Y') default 'N',"+
 | |
|     "NORMALIZATION_LEVEL int default 0,"+
 | |
|     "index TYPE_ID_IDX (TYPE_ID))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create REPLICATOR_MAP Table
 | |
|   //
 | |
|   sql=QString("create table if not exists REPLICATOR_MAP (")+
 | |
|     "ID int unsigned not null auto_increment primary key,"+
 | |
|     "REPLICATOR_NAME char(32) not null,"+
 | |
|     "GROUP_NAME char(10) not null,"+
 | |
|     "index REPLICATOR_NAME_IDX(REPLICATOR_NAME),"+
 | |
|     "index GROUP_NAME_IDX(GROUP_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create REPL_CART_STATE Table
 | |
|   //
 | |
|   sql=QString("create table if not exists REPL_CART_STATE (")+
 | |
|     "ID int unsigned not null auto_increment primary key,"+
 | |
|     "REPLICATOR_NAME char(32) not null,"+
 | |
|     "CART_NUMBER int unsigned not null,"+
 | |
|     "POSTED_FILENAME char(255),"+
 | |
|     "ITEM_DATETIME datetime not null,"+
 | |
|     "REPOST enum('N','Y') default 'N',"+
 | |
|     "unique REPLICATOR_NAME_IDX(REPLICATOR_NAME,CART_NUMBER,POSTED_FILENAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create REPL_CUT_STATE Table
 | |
|   //
 | |
|   sql=QString("create table if not exists REPL_CUT_STATE (")+
 | |
|     "ID int unsigned not null auto_increment primary key,"+
 | |
|     "REPLICATOR_NAME char(32) not null,"+
 | |
|     "CUT_NAME char(12) not null,"+
 | |
|     "ITEM_DATETIME datetime not null,"+
 | |
|     "unique REPLICATOR_NAME_IDX(REPLICATOR_NAME,CUT_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create ISCI_XREFERENCE Table
 | |
|   //
 | |
|   sql=QString("create table if not exists ISCI_XREFERENCE (")+
 | |
|     "ID int unsigned not null auto_increment primary key,"+
 | |
|     "CART_NUMBER int unsigned not null,"+
 | |
|     "ISCI char(32) not null,"+
 | |
|     "FILENAME char(64) not null,"+
 | |
|     "LATEST_DATE date not null,"+
 | |
|     "TYPE char(1) not null,"+
 | |
|     "ADVERTISER_NAME char(30),"+
 | |
|     "PRODUCT_NAME char(35),"+
 | |
|     "CREATIVE_TITLE char(30),"+
 | |
|     "REGION_NAME char(80),"+
 | |
|     "index CART_NUMBER_IDX(CART_NUMBER),"+
 | |
|     "index TYPE_IDX(TYPE,LATEST_DATE),"+
 | |
|     "index LATEST_DATE_IDX(LATEST_DATE))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create RDHOTKEYS table
 | |
|   //
 | |
|   sql=QString("create table if not exists RDHOTKEYS (")+
 | |
|     "ID int unsigned not null auto_increment primary key,"+
 | |
|     "STATION_NAME         char(64),"+
 | |
|     "MODULE_NAME          char(64),"+
 | |
|     "KEY_ID               int,"+
 | |
|     "KEY_VALUE            char(64),"+
 | |
|     "KEY_LABEL            char(64))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create JACK_CLIENTS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists JACK_CLIENTS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "DESCRIPTION char(64),"+
 | |
|     "COMMAND_LINE text not null,"+
 | |
|     "index IDX_STATION_NAME (STATION_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create CARTSLOTS Table
 | |
|   //
 | |
|   sql=QString("create table if not exists CARTSLOTS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "SLOT_NUMBER int unsigned not null,"+
 | |
|     "MODE int not null default 0,"+
 | |
|     "DEFAULT_MODE int not null default -1,"+
 | |
|     "STOP_ACTION int not null default 0,"+
 | |
|     "DEFAULT_STOP_ACTION int not null default -1,"+
 | |
|     "CART_NUMBER int default 0,"+
 | |
|     "DEFAULT_CART_NUMBER int not null default 0,"+
 | |
|     "HOOK_MODE int default 0,"+
 | |
|     "DEFAULT_HOOK_MODE int not null default -1,"+
 | |
|     "SERVICE_NAME char(10),"+
 | |
|     "CARD int not null default 0,"+
 | |
|     "INPUT_PORT int not null default 0,"+
 | |
|     "OUTPUT_PORT int not null default 0,"+
 | |
|     "index STATION_NAME_IDX(STATION_NAME,SLOT_NUMBER))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create LIVEWIRE_GPIO_SLOTS table
 | |
|   //
 | |
|   sql=QString("create table if not exists LIVEWIRE_GPIO_SLOTS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "MATRIX int not null,"+
 | |
|     "SLOT int not null,"+
 | |
|     "IP_ADDRESS char(15),"+
 | |
|     "SOURCE_NUMBER int,"+
 | |
|     "index STATION_NAME_IDX(STATION_NAME,MATRIX))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create RDAIRPLAY_CHANNELS table
 | |
|   //
 | |
|   sql=QString("create table if not exists RDAIRPLAY_CHANNELS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "INSTANCE int unsigned not null,"+
 | |
|     "CARD int not null default 0,"+
 | |
|     "PORT int not null default 0,"+
 | |
|     "START_RML char(255),"+
 | |
|     "STOP_RML char(255),"+
 | |
|     "GPIO_TYPE int unsigned default 0,"+
 | |
|     "START_GPI_MATRIX int not null default -1,"+
 | |
|     "START_GPI_LINE int not null default -1,"+
 | |
|     "START_GPO_MATRIX int not null default -1,"+
 | |
|     "START_GPO_LINE int not null default -1,"+
 | |
|     "STOP_GPI_MATRIX int not null default -1,"+
 | |
|     "STOP_GPI_LINE int not null default -1,"+
 | |
|     "STOP_GPO_MATRIX int not null default -1,"+
 | |
|     "STOP_GPO_LINE int not null default -1,"+
 | |
|     "index STATION_NAME_IDX(STATION_NAME,INSTANCE))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create RDPANEL_CHANNELS table
 | |
|   //
 | |
|   sql=QString("create table if not exists RDPANEL_CHANNELS (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "INSTANCE int unsigned not null,"+
 | |
|     "CARD int not null default 0,"+
 | |
|     "PORT int not null default 0,"+
 | |
|     "START_RML char(255),"+
 | |
|     "STOP_RML char(255),"+
 | |
|     "GPIO_TYPE int unsigned default 0,"+
 | |
|     "START_GPI_MATRIX int not null default -1,"+
 | |
|     "START_GPI_LINE int not null default -1,"+
 | |
|     "START_GPO_MATRIX int not null default -1,"+
 | |
|     "START_GPO_LINE int not null default -1,"+
 | |
|     "STOP_GPI_MATRIX int not null default -1,"+
 | |
|     "STOP_GPI_LINE int not null default -1,"+
 | |
|     "STOP_GPO_MATRIX int not null default -1,"+
 | |
|     "STOP_GPO_LINE int not null default -1,"+
 | |
|     "index STATION_NAME_IDX(STATION_NAME,INSTANCE))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create LOG_MODES table
 | |
|   //
 | |
|   sql=QString("create table if not exists LOG_MODES (")+
 | |
|     "ID int unsigned auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "MACHINE int unsigned not null,"+
 | |
|     "START_MODE int not null default 0,"+
 | |
|     "OP_MODE int not null default 2,"+
 | |
|     "index STATION_NAME_IDX(STATION_NAME,MACHINE))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create DROPBOX_SCHED_CODES table
 | |
|   //
 | |
|   sql=QString("create table if not exists DROPBOX_SCHED_CODES(")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "DROPBOX_ID int not null,"+
 | |
|     "SCHED_CODE char(11) not null,"
 | |
|     "index DROPBOX_ID_IDX(DROPBOX_ID),"+
 | |
|     "index SCHED_CODE_IDX(SCHED_CODE))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create GPIO_EVENTS table
 | |
|   //
 | |
|   sql=QString("create table if not exists GPIO_EVENTS(")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "MATRIX int not null,"+
 | |
|     "NUMBER int not null,"+
 | |
|     "TYPE int not null,"+
 | |
|     "EDGE int not null,"+
 | |
|     "EVENT_DATETIME datetime not null,"+
 | |
|     "index STATION_NAME_IDX(STATION_NAME,MATRIX,TYPE,EVENT_DATETIME,EDGE))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create CUT_EVENTS table
 | |
|   //
 | |
|   sql=QString("create table if not exists CUT_EVENTS(")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "CUT_NAME char(12) not null,"+
 | |
|     "NUMBER int not null,"+
 | |
|     "POINT int not null,"+
 | |
|     "index CUT_NAME_IDX(CUT_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create DECK_EVENTS table
 | |
|   //
 | |
|   sql=QString("create table if not exists DECK_EVENTS(")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "CHANNEL int unsigned not null,"+
 | |
|     "NUMBER int not null,"+
 | |
|     "CART_NUMBER int unsigned not null default 0,"+
 | |
|     "index STATION_NAME_IDX(STATION_NAME,CHANNEL))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create SERVICE_CLOCKS table
 | |
|   //
 | |
|   sql=QString("create table if not exists SERVICE_CLOCKS(")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "SERVICE_NAME char(10) not null,"+
 | |
|     "HOUR int not null,"+
 | |
|     "CLOCK_NAME char(64) default null,"+
 | |
|     "index SERVICE_NAME_IDX(SERVICE_NAME,HOUR),"+
 | |
|     "index CLOCK_NAME_IDX(CLOCK_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create WEBAPI_AUTH table
 | |
|   //
 | |
|   sql=QString("create table if not exists WEBAPI_AUTHS(")+
 | |
|     "TICKET char(41) not null primary key,"+
 | |
|     "LOGIN_NAME char(255) not null,"+
 | |
|     "IPV4_ADDRESS char(16) not null,"+
 | |
|     "EXPIRATION_DATETIME datetime not null,"+
 | |
|     "index TICKET_IDX(TICKET,IPV4_ADDRESS,EXPIRATION_DATETIME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create USER_SERVICE_PERMS table
 | |
|   //
 | |
|   sql=QString("create table if not exists USER_SERVICE_PERMS (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "USER_NAME char(255) not null,"+
 | |
|     "SERVICE_NAME char(10) not null,"+
 | |
|     "index USER_NAME_IDX(USER_NAME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create LOG_MACHINES table
 | |
|   //
 | |
|   sql=QString("create table if not exists LOG_MACHINES (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "MACHINE int not null,"+
 | |
|     "START_MODE int not null default 0,"+
 | |
|     "AUTO_RESTART enum('N','Y') not null default 'N',"+
 | |
|     "LOG_NAME char(64),"+
 | |
|     "CURRENT_LOG char(64),"+
 | |
|     "RUNNING enum('N','Y') not null default 'N',"+
 | |
|     "LOG_ID int not null default -1,"+
 | |
|     "LOG_LINE int not null default -1,"+
 | |
|     "NOW_CART int unsigned not null default 0,"+
 | |
|     "NEXT_CART int unsigned not null default 0,"+
 | |
|     "UDP_ADDR char(255),"+
 | |
|     "UDP_PORT int unsigned,"+
 | |
|     "UDP_STRING char(255),"+
 | |
|     "LOG_RML char(255),"+
 | |
|     "index STATION_NAME_IDX(STATION_NAME,MACHINE))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create AUDIO_CARDS table
 | |
|   //
 | |
|   sql=QString("create table if not exists AUDIO_CARDS (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "CARD_NUMBER int not null,"+
 | |
|     "DRIVER int not null default 0,"+
 | |
|     "NAME char(64),"+
 | |
|     "INPUTS int not null default -1,"+
 | |
|     "OUTPUTS int not null default -1,"+
 | |
|     "CLOCK_SOURCE int not null default 0,"+
 | |
|     "unique index STATION_NAME_IDX(STATION_NAME,CARD_NUMBER))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create AUDIO_INPUTS table
 | |
|   //
 | |
|   sql=QString("create table if not exists AUDIO_INPUTS (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "CARD_NUMBER int not null,"+
 | |
|     "PORT_NUMBER int not null,"+
 | |
|     "LEVEL int not null default 0,"+
 | |
|     "TYPE int not null default 0,"
 | |
|     "MODE int not null default 0,"+
 | |
|     "unique index STATION_NAME_IDX(STATION_NAME,CARD_NUMBER,PORT_NUMBER))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create AUDIO_OUTPUTS table
 | |
|   //
 | |
|   sql=QString("create table if not exists AUDIO_OUTPUTS (")+
 | |
|     "ID int auto_increment not null primary key,"+
 | |
|     "STATION_NAME char(64) not null,"+
 | |
|     "CARD_NUMBER int not null,"+
 | |
|     "PORT_NUMBER int not null,"+
 | |
|     "LEVEL int not null default 0,"+
 | |
|     "unique index STATION_NAME_IDX(STATION_NAME,CARD_NUMBER,PORT_NUMBER))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
|   
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| 
 | |
| bool MainObject::InititalizeNewDb(const QString &station_name,bool gen_audio,
 | |
| 				  QString *err_msg) const
 | |
| {
 | |
|   QString sql;
 | |
|   RDSqlQuery *q;
 | |
| 
 | |
|   //
 | |
|   // Create Default Admin Account
 | |
|   //
 | |
|   sql=QString("insert into USERS set ")+
 | |
|     "LOGIN_NAME=\""+RDEscapeString(RDA_LOGIN_NAME)+"\","+
 | |
|     "PASSWORD=\""+RDEscapeString(RDA_PASSWORD)+"\","+
 | |
|     "FULL_NAME=\""+RDEscapeString(RDA_FULLNAME)+"\","+
 | |
|     "DESCRIPTION=\""+RDEscapeString(RDA_DESCRIPTION)+"\","+
 | |
|     "ADMIN_USERS_PRIV=\"Y\","+
 | |
|     "ADMIN_CONFIG_PRIV=\"Y\"";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create Default User Account
 | |
|   //
 | |
|   sql=QString("insert into USERS set ")+
 | |
|     "LOGIN_NAME=\""+RDEscapeString(RD_USER_LOGIN_NAME)+"\","+
 | |
|     "PASSWORD=\""+RDEscapeString(RD_USER_PASSWORD)+"\","+
 | |
|     "FULL_NAME=\""+RDEscapeString(RD_USER_FULL_NAME)+"\","+
 | |
|     "DESCRIPTION=\""+RDEscapeString(RD_USER_DESCRIPTION)+"\","+
 | |
|     "CREATE_CARTS_PRIV=\"Y\","+
 | |
|     "DELETE_CARTS_PRIV=\"Y\","+
 | |
|     "MODIFY_CARTS_PRIV=\"Y\","+
 | |
|     "EDIT_AUDIO_PRIV=\"Y\","+
 | |
|     "ASSIGN_CART_PRIV=\"Y\","+
 | |
|     "CREATE_LOG_PRIV=\"Y\","+
 | |
|     "DELETE_LOG_PRIV=\"Y\","+
 | |
|     "DELETE_REC_PRIV=\"Y\","+
 | |
|     "PLAYOUT_LOG_PRIV=\"Y\","+
 | |
|     "ARRANGE_LOG_PRIV=\"Y\","+
 | |
|     "MODIFY_TEMPLATE_PRIV=\"Y\","+
 | |
|     "ADDTO_LOG_PRIV=\"Y\","+
 | |
|     "REMOVEFROM_LOG_PRIV=\"Y\","+
 | |
|     "CONFIG_PANELS_PRIV=\"Y\","+
 | |
|     "VOICETRACK_LOG_PRIV=\"Y\","+
 | |
|     "EDIT_CATCHES_PRIV=\"Y\","+
 | |
|     "ADD_PODCAST_PRIV=\"Y\","+
 | |
|     "EDIT_PODCAST_PRIV=\"Y\","+
 | |
|     "DELETE_PODCAST_PRIV=\"Y\"";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create Default System-wide Settings Record
 | |
|   //
 | |
|   sql="insert into SYSTEM set ID=1";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create Default Workstation
 | |
|   //
 | |
|   //
 | |
|   // Add Audio Cards
 | |
|   //
 | |
|   for(int i=0;i<RD_MAX_CARDS;i++) {
 | |
|     sql=QString("insert into AUDIO_CARDS set ")+
 | |
|       "STATION_NAME=\""+RDEscapeString(station_name)+"\","+
 | |
|       QString().sprintf("CARD_NUMBER=%d",i);
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // 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(station_name)+"\","+
 | |
| 	QString().sprintf("CARD_NUMBER=%d,",i)+
 | |
| 	QString().sprintf("PORT_NUMBER=%d",j);
 | |
|       if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
| 	return false;
 | |
|       }
 | |
| 
 | |
|       sql=QString("insert into AUDIO_OUTPUTS set ")+
 | |
| 	"STATION_NAME=\""+RDEscapeString(station_name)+"\","+
 | |
| 	QString().sprintf("CARD_NUMBER=%d,",i)+
 | |
| 	QString().sprintf("PORT_NUMBER=%d",j);
 | |
|       if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
| 	return false;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   sql=QString("insert into STATIONS set ")+
 | |
|     "NAME=\""+RDEscapeString(station_name)+"\","+
 | |
|     "SHORT_NAME=\""+RDEscapeString(station_name)+"\","+
 | |
|     "DESCRIPTION=\"Workstation "+RDEscapeString(station_name)+"\","+
 | |
|     "USER_NAME=\"user\","+
 | |
|     "DEFAULT_NAME=\"user\"";
 | |
|   struct hostent *hostent=gethostbyname((const char *)station_name);
 | |
|   if(hostent!=NULL) {
 | |
|     sql+=QString().sprintf(",IPV4_ADDRESS=\"%d.%d.%d.%d\"",
 | |
| 			   0xFF&hostent->h_addr[0],0xFF&hostent->h_addr[1],
 | |
| 			   0xFF&hostent->h_addr[2],0xFF&hostent->h_addr[3]);
 | |
|   }
 | |
|   q=new RDSqlQuery(sql);
 | |
|   if(!q->isActive()) {
 | |
|     *err_msg=QObject::tr("Host already exists!");
 | |
|     delete q;
 | |
|     return false;
 | |
|   }
 | |
|   delete q;
 | |
| 
 | |
|   //
 | |
|   // Create Default Service
 | |
|   //
 | |
|   sql=QString("insert into SERVICES set NAME=\"")+
 | |
|     RDEscapeString(RD_SERVICE_NAME)+"\","+
 | |
|     "NAME_TEMPLATE=\""+RDEscapeString(RD_SERVICE_NAME)+"-%m%d\","+
 | |
|     "DESCRIPTION_TEMPLATE=\""+RDEscapeString(RD_SERVICE_NAME)+" log for %d/%m/%Y\"";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   // Create Group Audio Perms
 | |
|   sql="select NAME from GROUPS";
 | |
|   q=new RDSqlQuery(sql);
 | |
|   while(q->next()) {
 | |
|     sql=QString("insert into AUDIO_PERMS set ")+
 | |
|       "GROUP_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+
 | |
|       "SERVICE_NAME=\""+RDEscapeString(RD_SERVICE_NAME)+"\"";
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   delete q;
 | |
| 
 | |
|   // Create Station Perms
 | |
|   sql="select NAME from STATIONS";
 | |
|   q=new RDSqlQuery(sql);
 | |
|   while(q->next()) {
 | |
|     sql=QString("insert into SERVICE_PERMS set ")+
 | |
|       "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+
 | |
|       "SERVICE_NAME=\""+RDEscapeString(RD_SERVICE_NAME)+"\"";
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   delete q;
 | |
| 
 | |
|   // Create User Perms
 | |
|   sql=QString("insert into USER_SERVICE_PERMS set ")+
 | |
|     "USER_NAME=\""+RDEscapeString(RD_USER_LOGIN_NAME)+"\","+
 | |
|     "SERVICE_NAME=\""+RDEscapeString(RD_SERVICE_NAME)+"\"";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   // Populate RDLogManager Grid
 | |
|   for(int i=0;i<168;i++) {
 | |
|     sql=QString("insert into SERVICE_CLOCKS set ")+
 | |
|       "SERVICE_NAME=\""+RDEscapeString(RD_SERVICE_NAME)+"\","+
 | |
|       QString().sprintf("HOUR=%d,",i)+
 | |
|       "CLOCK_NAME=null";
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   if(!CreateReconciliationTable(RD_SERVICE_NAME,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // RDAirPlay/RDPanel Channel Data
 | |
|   //
 | |
|   for(unsigned i=0;i<10;i++) {
 | |
|     sql=QString("insert into RDAIRPLAY_CHANNELS set ")+
 | |
|       "STATION_NAME=\""+RDEscapeString(station_name)+"\","+
 | |
|       QString().sprintf("INSTANCE=%u",i);
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
| 
 | |
|     sql=QString("insert into RDPANEL_CHANNELS set ")+
 | |
|       "STATION_NAME=\""+RDEscapeString(station_name)+"\","+
 | |
|       QString().sprintf("INSTANCE=%u",i);
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   for(int i=0;i<RD_RDVAIRPLAY_LOG_QUAN;i++) {
 | |
|     sql=QString("insert into RDAIRPLAY_CHANNELS set ")+
 | |
|       "STATION_NAME=\""+RDEscapeString(station_name)+"\","+
 | |
|       QString().sprintf("INSTANCE=%u",i+RD_RDVAIRPLAY_LOG_BASE);
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   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(station_name)+"\","+
 | |
| 	QString().sprintf("CHANNEL=%u,",j+129)+
 | |
| 	QString().sprintf("NUMBER=%u",i+1);
 | |
|       if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
| 	return false;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // RDAirPlay Log Modes
 | |
|   //
 | |
|   for(int i=0;i<RDAIRPLAY_LOG_QUANTITY;i++) {
 | |
|     sql=QString().sprintf("insert into LOG_MODES set ")+
 | |
|       "STATION_NAME=\""+RDEscapeString(station_name)+"\","+
 | |
|       QString().sprintf("MACHINE=%d",i);
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   for(int i=0;i<RD_RDVAIRPLAY_LOG_QUAN;i++) {
 | |
|     sql=QString().sprintf("insert into LOG_MODES set ")+
 | |
|       "STATION_NAME=\""+RDEscapeString(station_name)+"\","+
 | |
|       QString().sprintf("MACHINE=%d",i+RD_RDVAIRPLAY_LOG_BASE);
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Log Machine Parameters
 | |
|   //
 | |
|   for(int i=0;i<3;i++) {
 | |
|     sql=QString("insert into LOG_MACHINES set ")+
 | |
|       "STATION_NAME=\""+RDEscapeString(station_name)+"\","+
 | |
|       QString().sprintf("MACHINE=%d",i);
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   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(station_name)+"\","+
 | |
|       QString().sprintf("MACHINE=%d",i);
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create Test Tone Cart
 | |
|   //
 | |
|   sql=QString("insert into CART set ")+
 | |
|     "TYPE=1,"+
 | |
|     "NUMBER=999999,"+
 | |
|     "GROUP_NAME=\"TEST\","+
 | |
|     "TITLE=\"Test Tone\","+
 | |
|     "ARTIST=\"Rivendell Radio Automation\","+
 | |
|     "CUT_QUANTITY=1,"+
 | |
|     "FORCED_LENGTH=10000,"+
 | |
|     "METADATA_DATETIME=now()";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create Default Audio Cut
 | |
|   //
 | |
|   sql=QString("insert into CUTS set ")+
 | |
|     "CUT_NAME=\"999999_001\","+
 | |
|     "CART_NUMBER=999999,"+
 | |
|     "DESCRIPTION=\"1 kHz at Reference Level [-16 dBFS]\","+
 | |
|     "OUTCUE=\"[tone]\","+
 | |
|     "CODING_FORMAT=0,"+
 | |
|     "BIT_RATE=0,"+
 | |
|     "CHANNELS=2,"+
 | |
|     "LENGTH=10000,"+
 | |
|     "START_POINT=0,"+
 | |
|     "END_POINT=10000,"+
 | |
|     "ORIGIN_DATETIME=now(),"+
 | |
|     "ORIGIN_NAME=\"+RDGen\"";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create Clipboard Entry
 | |
|   //
 | |
|   sql=QString("insert into CLIPBOARD set ")+
 | |
|     "CUT_NAME=\"clip\","+
 | |
|     "CART_NUMBER=0,"+
 | |
|     "DESCRIPTION=\""+RDEscapeString("Default Clipboard")+"\"";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create Group Audio Perms
 | |
|   //
 | |
|   sql="select NAME from GROUPS";
 | |
|   q=new RDSqlQuery(sql);
 | |
|   while(q->next()) {
 | |
|     sql=QString().sprintf("insert into AUDIO_PERMS set\
 | |
|                            GROUP_NAME=\"%s\",SERVICE_NAME=\"%s\"",
 | |
| 			  (const char *)
 | |
| 			  RDEscapeString(q->value(0).toString()),
 | |
| 			  (const char *)RDEscapeString(RD_SERVICE_NAME));
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   delete q;
 | |
| 
 | |
|   for(int i=0;i<168;i++) {
 | |
|     sql=QString("insert into SERVICE_CLOCKS set ")+
 | |
|       "SERVICE_NAME=\""+RDEscapeString(RD_SERVICE_NAME)+"\","+
 | |
|       QString().sprintf("HOUR=%d,",i)+
 | |
|       "CLOCK_NAME=null";
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   sql=QString("update SERVICES set ")+
 | |
|     "DESCRIPTION=\""+RDEscapeString(RD_SERVICE_DESCRIPTION)+"\" where "+
 | |
|     "NAME=\""+RDEscapeString(RD_SERVICE_NAME)+"\"";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create Default Groups
 | |
|   //
 | |
|   struct Group
 | |
|   {
 | |
|     const char *group;
 | |
|     const char *description;
 | |
|     int start;
 | |
|     int end;
 | |
|     bool now_next;
 | |
|     bool rpt_traffic;
 | |
|     bool rpt_music;
 | |
|     bool macro;
 | |
|   };
 | |
| 
 | |
|   static const struct Group group[] = {
 | |
|     {"TEMP","Temporary Carts",0,0,false,false,false,false},
 | |
|     {"TEST","Test Carts",0,0,false,false,false,false},
 | |
|     {"TRAFFIC","Traffic Carts",1,10000,false,true,false,false},
 | |
|     {"MUSIC","Music Carts",10001,40000,true,false,true,false},
 | |
|     {"BEDS","Music Bed Carts",40001,45000,false,false,false,false},
 | |
|     {"STINGS","Short stingers",45001,50000,false,false,false,false},
 | |
|     {"MACROS","Macro Carts",50001,60000,false,false,false,true},
 | |
|     {"LEGAL","Legal IDs",60001,60100,false,false,false,false},
 | |
|     {"IDENTS","General IDs",60101,60500,false,false,false,false},
 | |
|     {NULL,NULL,0,0,false,false,false,false},
 | |
|   };
 | |
| 
 | |
|   for (const struct Group *g = group; g->group != NULL; g++){
 | |
|     // Create the group
 | |
|     sql=QString("insert into GROUPS set ")+
 | |
|       "NAME=\""+RDEscapeString(g->group)+"\","+
 | |
|       "DESCRIPTION=\""+RDEscapeString(g->description)+"\","+
 | |
|       QString().sprintf("DEFAULT_CART_TYPE=%d,",g->macro?2:1)+
 | |
|       QString().sprintf("DEFAULT_LOW_CART=%d,",g->start)+
 | |
|       QString().sprintf("DEFAULT_HIGH_CART=%d,",g->end)+
 | |
|       "REPORT_TFC=\""+RDYesNo(g->rpt_traffic)+"\","+
 | |
|       "REPORT_MUS=\""+RDYesNo(g->rpt_music)+"\","+
 | |
|       "ENABLE_NOW_NEXT=\""+RDYesNo(g->now_next)+"\"";
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|     // Add it to the user permissions table for the default user
 | |
|     sql=QString("insert into USER_PERMS set ")+
 | |
|       "USER_NAME=\""+RDEscapeString(RD_USER_LOGIN_NAME)+"\","+
 | |
|       "GROUP_NAME=\""+RDEscapeString(g->group)+"\"";
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|     // Add it to the audio permsmissions table
 | |
|     sql=QString("insert into AUDIO_PERMS set ")+
 | |
|       "GROUP_NAME=\""+RDEscapeString(g->group)+"\","+
 | |
|       "SERVICE_NAME=\""+RDEscapeString(RD_SERVICE_NAME)+"\"";
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create Sample Log
 | |
|   //
 | |
|   sql=QString("create table if not exists `SAMPLE_LOG`")+
 | |
|     "(ID int not null primary key,"+
 | |
|     "COUNT int NOT NULL,"+
 | |
|     "TYPE int DEFAULT 0,"+
 | |
|     "SOURCE int NOT NULL,"+
 | |
|     "START_TIME int,"+
 | |
|     "GRACE_TIME int default 0,"+
 | |
|     "CART_NUMBER int UNSIGNED NOT NULL default 0,"+
 | |
|     "TIME_TYPE int NOT NULL,"+
 | |
|     "POST_POINT enum('N','Y') default 'N',"+
 | |
|     "TRANS_TYPE int NOT NULL,"+
 | |
|     "START_POINT int NOT NULL DEFAULT -1,"+
 | |
|     "END_POINT int NOT NULL DEFAULT -1,"+
 | |
|     "FADEUP_POINT int default -1,"+
 | |
|     QString().sprintf("FADEUP_GAIN int default %d,",RD_FADE_DEPTH)+
 | |
|     "FADEDOWN_POINT int default -1,"+
 | |
|     QString().sprintf("FADEDOWN_GAIN int default %d,",RD_FADE_DEPTH)+
 | |
|     "SEGUE_START_POINT int NOT NULL DEFAULT -1,"+
 | |
|     "SEGUE_END_POINT int NOT NULL DEFAULT -1,"+
 | |
|     QString().sprintf("SEGUE_GAIN int default %d,",RD_FADE_DEPTH)+
 | |
|     "DUCK_UP_GAIN int default 0,"+
 | |
|     "DUCK_DOWN_GAIN int default 0,"+
 | |
|     "COMMENT char(255),"+
 | |
|     "LABEL char(64),"+
 | |
|     "ORIGIN_USER char(255),"+
 | |
|     "ORIGIN_DATETIME datetime,"+
 | |
|     "EVENT_LENGTH int default -1,"+
 | |
|     "LINK_EVENT_NAME char(64),"+
 | |
|     "LINK_START_TIME int,"+
 | |
|     "LINK_LENGTH int default 0,"+
 | |
|     "LINK_START_SLOP int default 0,"+
 | |
|     "LINK_END_SLOP int default 0,"+
 | |
|     "LINK_ID int default -1,"+
 | |
|     "LINK_EMBEDDED enum('N','Y') default 'N',"+
 | |
|     "EXT_START_TIME time,"+
 | |
|     "EXT_LENGTH int,"+
 | |
|     "EXT_CART_NAME char(32),"+
 | |
|     "EXT_DATA char(32),"+
 | |
|     "EXT_EVENT_ID char(32),"+
 | |
|     "EXT_ANNC_TYPE char(8),"+
 | |
|     "index COUNT_IDX (COUNT),"+
 | |
|     "index CART_NUMBER_IDX (CART_NUMBER),"+
 | |
|     "index LABEL_IDX (LABEL))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
|   sql=QString("insert into LOGS set ")+
 | |
|     "NAME=\"SAMPLE\","+
 | |
|     "SERVICE=\""+RDEscapeString(RD_SERVICE_NAME)+"\","+
 | |
|     "DESCRIPTION=\"Sample Log\","+
 | |
|     "ORIGIN_USER=\""+RDEscapeString(RD_USER_LOGIN_NAME)+"\","+
 | |
|     "ORIGIN_DATETIME=now(),"
 | |
|     "MODIFIED_DATETIME=now()";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Generate Hotkey Definitions
 | |
|   //
 | |
|   if(!InsertRDAirplayHotkeys(station_name,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Generate Version Number
 | |
|   //
 | |
|   sql=QString("insert into VERSION set DB=286");
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Generate Audio
 | |
|   //
 | |
|   if(gen_audio) {
 | |
|     QString filename=
 | |
|       QString().sprintf("%s/999999_001.%s",
 | |
| 			RDConfiguration()->audioRoot().ascii(),
 | |
| 			RDConfiguration()->audioExtension().ascii());
 | |
| 
 | |
|     QString cmd=QString().sprintf("rdgen -t 10 -l 16 %s",
 | |
| 				  (const char *)filename);
 | |
|     system((const char *)cmd);
 | |
|     if(getuid()==0) {
 | |
|       chown(filename,RDConfiguration()->uid(),RDConfiguration()->gid());
 | |
|       chmod (filename,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| 
 | |
| bool MainObject::InsertImportFormats(QString *err_msg) const
 | |
| {
 | |
|   QString sql;
 | |
| 
 | |
|   sql=QString("insert into IMPORT_TEMPLATES set ")+
 | |
|     "NAME=\"Rivendell Standard Import\","+
 | |
|     "CART_OFFSET=10,"+
 | |
|     "CART_LENGTH=6,"+
 | |
|     "TITLE_OFFSET=25,"+
 | |
|     "TITLE_LENGTH=34,"+
 | |
|     "HOURS_OFFSET=0,"+
 | |
|     "HOURS_LENGTH=2,"+
 | |
|     "MINUTES_OFFSET=3,"+
 | |
|     "MINUTES_LENGTH=2,"+
 | |
|     "SECONDS_OFFSET=6,"+
 | |
|     "SECONDS_LENGTH=2,"+
 | |
|     "LEN_HOURS_OFFSET=60,"+
 | |
|     "LEN_HOURS_LENGTH=2,"+
 | |
|     "LEN_MINUTES_OFFSET=63,"+
 | |
|     "LEN_MINUTES_LENGTH=2,"+
 | |
|     "LEN_SECONDS_OFFSET=66,"+
 | |
|     "LEN_SECONDS_LENGTH=2,"+
 | |
|     "DATA_OFFSET=69,"+
 | |
|     "DATA_LENGTH=32";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   sql=QString("insert into IMPORT_TEMPLATES set ")+
 | |
|     "NAME=\"PowerGold Music Scheduling\","+
 | |
|     "CART_OFFSET=10,"+
 | |
|     "CART_LENGTH=6,"+
 | |
|     "TITLE_OFFSET=25,"+
 | |
|     "TITLE_LENGTH=34,"+
 | |
|     "HOURS_OFFSET=0,"+
 | |
|     "HOURS_LENGTH=2,"+
 | |
|     "MINUTES_OFFSET=3,"+
 | |
|     "MINUTES_LENGTH=2,"+
 | |
|     "SECONDS_OFFSET=6,"+
 | |
|     "SECONDS_LENGTH=2,"+
 | |
|     "LEN_HOURS_OFFSET=60,"+
 | |
|     "LEN_HOURS_LENGTH=2,"+
 | |
|     "LEN_MINUTES_OFFSET=63,"+
 | |
|     "LEN_MINUTES_LENGTH=2,"+
 | |
|     "LEN_SECONDS_OFFSET=66,"+
 | |
|     "LEN_SECONDS_LENGTH=2,"+
 | |
|     "DATA_OFFSET=69,"+
 | |
|     "DATA_LENGTH=32";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   sql=QString("insert into IMPORT_TEMPLATES set ")+
 | |
|     "NAME=\"RadioTraffic.com\","+
 | |
|     "CART_OFFSET=10,"+
 | |
|     "CART_LENGTH=6,"+
 | |
|     "TITLE_OFFSET=25,"+
 | |
|     "TITLE_LENGTH=34,"+
 | |
|     "HOURS_OFFSET=0,"+
 | |
|     "HOURS_LENGTH=2,"+
 | |
|     "MINUTES_OFFSET=3,"+
 | |
|     "MINUTES_LENGTH=2,"+
 | |
|     "SECONDS_OFFSET=6,"+
 | |
|     "SECONDS_LENGTH=2,"+
 | |
|     "LEN_HOURS_OFFSET=60,"+
 | |
|     "LEN_HOURS_LENGTH=2,"+
 | |
|     "LEN_MINUTES_OFFSET=63,"+
 | |
|     "LEN_MINUTES_LENGTH=2,"+
 | |
|     "LEN_SECONDS_OFFSET=66,"+
 | |
|     "LEN_SECONDS_LENGTH=2,"+
 | |
|     "DATA_OFFSET=69,"+
 | |
|     "DATA_LENGTH=32";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   sql=QString("insert into IMPORT_TEMPLATES set ")+
 | |
|     "NAME=\"CounterPoint Traffic\","+
 | |
|     "CART_OFFSET=10,"+
 | |
|     "CART_LENGTH=6,"+
 | |
|     "TITLE_OFFSET=25,"+
 | |
|     "TITLE_LENGTH=34,"+
 | |
|     "HOURS_OFFSET=0,"+
 | |
|     "HOURS_LENGTH=2,"+
 | |
|     "MINUTES_OFFSET=3,"+
 | |
|     "MINUTES_LENGTH=2,"+
 | |
|     "SECONDS_OFFSET=6,"+
 | |
|     "SECONDS_LENGTH=2,"+
 | |
|     "LEN_HOURS_OFFSET=60,"+
 | |
|     "LEN_HOURS_LENGTH=2,"+
 | |
|     "LEN_MINUTES_OFFSET=63,"+
 | |
|     "LEN_MINUTES_LENGTH=2,"+
 | |
|     "LEN_SECONDS_OFFSET=66,"+
 | |
|     "LEN_SECONDS_LENGTH=2,"+
 | |
|     "EVENT_ID_OFFSET=69,"+
 | |
|     "EVENT_ID_LENGTH=32,"+
 | |
|     "DATA_OFFSET=102,"+
 | |
|     "DATA_LENGTH=32";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   sql=QString("insert into IMPORT_TEMPLATES set ")+
 | |
|     "NAME=\"WideOrbit Traffic\","+
 | |
|     "CART_OFFSET=10,"+
 | |
|     "CART_LENGTH=6,"+
 | |
|     "TITLE_OFFSET=25,"+
 | |
|     "TITLE_LENGTH=34,"+
 | |
|     "HOURS_OFFSET=0,"+
 | |
|     "HOURS_LENGTH=2,"+
 | |
|     "MINUTES_OFFSET=3,"+
 | |
|     "MINUTES_LENGTH=2,"+
 | |
|     "SECONDS_OFFSET=6,"+
 | |
|     "SECONDS_LENGTH=2,"+
 | |
|     "LEN_HOURS_OFFSET=60,"+
 | |
|     "LEN_HOURS_LENGTH=2,"+
 | |
|     "LEN_MINUTES_OFFSET=63,"+
 | |
|     "LEN_MINUTES_LENGTH=2,"+
 | |
|     "LEN_SECONDS_OFFSET=66,"+
 | |
|     "LEN_SECONDS_LENGTH=2,"+
 | |
|     "EVENT_ID_OFFSET=69,"+
 | |
|     "EVENT_ID_LENGTH=32,"+
 | |
|     "DATA_OFFSET=102,"+
 | |
|     "DATA_LENGTH=32";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   sql=QString("insert into IMPORT_TEMPLATES set ")+
 | |
|     "NAME=\"Visual Traffic\","+
 | |
|     "CART_OFFSET=14,"+
 | |
|     "CART_LENGTH=6,"+
 | |
|     "TITLE_OFFSET=25,"+
 | |
|     "TITLE_LENGTH=39,"+
 | |
|     "HOURS_OFFSET=5,"+
 | |
|     "HOURS_LENGTH=2,"+
 | |
|     "MINUTES_OFFSET=8,"+
 | |
|     "MINUTES_LENGTH=2,"+
 | |
|     "SECONDS_OFFSET=11,"+
 | |
|     "SECONDS_LENGTH=2,"+
 | |
|     "LEN_HOURS_OFFSET=0,"+
 | |
|     "LEN_HOURS_LENGTH=0,"+
 | |
|     "LEN_MINUTES_OFFSET=97,"+
 | |
|     "LEN_MINUTES_LENGTH=2,"+
 | |
|     "LEN_SECONDS_OFFSET=99,"+
 | |
|     "LEN_SECONDS_LENGTH=2,"+
 | |
|     "EVENT_ID_OFFSET=0,"+
 | |
|     "EVENT_ID_LENGTH=0,"+
 | |
|     "DATA_OFFSET=0,"+
 | |
|     "DATA_LENGTH=0";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   sql=QString("insert into IMPORT_TEMPLATES set ")+
 | |
|     "NAME=\"Music 1\","+
 | |
|     "CART_OFFSET=10,"+
 | |
|     "CART_LENGTH=6,"+
 | |
|     "TITLE_OFFSET=25,"+
 | |
|     "TITLE_LENGTH=34,"+
 | |
|     "HOURS_OFFSET=0,"+
 | |
|     "HOURS_LENGTH=2,"+
 | |
|     "MINUTES_OFFSET=3,"+
 | |
|     "MINUTES_LENGTH=2,"+
 | |
|     "SECONDS_OFFSET=6,"+
 | |
|     "SECONDS_LENGTH=2,"+
 | |
|     "LEN_HOURS_OFFSET=60,"+
 | |
|     "LEN_HOURS_LENGTH=2,"+
 | |
|     "LEN_MINUTES_OFFSET=63,"+
 | |
|     "LEN_MINUTES_LENGTH=2,"+
 | |
|     "LEN_SECONDS_OFFSET=66,"+
 | |
|     "LEN_SECONDS_LENGTH=2,"+
 | |
|     "DATA_OFFSET=69,"+
 | |
|     "DATA_LENGTH=32";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   sql=QString("insert into IMPORT_TEMPLATES set ")+
 | |
|     "NAME=\"NaturalLog\","+
 | |
|     "CART_OFFSET=9,"+
 | |
|     "CART_LENGTH=6,"+
 | |
|     "TITLE_OFFSET=19,"+
 | |
|     "TITLE_LENGTH=40,"+
 | |
|     "HOURS_OFFSET=0,"+
 | |
|     "HOURS_LENGTH=2,"+
 | |
|     "MINUTES_OFFSET=3,"+
 | |
|     "MINUTES_LENGTH=2,"+
 | |
|     "SECONDS_OFFSET=6,"+
 | |
|     "SECONDS_LENGTH=2,"+
 | |
|     "LEN_HOURS_OFFSET=61,"+
 | |
|     "LEN_HOURS_LENGTH=2,"+
 | |
|     "LEN_MINUTES_OFFSET=64,"+
 | |
|     "LEN_MINUTES_LENGTH=2,"+
 | |
|     "LEN_SECONDS_OFFSET=67,"+
 | |
|     "LEN_SECONDS_LENGTH=2,"+
 | |
|     "DATA_OFFSET=0,"+
 | |
|     "DATA_LENGTH=0";
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| 
 | |
| bool MainObject::InsertRDAirplayHotkeys(const QString &station_name,
 | |
| 					QString *err_msg) const
 | |
| {
 | |
|   QString sql;
 | |
|   QStringList labels;
 | |
| 
 | |
|   labels.push_back(QObject::tr("Start Line 1"));
 | |
|   labels.push_back(QObject::tr("Stop Line 1"));
 | |
|   labels.push_back(QObject::tr("Pause Line 1"));
 | |
|   labels.push_back(QObject::tr("Start Line 2"));
 | |
|   labels.push_back(QObject::tr("Stop Line 2"));
 | |
|   labels.push_back(QObject::tr("Pause Line 2"));
 | |
|   labels.push_back(QObject::tr("Start Line 3"));
 | |
|   labels.push_back(QObject::tr("Stop Line 3"));
 | |
|   labels.push_back(QObject::tr("Pause Line 3"));
 | |
|   labels.push_back(QObject::tr("Start Line 4"));
 | |
|   labels.push_back(QObject::tr("Stop Line 4"));
 | |
|   labels.push_back(QObject::tr("Pause Line 4"));
 | |
|   labels.push_back(QObject::tr("Start Line 5"));
 | |
|   labels.push_back(QObject::tr("Stop Line 5"));
 | |
|   labels.push_back(QObject::tr("Pause Line 5"));
 | |
|   labels.push_back(QObject::tr("Start Line 6"));
 | |
|   labels.push_back(QObject::tr("Stop Line 6"));
 | |
|   labels.push_back(QObject::tr("Pause Line 6"));
 | |
|   labels.push_back(QObject::tr("Start Line 7"));
 | |
|   labels.push_back(QObject::tr("Stop Line 7"));
 | |
|   labels.push_back(QObject::tr("Pause Line 7"));
 | |
|   labels.push_back(QObject::tr("Add"));
 | |
|   labels.push_back(QObject::tr("Delete"));
 | |
|   labels.push_back(QObject::tr("Copy"));
 | |
|   labels.push_back(QObject::tr("Move"));
 | |
|   labels.push_back(QObject::tr("Sound Panel"));
 | |
|   labels.push_back(QObject::tr("Main Log"));
 | |
|   labels.push_back(QObject::tr("Aux Log 1"));
 | |
|   labels.push_back(QObject::tr("Aux Log 2"));
 | |
| 
 | |
|   for(int i=0;i<labels.size();i++) {
 | |
|     sql=QString("insert into RDHOTKEYS set ")+
 | |
|       "STATION_NAME=\""+RDEscapeString(station_name)+"\","+
 | |
|       "MODULE_NAME=\"airplay\","+
 | |
|       QString().sprintf("KEY_ID=%u,",i+1)+
 | |
|       "KEY_LABEL=\""+RDEscapeString(labels[i])+"\"";
 | |
|     if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| 
 | |
| bool MainObject::CreateReconciliationTable(const QString &svc_name,
 | |
| 					   QString *err_msg) const
 | |
| {
 | |
|   QString tablename=svc_name;
 | |
|   tablename.replace(" ","_");
 | |
|   QString sql=QString("create table `")+tablename+"_SRT` ("+
 | |
|     "ID int unsigned auto_increment primary key,"+
 | |
|     "LENGTH int,"+
 | |
|     "LOG_NAME char(64),"+
 | |
|     "LOG_ID int,"+
 | |
|     "CART_NUMBER int unsigned,"+
 | |
|     "CUT_NUMBER int,"+
 | |
|     "TITLE char(255),"+
 | |
|     "ARTIST char(255),"+
 | |
|     "PUBLISHER char(64),"+
 | |
|     "COMPOSER char(64),"+
 | |
|     "USER_DEFINED char(255),"+
 | |
|     "SONG_ID char(32),"+
 | |
|     "ALBUM char(255),"+
 | |
|     "LABEL char(64),"+
 | |
|     "CONDUCTOR char(64),"+
 | |
|     "USAGE_CODE int,"+
 | |
|     "DESCRIPTION char(64),"+
 | |
|     "OUTCUE char(64),"+
 | |
|     "ISRC char(12),"+
 | |
|     "ISCI char(32),"+
 | |
|     "STATION_NAME char(64),"+
 | |
|     "EVENT_DATETIME datetime,"+
 | |
|     "SCHEDULED_TIME time,"+
 | |
|     "EVENT_TYPE int,"+
 | |
|     "EVENT_SOURCE int,"+
 | |
|     "PLAY_SOURCE int,"+
 | |
|     "START_SOURCE int default 0,"+
 | |
|     "ONAIR_FLAG enum('N','Y') default 'N',"+
 | |
|     "EXT_START_TIME time,"+
 | |
|     "EXT_LENGTH int,"+
 | |
|     "EXT_CART_NAME char(32),"+
 | |
|     "EXT_DATA char(32),"+
 | |
|     "EXT_EVENT_ID char(8),"+
 | |
|     "EXT_ANNC_TYPE char(8),"+
 | |
|     "index EVENT_DATETIME_IDX(EVENT_DATETIME))"+
 | |
|     " charset latin1 collate latin1_swedish_ci"+
 | |
|     db_table_create_postfix;
 | |
|   if(!RDSqlQuery::apply(sql,err_msg)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   return true;
 | |
| }
 |