From 674bab322e341684efaeb3ff1eda448fc13cc7f7 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Wed, 20 Sep 2017 12:44:31 -0400 Subject: [PATCH] 2017-09-20 Fred Gleason * Added a 'DROPBOXES.FORCE_TO_MONO' field to the database. * Incremented the database version to 268. * 'RDDropbox::forceToMono()' and 'RDDropbox::setForceToMon()' methods in 'lib/rddropbox.cpp' and 'lib/rddropbox.h'. * Added a 'Force to Monaural' checkbox to the 'Edit Dropbox' dialog in rdadmin(1). --- ChangeLog | 7 ++ docs/tables/dropboxes.txt | 1 + lib/dbversion.h | 2 +- lib/rddropbox.cpp | 13 ++++ lib/rddropbox.h | 2 + rdadmin/createdb.cpp | 8 +++ rdadmin/edit_dropbox.cpp | 74 +++++++++++-------- rdadmin/edit_dropbox.h | 2 + rdadmin/rdadmin_cs.ts | 4 ++ rdadmin/rdadmin_de.ts | 4 ++ rdadmin/rdadmin_es.ts | 4 ++ rdadmin/rdadmin_fr.ts | 4 ++ rdadmin/rdadmin_nb.ts | 4 ++ rdadmin/rdadmin_nn.ts | 4 ++ rdadmin/rdadmin_pt_BR.ts | 4 ++ rdcatchd/Makefile.am | 3 +- rdcatchd/rdcatchd.cpp | 94 ------------------------ rdcatchd/startdropboxes.cpp | 138 ++++++++++++++++++++++++++++++++++++ utils/rdrevert/rdrevert.cpp | 19 ++++- utils/rdrevert/rdrevert.h | 1 + 20 files changed, 264 insertions(+), 128 deletions(-) create mode 100644 rdcatchd/startdropboxes.cpp diff --git a/ChangeLog b/ChangeLog index 73faae29..f23074a7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16032,3 +16032,10 @@ * Fixed a formatting bobble in 'web/rdxport/rdxport.cpp'. 2017-09-20 Fred Gleason * Added a '--to-mono' option to rdimport(1). +2017-09-20 Fred Gleason + * Added a 'DROPBOXES.FORCE_TO_MONO' field to the database. + * Incremented the database version to 268. + * 'RDDropbox::forceToMono()' and 'RDDropbox::setForceToMon()' methods + in 'lib/rddropbox.cpp' and 'lib/rddropbox.h'. + * Added a 'Force to Monaural' checkbox to the 'Edit Dropbox' dialog + in rdadmin(1). diff --git a/docs/tables/dropboxes.txt b/docs/tables/dropboxes.txt index 40b4ffee..6a3d3615 100644 --- a/docs/tables/dropboxes.txt +++ b/docs/tables/dropboxes.txt @@ -13,6 +13,7 @@ NORMALIZATION_LEVEL int(11) AUTOTRIM_LEVEL int(11) SINGLE_CART enum('N','Y') TO_CART uint(10) +FORCE_TO_MONO enum('N','Y') USE_CARTCHUNK_ID enum('N','Y') TITLE_FROM_CARTCHUNK_ID enum('N','Y') Set Rivendell cart title from cartchunk cutid. DELETE_CUTS enum('N','Y') diff --git a/lib/dbversion.h b/lib/dbversion.h index 9ed0eb7c..0936925f 100644 --- a/lib/dbversion.h +++ b/lib/dbversion.h @@ -24,7 +24,7 @@ /* * Current Database Version */ -#define RD_VERSION_DATABASE 267 +#define RD_VERSION_DATABASE 268 #endif // DBVERSION_H diff --git a/lib/rddropbox.cpp b/lib/rddropbox.cpp index 5e089edc..cd73183a 100644 --- a/lib/rddropbox.cpp +++ b/lib/rddropbox.cpp @@ -126,6 +126,19 @@ void RDDropbox::setSingleCart(bool state) const } +bool RDDropbox::forceToMono() const +{ + return RDBool(RDGetSqlValue("DROPBOXES","ID",box_id,"FORCE_TO_MONO"). + toString()); +} + + +void RDDropbox::setForceToMono(bool state) const +{ + SetRow("FORCE_TO_MONO",state); +} + + unsigned RDDropbox::toCart() const { return RDGetSqlValue("DROPBOXES","ID",box_id,"TO_CART").toUInt(); diff --git a/lib/rddropbox.h b/lib/rddropbox.h index 78c1fe0e..63d43dc5 100644 --- a/lib/rddropbox.h +++ b/lib/rddropbox.h @@ -41,6 +41,8 @@ class RDDropbox void setAutotrimLevel(int lvl) const; bool singleCart() const; void setSingleCart(bool state) const; + bool forceToMono() const; + void setForceToMono(bool state) const; unsigned toCart() const; void setToCart(unsigned cart) const; bool useCartchunkId() const; diff --git a/rdadmin/createdb.cpp b/rdadmin/createdb.cpp index dd302853..f1c8e68e 100644 --- a/rdadmin/createdb.cpp +++ b/rdadmin/createdb.cpp @@ -1749,6 +1749,7 @@ bool CreateDb(QString name,QString pwd) 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',\ USE_CARTCHUNK_ID enum('N','Y') default 'N',\ TITLE_FROM_CARTCHUNK_ID enum('N','Y') default 'N',\ DELETE_CUTS enum('N','Y') default 'N',\ @@ -8466,6 +8467,13 @@ int UpdateDb(int ver) delete q; } + if(ver<268) { + sql=QString("alter table DROPBOXES add column ")+ + "FORCE_TO_MONO enum('N','Y') default 'N' after TO_CART"; + q=new RDSqlQuery(sql); + delete q; + } + // // Maintainer's Note: diff --git a/rdadmin/edit_dropbox.cpp b/rdadmin/edit_dropbox.cpp index a3079416..7276b1e9 100644 --- a/rdadmin/edit_dropbox.cpp +++ b/rdadmin/edit_dropbox.cpp @@ -183,24 +183,34 @@ EditDropbox::EditDropbox(int id,QWidget *parent) label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); + // + // Force To Mono + // + box_force_to_mono_box=new QCheckBox(this); + box_force_to_mono_box->setGeometry(90,199,15,15); + label=new QLabel(box_force_to_mono_box,tr("Force to Monaural"),this); + label->setGeometry(110,197,sizeHint().width()-120,20); + label->setFont(font); + label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); + // // Normalization // box_normalization_box=new QCheckBox(this); - box_normalization_box->setGeometry(90,199,15,15); + box_normalization_box->setGeometry(90,221,15,15); label=new QLabel(box_normalization_box,tr("Normalize Levels"),this); - label->setGeometry(110,197,100,20); + label->setGeometry(110,219,100,20); label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); box_normalization_level_spin=new QSpinBox(this); - box_normalization_level_spin->setGeometry(275,197,50,20); + box_normalization_level_spin->setGeometry(275,219,50,20); box_normalization_level_spin->setRange(-100,-1); box_normalization_level_label=new QLabel(tr("Level:"),this); - box_normalization_level_label->setGeometry(210,197,60,20); + box_normalization_level_label->setGeometry(210,219,60,20); box_normalization_level_label->setFont(font); box_normalization_level_label->setAlignment(AlignVCenter|AlignRight); box_normalization_level_unit=new QLabel(tr("dBFS"),this); - box_normalization_level_unit->setGeometry(330,197,60,20); + box_normalization_level_unit->setGeometry(330,219,60,20); box_normalization_level_unit->setAlignment(AlignVCenter|AlignLeft); connect(box_normalization_box,SIGNAL(toggled(bool)), this,SLOT(normalizationToggledData(bool))); @@ -209,20 +219,20 @@ EditDropbox::EditDropbox(int id,QWidget *parent) // Autotrim // box_autotrim_box=new QCheckBox(this); - box_autotrim_box->setGeometry(90,223,15,15); + box_autotrim_box->setGeometry(90,245,15,15); label=new QLabel(box_autotrim_box,tr("Autotrim Cuts"),this); - label->setGeometry(110,221,100,20); + label->setGeometry(110,243,100,20); label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); box_autotrim_level_spin=new QSpinBox(this); - box_autotrim_level_spin->setGeometry(275,221,50,20); + box_autotrim_level_spin->setGeometry(275,243,50,20); box_autotrim_level_spin->setRange(-100,-1); box_autotrim_level_label=new QLabel(tr("Level:"),this); - box_autotrim_level_label->setGeometry(210,221,60,20); + box_autotrim_level_label->setGeometry(210,243,60,20); box_autotrim_level_label->setFont(font); box_autotrim_level_label->setAlignment(AlignVCenter|AlignRight); box_autotrim_level_unit=new QLabel(tr("dBFS"),this); - box_autotrim_level_unit->setGeometry(330,221,60,20); + box_autotrim_level_unit->setGeometry(330,243,60,20); box_autotrim_level_unit->setAlignment(AlignVCenter|AlignLeft); connect(box_autotrim_box,SIGNAL(toggled(bool)), this,SLOT(autotrimToggledData(bool))); @@ -231,10 +241,10 @@ EditDropbox::EditDropbox(int id,QWidget *parent) // Use CartChunk ID // box_use_cartchunk_id_box=new QCheckBox(this); - box_use_cartchunk_id_box->setGeometry(90,249,15,15); + box_use_cartchunk_id_box->setGeometry(90,271,15,15); label=new QLabel(box_use_cartchunk_id_box, tr("Get cart number from CartChunk CutID"),this); - label->setGeometry(110,247,sizeHint().width()-40,20); + label->setGeometry(110,269,sizeHint().width()-40,20); label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); @@ -242,10 +252,10 @@ EditDropbox::EditDropbox(int id,QWidget *parent) // Title from CartChunk ID // box_title_from_cartchunk_id_box=new QCheckBox(this); - box_title_from_cartchunk_id_box->setGeometry(90,273,15,15); + box_title_from_cartchunk_id_box->setGeometry(90,295,15,15); label=new QLabel(box_title_from_cartchunk_id_box, tr("Get cart title from CartChunk CutID"),this); - label->setGeometry(110,271,sizeHint().width()-40,20); + label->setGeometry(110,293,sizeHint().width()-40,20); label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); @@ -253,10 +263,10 @@ EditDropbox::EditDropbox(int id,QWidget *parent) // Fix Broken Formats // box_fix_broken_formats_box=new QCheckBox(this); - box_fix_broken_formats_box->setGeometry(90,297,15,15); + box_fix_broken_formats_box->setGeometry(90,319,15,15); label=new QLabel(box_fix_broken_formats_box, tr("Attempt to work around malformatted input files"),this); - label->setGeometry(110,295,sizeHint().width()-40,20); + label->setGeometry(110,317,sizeHint().width()-40,20); label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); @@ -265,14 +275,14 @@ EditDropbox::EditDropbox(int id,QWidget *parent) // box_startoffset_spin= new QSpinBox(this); - box_startoffset_spin->setGeometry(215,319,50,20); + box_startoffset_spin->setGeometry(215,341,50,20); box_startoffset_spin->setRange(-7,7); label=new QLabel(box_startoffset_spin,tr("Offset start date by"),this); - label->setGeometry(90,319,120,20); + label->setGeometry(90,341,120,20); label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); label=new QLabel(box_startoffset_spin,tr("days"),this); - label->setGeometry(275,321,100,20); + label->setGeometry(275,343,100,20); label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); @@ -281,14 +291,14 @@ EditDropbox::EditDropbox(int id,QWidget *parent) // box_endoffset_spin= new QSpinBox(this); - box_endoffset_spin->setGeometry(215,343,50,20); + box_endoffset_spin->setGeometry(215,365,50,20); box_endoffset_spin->setRange(-7,7); label=new QLabel(box_endoffset_spin,tr("Offset end date by"),this); - label->setGeometry(90,343,120,20); + label->setGeometry(90,365,120,20); label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); label=new QLabel(box_endoffset_spin,tr("days"),this); - label->setGeometry(275,343,100,20); + label->setGeometry(275,365,100,20); label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); @@ -296,38 +306,38 @@ EditDropbox::EditDropbox(int id,QWidget *parent) // Create Dates // box_create_dates_box=new QCheckBox(this); - box_create_dates_box->setGeometry(90,377,15,15); + box_create_dates_box->setGeometry(90,399,15,15); label=new QLabel(box_create_dates_box,tr("Create Dates when no Dates Exist"), this); - label->setGeometry(110,375,sizeHint().width()-40,20); + label->setGeometry(110,397,sizeHint().width()-40,20); label->setFont(font); label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix); box_create_startdate_offset_spin= new QSpinBox(this); - box_create_startdate_offset_spin->setGeometry(300,401,50,20); + box_create_startdate_offset_spin->setGeometry(300,423,50,20); box_create_startdate_offset_spin->setRange(-180,180); box_create_startdate_label= new QLabel(box_create_startdate_offset_spin,tr("Create start date offset:"), this); - box_create_startdate_label->setGeometry(120,401,160,20); + box_create_startdate_label->setGeometry(120,423,160,20); box_create_startdate_label->setFont(font); box_create_startdate_label->setAlignment(AlignVCenter|AlignRight); box_create_startdate_unit= new QLabel(box_create_startdate_offset_spin,("days"),this); - box_create_startdate_unit->setGeometry(360,403,60,20); + box_create_startdate_unit->setGeometry(360,424,60,20); box_create_startdate_unit->setAlignment(AlignVCenter|AlignLeft); box_create_enddate_offset_spin=new QSpinBox(this); - box_create_enddate_offset_spin->setGeometry(300,431,50,20); + box_create_enddate_offset_spin->setGeometry(300,453,50,20); box_create_enddate_offset_spin->setRange(-180,180); box_create_enddate_label= new QLabel(box_create_enddate_offset_spin,tr("Create end date offset:"), this); - box_create_enddate_label->setGeometry(120,431,160,20); + box_create_enddate_label->setGeometry(120,453,160,20); box_create_enddate_label->setFont(font); box_create_enddate_label->setAlignment(AlignVCenter|AlignRight); box_create_enddate_unit= new QLabel(box_create_enddate_offset_spin,("days"),this); - box_create_enddate_unit->setGeometry(360,431,60,20); + box_create_enddate_unit->setGeometry(360,453,60,20); box_create_enddate_unit->setAlignment(AlignVCenter|AlignLeft); connect(box_create_dates_box,SIGNAL(toggled(bool)), this,SLOT(createDatesToggledData(bool))); @@ -374,6 +384,7 @@ EditDropbox::EditDropbox(int id,QWidget *parent) box_metadata_pattern_edit->setText(box_dropbox->metadataPattern()); box_user_defined_edit->setText(box_dropbox->userDefined()); box_delete_source_box->setChecked(box_dropbox->deleteSource()); + box_force_to_mono_box->setChecked(box_dropbox->forceToMono()); box_normalization_box->setChecked(box_dropbox->normalizationLevel()<0); box_normalization_level_spin-> setValue(box_dropbox->normalizationLevel()/100); @@ -404,7 +415,7 @@ EditDropbox::EditDropbox(int id,QWidget *parent) QSize EditDropbox::sizeHint() const { - return QSize(450,551); + return QSize(450,573); } @@ -508,6 +519,7 @@ void EditDropbox::okData() box_dropbox->setMetadataPattern(box_metadata_pattern_edit->text()); box_dropbox->setUserDefined(box_user_defined_edit->text()); box_dropbox->setDeleteSource(box_delete_source_box->isChecked()); + box_dropbox->setForceToMono(box_force_to_mono_box->isChecked()); if(box_normalization_box->isChecked()) { box_dropbox-> setNormalizationLevel(box_normalization_level_spin->value()*100); diff --git a/rdadmin/edit_dropbox.h b/rdadmin/edit_dropbox.h index 794938cd..cd7842e4 100644 --- a/rdadmin/edit_dropbox.h +++ b/rdadmin/edit_dropbox.h @@ -65,6 +65,8 @@ class EditDropbox : public QDialog QPushButton *box_schedcodes_button; QCheckBox *box_delete_cuts_box; QLabel *box_delete_cuts_label; + QCheckBox *box_force_to_mono_box; + QLabel *box_force_to_mono_label; QLineEdit *box_metadata_pattern_edit; QLineEdit *box_user_defined_edit; QLineEdit *box_log_path_edit; diff --git a/rdadmin/rdadmin_cs.ts b/rdadmin/rdadmin_cs.ts index 0efbce47..c7c3e075 100644 --- a/rdadmin/rdadmin_cs.ts +++ b/rdadmin/rdadmin_cs.ts @@ -1247,6 +1247,10 @@ nastaveném pro běh služby CAE pro naplnění databáze se zdroji zvuku.Scheduler Codes + + Force to Monaural + + EditEncoder diff --git a/rdadmin/rdadmin_de.ts b/rdadmin/rdadmin_de.ts index 7fd1876a..77819711 100644 --- a/rdadmin/rdadmin_de.ts +++ b/rdadmin/rdadmin_de.ts @@ -1215,6 +1215,10 @@ configured to run the CAE service in order to populate the audio resources datab Scheduler Codes + + Force to Monaural + + EditEncoder diff --git a/rdadmin/rdadmin_es.ts b/rdadmin/rdadmin_es.ts index 2918468c..c25aa99d 100644 --- a/rdadmin/rdadmin_es.ts +++ b/rdadmin/rdadmin_es.ts @@ -1241,6 +1241,10 @@ computador para obtener los recursos de audio de dicho equipo. Scheduler Codes + + Force to Monaural + + EditEncoder diff --git a/rdadmin/rdadmin_fr.ts b/rdadmin/rdadmin_fr.ts index 91147b43..9c2ca06e 100644 --- a/rdadmin/rdadmin_fr.ts +++ b/rdadmin/rdadmin_fr.ts @@ -1002,6 +1002,10 @@ configured to run the CAE service in order to populate the audio resources datab Scheduler Codes + + Force to Monaural + + EditEncoder diff --git a/rdadmin/rdadmin_nb.ts b/rdadmin/rdadmin_nb.ts index 266691a3..53b838c8 100644 --- a/rdadmin/rdadmin_nb.ts +++ b/rdadmin/rdadmin_nb.ts @@ -1197,6 +1197,10 @@ configured to run the CAE service in order to populate the audio resources datab Scheduler Codes + + Force to Monaural + + EditEncoder diff --git a/rdadmin/rdadmin_nn.ts b/rdadmin/rdadmin_nn.ts index 266691a3..53b838c8 100644 --- a/rdadmin/rdadmin_nn.ts +++ b/rdadmin/rdadmin_nn.ts @@ -1197,6 +1197,10 @@ configured to run the CAE service in order to populate the audio resources datab Scheduler Codes + + Force to Monaural + + EditEncoder diff --git a/rdadmin/rdadmin_pt_BR.ts b/rdadmin/rdadmin_pt_BR.ts index 73d8a892..8f69f085 100644 --- a/rdadmin/rdadmin_pt_BR.ts +++ b/rdadmin/rdadmin_pt_BR.ts @@ -1198,6 +1198,10 @@ configured to run the CAE service in order to populate the audio resources datab Scheduler Codes + + Force to Monaural + + EditEncoder diff --git a/rdcatchd/Makefile.am b/rdcatchd/Makefile.am index db0742e0..696dc43f 100644 --- a/rdcatchd/Makefile.am +++ b/rdcatchd/Makefile.am @@ -35,7 +35,8 @@ dist_rdcatchd_SOURCES = batch.cpp\ event_player.cpp event_player.h\ local_macros.cpp\ rdcatchd.cpp rdcatchd.h\ - rdcatchd_socket.cpp rdcatchd_socket.h + rdcatchd_socket.cpp rdcatchd_socket.h\ + startdropboxes.cpp nodist_rdcatchd_SOURCES = moc_event_player.cpp\ moc_rdcatchd.cpp\ diff --git a/rdcatchd/rdcatchd.cpp b/rdcatchd/rdcatchd.cpp index 87b5723a..2b8c03b8 100644 --- a/rdcatchd/rdcatchd.cpp +++ b/rdcatchd/rdcatchd.cpp @@ -2655,100 +2655,6 @@ void MainObject::ResolveErrorWildcards(CatchEvent *event, } -void MainObject::StartDropboxes() -{ - QString sql; - RDSqlQuery *q; - RDSqlQuery *q1; - - // - // Kill Old Instances - // - system("killall rdimport"); - - // - // Launch Dropbox Configurations - // - sql=QString("select ID,GROUP_NAME,PATH,NORMALIZATION_LEVEL,")+ - "AUTOTRIM_LEVEL,TO_CART,USE_CARTCHUNK_ID,TITLE_FROM_CARTCHUNK_ID,"+ - "DELETE_CUTS,METADATA_PATTERN,FIX_BROKEN_FORMATS,LOG_PATH,"+ - "DELETE_SOURCE,STARTDATE_OFFSET,ENDDATE_OFFSET,ID,"+ - "IMPORT_CREATE_DATES,CREATE_STARTDATE_OFFSET,"+ - "CREATE_ENDDATE_OFFSET,SET_USER_DEFINED "+ - "from DROPBOXES where STATION_NAME=\""+ - RDEscapeString(catch_config->stationName())+"\""; - q=new RDSqlQuery(sql); - while(q->next()) { - QString cmd=QString(). - sprintf("nice rdimport --persistent-dropbox-id=%d --drop-box --log-mode", - q->value(15).toInt()); - sql=QString("select SCHED_CODE from DROPBOX_SCHED_CODES where ")+ - QString().sprintf("DROPBOX_ID=%d",q->value(0).toInt()); - q1=new RDSqlQuery(sql); - while(q1->next()) { - cmd+=QString(" --add-scheduler-code=\"")+q1->value(0).toString()+"\""; - } - delete q1; - cmd+= - QString().sprintf(" --normalization-level=%d",q->value(3).toInt()/100); - cmd+= - QString().sprintf(" --autotrim-level=%d",q->value(4).toInt()/100); - if(q->value(5).toUInt()>0) { - cmd+=QString().sprintf(" --to-cart=%u",q->value(5).toUInt()); - } - if(q->value(6).toString()=="Y") { - cmd+=" --use-cartchunk-cutid"; - } - if(q->value(7).toString()=="Y") { - cmd+=" --title-from-cartchunk-cutid"; - } - if(q->value(8).toString()=="Y") { - cmd+=" --delete-cuts"; - } - if(!q->value(9).toString().isEmpty()) { - cmd+=QString().sprintf(" \"--metadata-pattern=%s\"", - (const char *)q->value(9).toString()); - } - if(q->value(10).toString()=="Y") { - cmd+=" --fix-broken-formats"; - } - if(q->value(12).toString()=="Y") { - cmd+=" --delete-source"; - } - if(q->value(16).toString()=="Y") { - cmd+=QString().sprintf(" --create-startdate-offset=%d", - q->value(17).toInt()); - cmd+=QString().sprintf(" --create-enddate-offset=%d", - q->value(18).toInt()); - } - if(!q->value(19).toString().isEmpty()) { - cmd+=" --set-user-defined="+RDEscapeString(q->value(19).toString()); - } - cmd+=QString().sprintf(" --startdate-offset=%d",q->value(13).toInt()); - cmd+=QString().sprintf(" --enddate-offset=%d",q->value(14).toInt()); - cmd+=QString().sprintf(" %s \"%s\"",(const char *)q->value(1).toString(), - (const char *)q->value(2).toString()); - if(!q->value(11).toString().isEmpty()) { - cmd+=QString().sprintf(" >> %s 2>> %s", - (const char *)q->value(11).toString(), - (const char *)q->value(11).toString()); - } - else { - cmd+=" > /dev/null 2> /dev/null"; - } - cmd+=" &"; - LogLine(RDConfig::LogInfo,QString(). - sprintf("launching dropbox configuration: \"%s\"", - (const char *)cmd)); - if(fork()==0) { - system(cmd); - exit(0); - } - } - delete q; -} - - unsigned MainObject::GetNextDynamicId() { unsigned id=RDCATCHD_DYNAMIC_BASE_ID; diff --git a/rdcatchd/startdropboxes.cpp b/rdcatchd/startdropboxes.cpp new file mode 100644 index 00000000..3db621a5 --- /dev/null +++ b/rdcatchd/startdropboxes.cpp @@ -0,0 +1,138 @@ +// rdcatchd.cpp +// +// The Rivendell Netcatcher Daemon Dropbox methods +// +// (C) Copyright 2017 Fred Gleason +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// 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 "rdcatchd.h" + +void MainObject::StartDropboxes() +{ + QString sql; + RDSqlQuery *q; + RDSqlQuery *q1; + + // + // Kill Old Instances + // + system("killall rdimport"); + + // + // Launch Dropbox Configurations + // + sql=QString("select ")+ + "ID,"+ // 00 + "GROUP_NAME,"+ // 01 + "PATH,"+ // 02 + "NORMALIZATION_LEVEL,"+ // 03 + "AUTOTRIM_LEVEL,"+ // 04 + "TO_CART,"+ // 05 + "USE_CARTCHUNK_ID,"+ // 06 + "TITLE_FROM_CARTCHUNK_ID,"+ // 07 + "DELETE_CUTS,"+ // 08 + "METADATA_PATTERN,"+ // 09 + "FIX_BROKEN_FORMATS,"+ // 10 + "LOG_PATH,"+ // 11 + "DELETE_SOURCE,"+ // 12 + "STARTDATE_OFFSET,"+ // 13 + "ENDDATE_OFFSET,"+ // 14 + "ID,"+ // 15 + "IMPORT_CREATE_DATES,"+ // 16 + "CREATE_STARTDATE_OFFSET,"+ // 17 + "CREATE_ENDDATE_OFFSET,"+ // 18 + "SET_USER_DEFINED,"+ // 19 + "FORCE_TO_MONO "+ // 20 + "from DROPBOXES where "+ + "STATION_NAME=\""+RDEscapeString(catch_config->stationName())+"\""; + q=new RDSqlQuery(sql); + while(q->next()) { + QString cmd=QString(). + sprintf("nice rdimport --persistent-dropbox-id=%d --drop-box --log-mode", + q->value(15).toInt()); + sql=QString("select SCHED_CODE from DROPBOX_SCHED_CODES where ")+ + QString().sprintf("DROPBOX_ID=%d",q->value(0).toInt()); + q1=new RDSqlQuery(sql); + while(q1->next()) { + cmd+=QString(" --add-scheduler-code=\"")+q1->value(0).toString()+"\""; + } + delete q1; + cmd+= + QString().sprintf(" --normalization-level=%d",q->value(3).toInt()/100); + cmd+= + QString().sprintf(" --autotrim-level=%d",q->value(4).toInt()/100); + if(q->value(5).toUInt()>0) { + cmd+=QString().sprintf(" --to-cart=%u",q->value(5).toUInt()); + } + if(q->value(6).toString()=="Y") { + cmd+=" --use-cartchunk-cutid"; + } + if(q->value(7).toString()=="Y") { + cmd+=" --title-from-cartchunk-cutid"; + } + if(q->value(8).toString()=="Y") { + cmd+=" --delete-cuts"; + } + if(q->value(20).toString()=="Y") { + cmd+=" --to-mono"; + } + if(!q->value(9).toString().isEmpty()) { + cmd+=QString().sprintf(" \"--metadata-pattern=%s\"", + (const char *)q->value(9).toString()); + } + if(q->value(10).toString()=="Y") { + cmd+=" --fix-broken-formats"; + } + if(q->value(12).toString()=="Y") { + cmd+=" --delete-source"; + } + if(q->value(16).toString()=="Y") { + cmd+=QString().sprintf(" --create-startdate-offset=%d", + q->value(17).toInt()); + cmd+=QString().sprintf(" --create-enddate-offset=%d", + q->value(18).toInt()); + } + if(!q->value(19).toString().isEmpty()) { + cmd+=" --set-user-defined="+RDEscapeString(q->value(19).toString()); + } + cmd+=QString().sprintf(" --startdate-offset=%d",q->value(13).toInt()); + cmd+=QString().sprintf(" --enddate-offset=%d",q->value(14).toInt()); + cmd+=QString().sprintf(" %s \"%s\"",(const char *)q->value(1).toString(), + (const char *)q->value(2).toString()); + if(!q->value(11).toString().isEmpty()) { + cmd+=QString().sprintf(" >> %s 2>> %s", + (const char *)q->value(11).toString(), + (const char *)q->value(11).toString()); + } + else { + cmd+=" > /dev/null 2> /dev/null"; + } + cmd+=" &"; + LogLine(RDConfig::LogInfo,QString(). + sprintf("launching dropbox configuration: \"%s\"", + (const char *)cmd)); + if(fork()==0) { + system(cmd); + exit(0); + } + } + delete q; +} diff --git a/utils/rdrevert/rdrevert.cpp b/utils/rdrevert/rdrevert.cpp index 90f07b13..1331d65d 100644 --- a/utils/rdrevert/rdrevert.cpp +++ b/utils/rdrevert/rdrevert.cpp @@ -227,6 +227,10 @@ void MainObject::Revert(int schema) const case 267: Revert267(); break; + + case 268: + Revert268(); + break; } } @@ -672,6 +676,19 @@ void MainObject::Revert267() const } +void MainObject::Revert268() const +{ + QString sql; + QSqlQuery *q; + + sql="alter table DROPBOXES drop column FORCE_TO_MONO"; + q=new QSqlQuery(sql); + delete q; + + SetVersion(267); +} + + int MainObject::GetVersion() const { QString sql; @@ -715,7 +732,7 @@ int MainObject::MapSchema(const QString &ver) version_map["2.14"]=258; version_map["2.15"]=259; version_map["2.16"]=263; - version_map["2.17"]=267; + version_map["2.17"]=268; // // Normalize String diff --git a/utils/rdrevert/rdrevert.h b/utils/rdrevert/rdrevert.h index 212c4e2c..da679ff1 100644 --- a/utils/rdrevert/rdrevert.h +++ b/utils/rdrevert/rdrevert.h @@ -63,6 +63,7 @@ class MainObject : public QObject void Revert265() const; void Revert266() const; void Revert267() const; + void Revert268() const; int GetVersion() const; void SetVersion(int schema) const; int MapSchema(const QString &ver);