// create.cpp // // Routines for --create for rddbmgr(8) // // (C) Copyright 2018-2021 Fred Gleason // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as // 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 #include #include #include #include #include #include #include #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::asprintf("`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::asprintf("`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::asprintf("`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::asprintf("`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;ih_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::asprintf("`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::asprintf("`INSTANCE`=%u",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("insert into `RDPANEL_CHANNELS` set ")+ "`STATION_NAME`='"+RDEscapeString(station_name)+"',"+ QString::asprintf("`INSTANCE`=%u",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } } for(int i=0;inext()) { sql=QString::asprintf("insert into `AUDIO_PERMS` set\ `GROUP_NAME`='%s',`SERVICE_NAME`='%s'", RDEscapeString(q->value(0).toString()). toUtf8().constData(), RDEscapeString(RD_SERVICE_NAME).toUtf8().constData()); 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::asprintf("`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::asprintf("`DEFAULT_CART_TYPE`=%d,",g->macro?2:1)+ QString::asprintf("`DEFAULT_LOW_CART`=%d,",g->start)+ QString::asprintf("`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::asprintf("`FADEUP_GAIN` int default %d,",RD_FADE_DEPTH)+ "`FADEDOWN_POINT` int default -1,"+ QString::asprintf("`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::asprintf("`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::asprintf("%s/999999_001.%s", RDConfiguration()->audioRoot().toUtf8().constData(), RDConfiguration()->audioExtension().toUtf8(). constData()); QString cmd=QString::asprintf("rdgen -t 10 -l 16 %s", filename.toUtf8().constData()); RDCheckExitCode("InititalizeNewDb() system",system(cmd.toUtf8())); if(getuid()==0) { RDCheckExitCode("InititalizeNewDb() chown", chown(filename.toUtf8(),RDConfiguration()->uid(), RDConfiguration()->gid())); chmod (filename.toUtf8(),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