diff --git a/AUTHORS b/AUTHORS index b3d0fe4d..500cd968 100644 --- a/AUTHORS +++ b/AUTHORS @@ -56,3 +56,8 @@ Scott Spillers Florent Peyraud Pypad fix + +David Klann + General bug fixes. + Add support for FTPS. + Add optional metadata updates in dropboxes. diff --git a/ChangeLog b/ChangeLog index 2be03aeb..6e1f43c3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -24239,3 +24239,7 @@ 2023-06-11 Fred Gleason * Incremented the package version to 4.0.0rc5. * Incremented the Python API version to 4.0.0rc5. +2023-06-14 David Klann + * Added support for updating library metadata on subsequent + dropbox imports + * Incremented the database version to 370. diff --git a/docs/manpages/rdimport.xml b/docs/manpages/rdimport.xml index 76cdd8c9..dcf1ff76 100644 --- a/docs/manpages/rdimport.xml +++ b/docs/manpages/rdimport.xml @@ -195,6 +195,19 @@ + + + + + + + Attempt to update the library metadata from the embedded data in + the source audio file when importing new audio + into an existing cart. + + + + @@ -1097,4 +1110,3 @@ - diff --git a/docs/opsguide/rdadmin.xml b/docs/opsguide/rdadmin.xml index abff7149..945f3af3 100644 --- a/docs/opsguide/rdadmin.xml +++ b/docs/opsguide/rdadmin.xml @@ -2041,6 +2041,16 @@ + + + Update Metadata + + + + Update Library metadata on successful importation when replacing audio in an existing cart. Checked or unchecked, this option has no effect on updating the metadata when importing audio into a cart for the first time. + + + Send e-mail reports diff --git a/docs/tables/dropboxes.txt b/docs/tables/dropboxes.txt index 27483cd9..470503b7 100644 --- a/docs/tables/dropboxes.txt +++ b/docs/tables/dropboxes.txt @@ -20,6 +20,8 @@ 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') DELETE_SOURCE enum('N','Y') +UPDATE_METADATA enum('N','Y') Update Library with source file metadata + on subsquent imports. SEND_EMAIL enum('N','Y') METADATA_PATTERN varchar(64) STARTDATE_OFFSET int(11) diff --git a/lib/rddropbox.cpp b/lib/rddropbox.cpp index 426ed27c..46330015 100644 --- a/lib/rddropbox.cpp +++ b/lib/rddropbox.cpp @@ -73,6 +73,7 @@ int RDDropbox::duplicate() const new_box->setTitleFromCartchunkId(titleFromCartchunkId()); new_box->setDeleteCuts(deleteCuts()); new_box->setDeleteSource(deleteSource()); + new_box->setUpdateMetadata(updateMetadata()); new_box->setSendEmail(sendEmail()); new_box->setMetadataPattern(metadataPattern()); new_box->setUserDefined(userDefined()); @@ -253,6 +254,19 @@ void RDDropbox::setSendEmail(bool state) const } +bool RDDropbox::updateMetadata() const +{ + return RDBool(RDGetSqlValue("DROPBOXES", "ID", box_id, "UPDATE_METADATA"). + toString()); +} + + +void RDDropbox::setUpdateMetadata(bool state)const +{ + SetRow("UPDATE_METADATA", state); +} + + QString RDDropbox::metadataPattern() const { return RDGetSqlValue("DROPBOXES","ID",box_id,"METADATA_PATTERN").toString(); diff --git a/lib/rddropbox.h b/lib/rddropbox.h index 96d95788..50e5c13f 100644 --- a/lib/rddropbox.h +++ b/lib/rddropbox.h @@ -56,6 +56,8 @@ class RDDropbox void setDeleteSource(bool state) const; bool sendEmail() const; void setSendEmail(bool state) const; + bool updateMetadata() const; + void setUpdateMetadata(bool state) const; QString metadataPattern() const; void setMetadataPattern(const QString &str) const; QString userDefined() const; diff --git a/rdadmin/edit_dropbox.cpp b/rdadmin/edit_dropbox.cpp index 84878bfb..08fee468 100644 --- a/rdadmin/edit_dropbox.cpp +++ b/rdadmin/edit_dropbox.cpp @@ -142,7 +142,7 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); box_log_path_edit=new QLineEdit(this); - box_log_path_edit->setGeometry(140,141,sizeHint().width()-210,19); + box_log_path_edit->setGeometry(140,137,sizeHint().width()-210,19); box_log_path_edit->setMaxLength(255); connect(box_log_to_syslog_check,SIGNAL(toggled(bool)), box_log_path_edit,SLOT(setDisabled(bool))); @@ -153,7 +153,7 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) connect(box_log_to_syslog_check,SIGNAL(toggled(bool)), box_log_path_label,SLOT(setDisabled(bool))); box_log_path_button=new QPushButton(tr("Select"),this); - box_log_path_button->setGeometry(sizeHint().width()-60,138,50,23); + box_log_path_button->setGeometry(sizeHint().width()-60,136,50,23); box_log_path_button->setFont(subButtonFont()); connect(box_log_path_button,SIGNAL(clicked()), this,SLOT(selectLogPathData())); @@ -164,7 +164,7 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) // Scheduler Codes // box_schedcodes_button=new QPushButton(tr("Scheduler Codes"),this); - box_schedcodes_button->setGeometry(110,167,200,25); + box_schedcodes_button->setGeometry(110,165,200,25); box_schedcodes_button->setFont(buttonFont()); connect(box_schedcodes_button,SIGNAL(clicked()),this,SLOT(schedcodesData())); @@ -178,13 +178,23 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) label->setFont(labelFont()); label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); + // + // Update Metadata + // + box_update_metadata_box = new QCheckBox(this); + box_update_metadata_box->setGeometry(90, 221, 15, 15); + label = new QLabel(tr("Update library metadata"), this); + label->setGeometry(110, 219, sizeHint().width() - 120, 20); + label->setFont(labelFont()); + label->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); + // // Send E-mail Reports // box_send_email_box=new QCheckBox(this); - box_send_email_box->setGeometry(90,221,15,15); + box_send_email_box->setGeometry(90,241,15,15); label=new QLabel(tr("Send e-mail reports"),this); - label->setGeometry(110,219,sizeHint().width()-120,20); + label->setGeometry(110,239,sizeHint().width()-120,20); label->setFont(labelFont()); label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); @@ -192,9 +202,9 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) // Force To Mono // box_force_to_mono_box=new QCheckBox(this); - box_force_to_mono_box->setGeometry(90,243,15,15); + box_force_to_mono_box->setGeometry(90,263,15,15); label=new QLabel(tr("Force to Monaural"),this); - label->setGeometry(110,241,sizeHint().width()-120,20); + label->setGeometry(110,261,sizeHint().width()-120,20); label->setFont(labelFont()); label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); @@ -202,21 +212,21 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) // Normalization // box_normalization_box=new QCheckBox(this); - box_normalization_box->setGeometry(90,264,15,15); + box_normalization_box->setGeometry(90,284,15,15); label=new QLabel(tr("Normalize Levels"),this); - label->setGeometry(110,262,100,20); + label->setGeometry(110,282,100,20); label->setFont(labelFont()); label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); box_normalization_level_spin=new QSpinBox(this); - box_normalization_level_spin->setGeometry(275,263,50,20); + box_normalization_level_spin->setGeometry(275,283,50,20); box_normalization_level_spin->setRange(-100,-1); box_normalization_level_label=new QLabel(tr("Level:"),this); - box_normalization_level_label->setGeometry(210,263,60,20); + box_normalization_level_label->setGeometry(210,283,60,20); box_normalization_level_label->setFont(labelFont()); box_normalization_level_label->setAlignment(Qt::AlignVCenter|Qt::AlignRight); box_normalization_level_unit=new QLabel(tr("dBFS"),this); box_normalization_level_unit->setFont(labelFont()); - box_normalization_level_unit->setGeometry(330,263,60,20); + box_normalization_level_unit->setGeometry(330,283,60,20); box_normalization_level_unit->setAlignment(Qt::AlignVCenter|Qt::AlignLeft); connect(box_normalization_box,SIGNAL(toggled(bool)), this,SLOT(normalizationToggledData(bool))); @@ -225,21 +235,21 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) // Autotrim // box_autotrim_box=new QCheckBox(this); - box_autotrim_box->setGeometry(90,289,15,15); + box_autotrim_box->setGeometry(90,309,15,15); label=new QLabel(tr("Autotrim Cuts"),this); - label->setGeometry(110,287,100,20); + label->setGeometry(110,307,100,20); label->setFont(labelFont()); label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); box_autotrim_level_spin=new QSpinBox(this); - box_autotrim_level_spin->setGeometry(275,287,50,20); + box_autotrim_level_spin->setGeometry(275,307,50,20); box_autotrim_level_spin->setRange(-100,-1); box_autotrim_level_label=new QLabel(tr("Level:"),this); - box_autotrim_level_label->setGeometry(210,287,60,20); + box_autotrim_level_label->setGeometry(210,307,60,20); box_autotrim_level_label->setFont(labelFont()); box_autotrim_level_label->setAlignment(Qt::AlignVCenter|Qt::AlignRight); box_autotrim_level_unit=new QLabel(tr("dBFS"),this); box_autotrim_level_unit->setFont(labelFont()); - box_autotrim_level_unit->setGeometry(330,287,60,20); + box_autotrim_level_unit->setGeometry(330,307,60,20); box_autotrim_level_unit->setAlignment(Qt::AlignVCenter|Qt::AlignLeft); connect(box_autotrim_box,SIGNAL(toggled(bool)), this,SLOT(autotrimToggledData(bool))); @@ -248,33 +258,33 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) // Segue // box_segue_box=new QCheckBox(this); - box_segue_box->setGeometry(90,315,15,15); + box_segue_box->setGeometry(90,335,15,15); label=new QLabel(tr("Insert Segue Markers"),this); - label->setGeometry(110,313,sizeHint().width()-40,20); + label->setGeometry(110,333,sizeHint().width()-40,20); label->setFont(labelFont()); label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); box_segue_level_spin=new QSpinBox(this); - box_segue_level_spin->setGeometry(285,339,50,20); + box_segue_level_spin->setGeometry(285,359,50,20); box_segue_level_spin->setRange(-100,0); box_segue_level_label=new QLabel(tr("Segue Level:"),this); - box_segue_level_label->setGeometry(120,339,160,20); + box_segue_level_label->setGeometry(120,360,160,20); box_segue_level_label->setFont(labelFont()); box_segue_level_label->setAlignment(Qt::AlignVCenter|Qt::AlignRight); box_segue_level_unit=new QLabel("dBFS",this); box_segue_level_unit->setFont(labelFont()); - box_segue_level_unit->setGeometry(360,340,60,20); + box_segue_level_unit->setGeometry(360,360,60,20); box_segue_level_unit->setAlignment(Qt::AlignVCenter|Qt::AlignLeft); box_segue_length_spin=new QSpinBox(this); - box_segue_length_spin->setGeometry(285,364,70,20); + box_segue_length_spin->setGeometry(285,384,70,20); box_segue_length_spin->setRange(0,180000); box_segue_length_label=new QLabel(tr("Segue Length:"),this); - box_segue_length_label->setGeometry(120,364,160,20); + box_segue_length_label->setGeometry(120,384,160,20); box_segue_length_label->setFont(labelFont()); box_segue_length_label->setAlignment(Qt::AlignVCenter|Qt::AlignRight); box_segue_length_unit=new QLabel("msec",this); box_segue_length_unit->setFont(labelFont()); - box_segue_length_unit->setGeometry(375,365,60,20); + box_segue_length_unit->setGeometry(375,385,60,20); box_segue_length_unit->setAlignment(Qt::AlignVCenter|Qt::AlignLeft); connect(box_segue_box,SIGNAL(toggled(bool)), this,SLOT(segueToggledData(bool))); @@ -283,9 +293,9 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) // Use CartChunk ID // box_use_cartchunk_id_box=new QCheckBox(this); - box_use_cartchunk_id_box->setGeometry(90,394,15,15); + box_use_cartchunk_id_box->setGeometry(90,418,15,15); label=new QLabel(tr("Get cart number from CartChunk CutID"),this); - label->setGeometry(110,392,sizeHint().width()-40,20); + label->setGeometry(110,416,sizeHint().width()-40,20); label->setFont(labelFont()); label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); @@ -293,9 +303,9 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) // Title from CartChunk ID // box_title_from_cartchunk_id_box=new QCheckBox(this); - box_title_from_cartchunk_id_box->setGeometry(90,418,15,15); + box_title_from_cartchunk_id_box->setGeometry(90,438,15,15); label=new QLabel(tr("Get cart title from CartChunk CutID"),this); - label->setGeometry(110,416,sizeHint().width()-40,20); + label->setGeometry(110,436,sizeHint().width()-40,20); label->setFont(labelFont()); label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); @@ -303,9 +313,9 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) // Fix Broken Formats // box_fix_broken_formats_box=new QCheckBox(this); - box_fix_broken_formats_box->setGeometry(90,442,15,15); + box_fix_broken_formats_box->setGeometry(90,462,15,15); label=new QLabel(tr("Attempt to work around malformatted input files"),this); - label->setGeometry(110,440,sizeHint().width()-40,20); + label->setGeometry(110,460,sizeHint().width()-40,20); label->setFont(labelFont()); label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); @@ -313,14 +323,14 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) // Start Date Offset // box_startoffset_spin=new QSpinBox(this); - box_startoffset_spin->setGeometry(215,466,50,20); + box_startoffset_spin->setGeometry(215,486,50,20); box_startoffset_spin->setRange(-7,7); label=new QLabel(tr("Offset start date by"),this); - label->setGeometry(90,466,120,20); + label->setGeometry(90,486,120,20); label->setFont(labelFont()); label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); label=new QLabel(tr("days"),this); - label->setGeometry(275,468,100,20); + label->setGeometry(275,488,100,20); label->setFont(labelFont()); label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); @@ -328,14 +338,14 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) // End Date Offset // box_endoffset_spin=new QSpinBox(this); - box_endoffset_spin->setGeometry(215,490,50,20); + box_endoffset_spin->setGeometry(215,510,50,20); box_endoffset_spin->setRange(-7,7); label=new QLabel(tr("Offset end date by"),this); - label->setGeometry(90,490,120,20); + label->setGeometry(90,510,120,20); label->setFont(labelFont()); label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); label=new QLabel(tr("days"),this); - label->setGeometry(275,490,100,20); + label->setGeometry(275,510,100,20); label->setFont(labelFont()); label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); @@ -343,35 +353,35 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) // Create Dates // box_create_dates_box=new QCheckBox(this); - box_create_dates_box->setGeometry(90,514,15,15); + box_create_dates_box->setGeometry(90,534,15,15); label=new QLabel(tr("Create Dates when no Dates Exist"),this); - label->setGeometry(110,512,sizeHint().width()-40,20); + label->setGeometry(110,532,sizeHint().width()-40,20); label->setFont(labelFont()); label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); box_create_startdate_offset_spin=new QSpinBox(this); - box_create_startdate_offset_spin->setGeometry(285,538,50,20); + box_create_startdate_offset_spin->setGeometry(285,558,50,20); box_create_startdate_offset_spin->setRange(-180,180); box_create_startdate_label= new QLabel(tr("Create start date offset:"),this); - box_create_startdate_label->setGeometry(120,538,160,20); + box_create_startdate_label->setGeometry(120,558,160,20); box_create_startdate_label->setFont(labelFont()); box_create_startdate_label->setAlignment(Qt::AlignVCenter|Qt::AlignRight); box_create_startdate_unit=new QLabel(tr("days"),this); box_create_startdate_unit->setFont(labelFont()); - box_create_startdate_unit->setGeometry(345,539,60,20); + box_create_startdate_unit->setGeometry(345,558,60,20); box_create_startdate_unit->setAlignment(Qt::AlignVCenter|Qt::AlignLeft); box_create_enddate_offset_spin=new QSpinBox(this); - box_create_enddate_offset_spin->setGeometry(285,560,50,20); + box_create_enddate_offset_spin->setGeometry(285,582,50,20); box_create_enddate_offset_spin->setRange(-180,180); box_create_enddate_label=new QLabel(tr("Create end date offset:"),this); - box_create_enddate_label->setGeometry(120,558,160,20); + box_create_enddate_label->setGeometry(120,580,160,20); box_create_enddate_label->setFont(labelFont()); box_create_enddate_label->setAlignment(Qt::AlignVCenter|Qt::AlignRight); box_create_enddate_unit= new QLabel(("days"),this); box_create_enddate_unit->setFont(labelFont()); - box_create_enddate_unit->setGeometry(345,558,60,20); + box_create_enddate_unit->setGeometry(345,578,60,20); box_create_enddate_unit->setAlignment(Qt::AlignVCenter|Qt::AlignLeft); connect(box_create_dates_box,SIGNAL(toggled(bool)), this,SLOT(createDatesToggledData(bool))); @@ -420,6 +430,7 @@ EditDropbox::EditDropbox(int id,bool duplicate,QWidget *parent) box_user_defined_edit->setText(box_dropbox->userDefined()); box_delete_source_box->setChecked(box_dropbox->deleteSource()); box_send_email_box->setChecked(box_dropbox->sendEmail()); + box_update_metadata_box->setChecked(box_dropbox->updateMetadata()); box_force_to_mono_box->setChecked(box_dropbox->forceToMono()); box_normalization_box->setChecked(box_dropbox->normalizationLevel()<0); box_normalization_level_spin-> @@ -616,6 +627,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->setUpdateMetadata(box_update_metadata_box->isChecked()); box_dropbox->setForceToMono(box_force_to_mono_box->isChecked()); if(box_normalization_box->isChecked()) { box_dropbox-> @@ -670,5 +682,3 @@ void EditDropbox::cancelData() { done(false); } - - diff --git a/rdadmin/edit_dropbox.h b/rdadmin/edit_dropbox.h index 4f990283..484a0a7e 100644 --- a/rdadmin/edit_dropbox.h +++ b/rdadmin/edit_dropbox.h @@ -72,6 +72,7 @@ class EditDropbox : public RDDialog QPushButton *box_log_path_button; QCheckBox *box_delete_source_box; QCheckBox *box_send_email_box; + QCheckBox *box_update_metadata_box; QCheckBox *box_normalization_box; QLabel *box_normalization_level_label; QSpinBox *box_normalization_level_spin; diff --git a/rdservice/startup.cpp b/rdservice/startup.cpp index b88a014c..cdd57c69 100644 --- a/rdservice/startup.cpp +++ b/rdservice/startup.cpp @@ -249,7 +249,8 @@ bool MainObject::StartDropboxes(QString *err_msg) "`FORCE_TO_MONO`,"+ // 21 "`SEGUE_LEVEL`,"+ // 22 "`SEGUE_LENGTH`,"+ // 23 - "`SEND_EMAIL` "+ // 24 + "`SEND_EMAIL`,"+ // 24 + "`UPDATE_METADATA` "+ // 25 "from `DROPBOXES` where "+ "`STATION_NAME`='"+RDEscapeString(rda->config()->stationName())+"'"; q=new RDSqlQuery(sql); @@ -305,6 +306,9 @@ bool MainObject::StartDropboxes(QString *err_msg) args.push_back("--send-mail"); args.push_back("--mail-per-file"); } + if(q->value(25).toString()=="Y") { + args.push_back("--update-metadata"); + } if(q->value(17).toString()=="Y") { args.push_back(QString::asprintf("--create-startdate-offset=%d", q->value(18).toInt())); diff --git a/utils/rddbmgr/revertschema.cpp b/utils/rddbmgr/revertschema.cpp index 25644296..5b50280a 100644 --- a/utils/rddbmgr/revertschema.cpp +++ b/utils/rddbmgr/revertschema.cpp @@ -40,6 +40,16 @@ bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg) // NEW SCHEMA REVERSIONS GO HERE... + // + // Revert 370 + // + if((cur_schema == 370) && (set_schema < cur_schema)) + { + DropColumn("DROPBOXES", "UPDATE_METADATA"); + + WriteSchemaVersion(--cur_schema); + } + // // Revert 370 diff --git a/utils/rddbmgr/updateschema.cpp b/utils/rddbmgr/updateschema.cpp index b7edaf00..9b84307c 100644 --- a/utils/rddbmgr/updateschema.cpp +++ b/utils/rddbmgr/updateschema.cpp @@ -11408,6 +11408,17 @@ bool MainObject::UpdateSchema(int cur_schema,int set_schema,QString *err_msg) WriteSchemaVersion(++cur_schema); } + if((cur_schema<371)&&(set_schema>cur_schema)) { + sql=QString("alter table `DROPBOXES` ")+ + "add column `UPDATE_METADATA` enum('N','Y') not null default 'N' "+ + "after `DELETE_SOURCE`"; + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + + WriteSchemaVersion(++cur_schema); + } + // NEW SCHEMA UPDATES GO HERE... diff --git a/utils/rdimport/rdimport.cpp b/utils/rdimport/rdimport.cpp index a05a2349..72eb0518 100644 --- a/utils/rdimport/rdimport.cpp +++ b/utils/rdimport/rdimport.cpp @@ -98,6 +98,7 @@ MainObject::MainObject(QObject *parent) import_to_mono=false; import_failed_imports=0; import_send_mail=false; + import_update_metadata = false; import_mail_per_file=false; import_journal=NULL; import_dump_isci_xref=false; @@ -175,6 +176,10 @@ MainObject::MainObject(QObject *parent) import_delete_cuts=true; rda->cmdSwitch()->setProcessed(i,true); } + if (rda->cmdSwitch()->key(i)=="--update-metadata") { + import_update_metadata=true; + rda->cmdSwitch()->setProcessed(i, true); + } if(rda->cmdSwitch()->key(i)=="--dump-isci-xref") { import_dump_isci_xref=true; rda->cmdSwitch()->setProcessed(i,true); @@ -711,8 +716,14 @@ MainObject::MainObject(QObject *parent) else { Log(LOG_INFO,QString(" Delete cuts mode is OFF\n")); } - if(import_dump_isci_xref) { - Log(LOG_INFO,QString(" Dump ISCI Cross Reference File is ON\n")); + if(import_update_metadata) { + Log(LOG_INFO,QString(" Update Metadata mode is ON\n")); + } + else { + Log(LOG_INFO,QString(" Update Metadata mode is OFF\n")); + } + if (import_dump_isci_xref) { + Log(LOG_INFO, QString(" Dump ISCI Cross Reference File is ON\n")); } else { Log(LOG_INFO,QString(" Dump ISCI Cross Reference File is OFF\n")); @@ -1186,11 +1197,19 @@ MainObject::Result MainObject::ImportFile(const QString &filename, // // If the cart already exists and no title was found in metadata, // then keep the existing title. Otherwise, generate a default title. + // - OR - + // If the cart already exists and a title was found in metadata, + // AND --update-metadata was specified on the command line, + // then use that title. // if((!cart_exists)&&wavedata->metadataFound()&&wavedata->title().isEmpty()) { wavedata->setTitle(effective_group->generateTitle(filename)); } - } + else if ((cart_exists)&&wavedata->metadataFound()&& + !wavedata->title().isEmpty()&&(import_update_metadata)) { + wavedata->setTitle(import_string_title); + } + } else { // Use specified title wavedata->setTitle(import_string_title); } @@ -1397,7 +1416,7 @@ MainObject::Result MainObject::ImportFile(const QString &filename, settings->setNormalizationLevel(import_normalization_level/100); settings->setAutotrimLevel(import_autotrim_level/100); conv->setDestinationSettings(settings); - conv->setUseMetadata(false); + conv->setUseMetadata(import_update_metadata); Log(LOG_INFO,QString(). sprintf(" Importing file \"%s\" [%s] to cart %06u ... ", RDGetBasePart(filename).toUtf8().constData(), diff --git a/utils/rdimport/rdimport.h b/utils/rdimport/rdimport.h index 77c8a289..00bfef28 100644 --- a/utils/rdimport/rdimport.h +++ b/utils/rdimport/rdimport.h @@ -123,6 +123,7 @@ class MainObject : public QObject int import_segue_length; bool import_send_mail; bool import_mail_per_file; + bool import_update_metadata; unsigned import_cart_number; QString import_metadata_pattern; QString import_output_pattern;