diff --git a/ChangeLog b/ChangeLog index bbd46aa5..f6603a7a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16598,3 +16598,9 @@ Guide. 2018-02-14 Fred Gleason * Fixed a typo in an error message for the 'CopyAudio' web API call. +2018-02-15 Fred Gleason + * Added a 'SERVICES.LOG_SHELFLIFE_ORIGIN' field to the database. + * Incremented the database version to 275. + * Added a drop-down control to the 'Set Logs to auto-delete' control + to allow origin to be specified in the 'Edit Service' dialog in + rdadmin(1). diff --git a/docs/tables/services.txt b/docs/tables/services.txt index 35d93b43..2b96a973 100644 --- a/docs/tables/services.txt +++ b/docs/tables/services.txt @@ -16,6 +16,7 @@ TRACK_GROUP char(10) From GROUPS.NAME AUTOSPOT_GROUP char(10) From GROUPS.NAME AUTO_REFRESH enum('N','Y') DEFAULT_LOG_SHELFLIFE int(11) +LOG_SHELFLIFE_ORIGIN int(11) 0=Air Date, 1=Log Creation ELR_SHELFLIFE int(11) TFC_PATH char(255) TFC_PREIMPORT_CMD text diff --git a/lib/dbversion.h b/lib/dbversion.h index 111c8deb..193461ca 100644 --- a/lib/dbversion.h +++ b/lib/dbversion.h @@ -24,7 +24,7 @@ /* * Current Database Version */ -#define RD_VERSION_DATABASE 274 +#define RD_VERSION_DATABASE 275 #endif // DBVERSION_H diff --git a/lib/rdlog.cpp b/lib/rdlog.cpp index 9cfcd5aa..756f0ba1 100644 --- a/lib/rdlog.cpp +++ b/lib/rdlog.cpp @@ -487,22 +487,26 @@ QString RDLog::xml() const bool RDLog::create(const QString &name,const QString &svc_name, - const QString &user_name,QString *err_msg,RDConfig *config) + const QDate &air_date,const QString &user_name, + QString *err_msg,RDConfig *config) { QString sql; RDSqlQuery *q; int shelflife=-1; + RDSvc::ShelflifeOrigin shelforigin; QString desc_tmpl; sql=QString("select ")+ "DEFAULT_LOG_SHELFLIFE,"+ // 00 - "DESCRIPTION_TEMPLATE "+ // 01 + "LOG_SHELFLIFE_ORIGIN,"+ // 01 + "DESCRIPTION_TEMPLATE "+ // 02 "from SERVICES where "+ "NAME=\""+RDEscapeString(svc_name)+"\""; q=new RDSqlQuery(sql); if(q->first()) { shelflife=q->value(0).toInt(); - desc_tmpl=q->value(1).toString(); + shelforigin=(RDSvc::ShelflifeOrigin)q->value(1).toInt(); + desc_tmpl=q->value(2).toString(); } else { *err_msg=QObject::tr("No such service!"); @@ -519,8 +523,19 @@ bool RDLog::create(const QString &name,const QString &svc_name, "LINK_DATETIME=now(),"+ "SERVICE=\""+RDEscapeString(svc_name)+"\""; if(shelflife>=0) { - sql+=",PURGE_DATE=\""+ - QDate::currentDate().addDays(shelflife).toString("yyyy-MM-dd")+"\""; + switch(shelforigin) { + case RDSvc::OriginCreationDate: + sql+=",PURGE_DATE=\""+ + QDate::currentDate().addDays(shelflife).toString("yyyy-MM-dd")+"\""; + break; + + case RDSvc::OriginAirDate: + if(air_date.isValid()) { + sql+=",PURGE_DATE=\""+ + air_date.addDays(shelflife).toString("yyyy-MM-dd")+"\""; + } + break; + } } q=new RDSqlQuery(sql); if(!q->isActive()) { diff --git a/lib/rdlog.h b/lib/rdlog.h index 39794602..9e17c1c8 100644 --- a/lib/rdlog.h +++ b/lib/rdlog.h @@ -79,8 +79,8 @@ class RDLog RDLogEvent *createLogEvent() const; QString xml() const; static bool create(const QString &name,const QString &svc_name, - const QString &user_name,QString *err_msg, - RDConfig *config); + const QDate &air_date,const QString &user_name, + QString *err_msg,RDConfig *config); static bool exists(const QString &name); static bool remove(const QString &name,RDStation *station,RDUser *user, RDConfig *config); diff --git a/lib/rdsvc.cpp b/lib/rdsvc.cpp index 64b37713..3fc680f8 100644 --- a/lib/rdsvc.cpp +++ b/lib/rdsvc.cpp @@ -158,6 +158,19 @@ void RDSvc::setDefaultLogShelflife(int days) const } +RDSvc::ShelflifeOrigin RDSvc::logShelflifeOrigin() const +{ + return (RDSvc::ShelflifeOrigin)RDGetSqlValue("SERVICES","NAME",svc_name, + "LOG_SHELFLIFE_ORIGIN").toInt(); +} + + +void RDSvc::setLogShelflifeOrigin(RDSvc::ShelflifeOrigin orig) +{ + SetRow("LOG_SHELFLIFE_ORIGIN",(int)orig); +} + + int RDSvc::elrShelflife() const { return RDGetSqlValue("SERVICES","NAME",svc_name,"ELR_SHELFLIFE").toInt(); @@ -737,7 +750,7 @@ bool RDSvc::generateLog(const QDate &date,const QString &logname, RDLog::remove(logname,svc_station,user,svc_config); delete log_lock; } - RDLog::create(logname,svc_name,"RDLogManager",err_msg,svc_config); + RDLog::create(logname,svc_name,date,"RDLogManager",err_msg,svc_config); log_lock=new RDLogLock(logname,user,svc_station,this); if(!TryLock(log_lock,err_msg)) { delete log_lock; diff --git a/lib/rdsvc.h b/lib/rdsvc.h index 1e036030..979f0200 100644 --- a/lib/rdsvc.h +++ b/lib/rdsvc.h @@ -40,6 +40,7 @@ class RDSvc : public QObject enum ImportField {CartNumber=0,ExtData=3,ExtEventId=4,ExtAnncType=5, Title=6,StartHours=7,StartMinutes=8,StartSeconds=9, LengthHours=10,LengthMinutes=11,LengthSeconds=12}; + enum ShelflifeOrigin {OriginAirDate=0,OriginCreationDate=1}; RDSvc(QString svcname,RDStation *station,RDConfig *config,QObject *parent=0); QString name() const; bool exists() const; @@ -59,6 +60,8 @@ class RDSvc : public QObject void setAutoRefresh(bool state); int defaultLogShelflife() const; void setDefaultLogShelflife(int days) const; + ShelflifeOrigin logShelflifeOrigin() const; + void setLogShelflifeOrigin(ShelflifeOrigin orig); int elrShelflife() const; void setElrShelflife(int days) const; bool chainto() const; diff --git a/rdadmin/createdb.cpp b/rdadmin/createdb.cpp index 50514c9f..5ebd5eb6 100644 --- a/rdadmin/createdb.cpp +++ b/rdadmin/createdb.cpp @@ -628,6 +628,7 @@ bool CreateDb(QString name,QString pwd,RDConfig *config) "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,"+ @@ -8013,6 +8014,14 @@ int UpdateDb(int ver,RDConfig *config) delete q; } + if(ver<275) { + sql=QString("alter table SERVICES ")+ + "add column LOG_SHELFLIFE_ORIGIN int default 0 "+ + "after DEFAULT_LOG_SHELFLIFE"; + q=new RDSqlQuery(sql,false); + delete q; + } + // // Maintainer's Note: diff --git a/rdadmin/edit_svc.cpp b/rdadmin/edit_svc.cpp index d4edfb10..b0a9eeed 100644 --- a/rdadmin/edit_svc.cpp +++ b/rdadmin/edit_svc.cpp @@ -202,9 +202,17 @@ EditSvc::EditSvc(QString svc,QWidget *parent) svc_loglife_spin->setRange(0,365); connect(svc_loglife_box,SIGNAL(toggled(bool)), svc_loglife_spin,SLOT(setEnabled(bool))); - label=new QLabel(svc_loglife_box,tr("days after creation"),this); - label->setGeometry(685,95,200,19); - label->setAlignment(AlignLeft|ShowPrefix); + svc_loglifeorigin_label=new QLabel(svc_loglife_box,tr("days after"),this); + svc_loglifeorigin_label->setGeometry(685,95,100,19); + svc_loglifeorigin_label->setAlignment(AlignLeft|ShowPrefix); + connect(svc_loglife_box,SIGNAL(toggled(bool)), + svc_loglifeorigin_label,SLOT(setEnabled(bool))); + svc_loglifeorigin_box=new QComboBox(this); + svc_loglifeorigin_box->insertItem(tr("air date")); + svc_loglifeorigin_box->insertItem(tr("creation")); + svc_loglifeorigin_box->setGeometry(750,93,100,19); + connect(svc_loglife_box,SIGNAL(toggled(bool)), + svc_loglifeorigin_box,SLOT(setEnabled(bool))); // // Purge Expired ELR Data @@ -232,8 +240,6 @@ EditSvc::EditSvc(QString svc,QWidget *parent) button->setText(tr("Enable &Hosts")); connect(button,SIGNAL(clicked()),this,SLOT(enableHostsData())); - - // // Traffic Import Section // @@ -516,9 +522,13 @@ EditSvc::EditSvc(QString svc,QWidget *parent) if(svc_svc->defaultLogShelflife()>=0) { svc_loglife_box->setChecked(true); svc_loglife_spin->setValue(svc_svc->defaultLogShelflife()); - } + svc_loglifeorigin_box->setCurrentItem(svc_svc->logShelflifeOrigin()); + svc_loglifeorigin_label->setEnabled(true); + } else { svc_loglife_spin->setDisabled(true); + svc_loglifeorigin_label->setDisabled(true); + svc_loglifeorigin_box->setDisabled(true); } if(svc_svc->elrShelflife()>=0) { svc_shelflife_box->setChecked(true); @@ -686,6 +696,8 @@ void EditSvc::Save() svc_svc->setAutoRefresh(svc_autorefresh_box->isChecked()); if(svc_loglife_box->isChecked()) { svc_svc->setDefaultLogShelflife(svc_loglife_spin->value()); + svc_svc->setLogShelflifeOrigin((RDSvc::ShelflifeOrigin) + svc_loglifeorigin_box->currentItem()); } else { svc_svc->setDefaultLogShelflife(-1); diff --git a/rdadmin/edit_svc.h b/rdadmin/edit_svc.h index 2ab17123..540bf760 100644 --- a/rdadmin/edit_svc.h +++ b/rdadmin/edit_svc.h @@ -2,7 +2,7 @@ // // Edit a Rivendell Service // -// (C) Copyright 2002-2010,2016 Fred Gleason +// (C) Copyright 2002-2010,2016-2017 Fred Gleason // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -83,6 +84,8 @@ class EditSvc : public QDialog QCheckBox *svc_autorefresh_box; QCheckBox *svc_loglife_box; QSpinBox *svc_loglife_spin; + QLabel *svc_loglifeorigin_label; + QComboBox *svc_loglifeorigin_box; QCheckBox *svc_shelflife_box; QSpinBox *svc_shelflife_spin; bool import_changed; diff --git a/rdadmin/rdadmin_cs.ts b/rdadmin/rdadmin_cs.ts index 1edbb200..5fefc2a7 100644 --- a/rdadmin/rdadmin_cs.ts +++ b/rdadmin/rdadmin_cs.ts @@ -3985,10 +3985,6 @@ uloženo. Uložit nyní? Set Logs to auto-delete - - days after creation - - Purge ELR Data @@ -3997,6 +3993,18 @@ uloženo. Uložit nyní? days after airing + + days after + + + + air date + + + + creation + + EditSvcPerms diff --git a/rdadmin/rdadmin_de.ts b/rdadmin/rdadmin_de.ts index 8adaf1ec..4706ee01 100644 --- a/rdadmin/rdadmin_de.ts +++ b/rdadmin/rdadmin_de.ts @@ -3934,10 +3934,6 @@ gespeichert werden. Jetzt speichern? Set Logs to auto-delete - - days after creation - - Purge ELR Data @@ -3946,6 +3942,18 @@ gespeichert werden. Jetzt speichern? days after airing + + days after + + + + air date + + + + creation + + EditSvcPerms diff --git a/rdadmin/rdadmin_es.ts b/rdadmin/rdadmin_es.ts index e3695ea2..4195363d 100644 --- a/rdadmin/rdadmin_es.ts +++ b/rdadmin/rdadmin_es.ts @@ -3930,10 +3930,6 @@ debe guardarse. ¿Hacerlo ahora? Set Logs to auto-delete - - days after creation - - Purge ELR Data @@ -3942,6 +3938,18 @@ debe guardarse. ¿Hacerlo ahora? days after airing + + days after + + + + air date + + + + creation + + EditSvcPerms diff --git a/rdadmin/rdadmin_fr.ts b/rdadmin/rdadmin_fr.ts index bdebdd1d..d3f4f32a 100644 --- a/rdadmin/rdadmin_fr.ts +++ b/rdadmin/rdadmin_fr.ts @@ -3499,10 +3499,6 @@ must be saved. Save now? Set Logs to auto-delete - - days after creation - - Purge ELR Data @@ -3511,6 +3507,18 @@ must be saved. Save now? days after airing + + days after + + + + air date + + + + creation + + EditSvcPerms diff --git a/rdadmin/rdadmin_nb.ts b/rdadmin/rdadmin_nb.ts index 5993a493..e1e91972 100644 --- a/rdadmin/rdadmin_nb.ts +++ b/rdadmin/rdadmin_nb.ts @@ -3904,10 +3904,6 @@ Lagre no? Set Logs to auto-delete - - days after creation - - Purge ELR Data @@ -3916,6 +3912,18 @@ Lagre no? days after airing + + days after + + + + air date + + + + creation + + EditSvcPerms diff --git a/rdadmin/rdadmin_nn.ts b/rdadmin/rdadmin_nn.ts index 5993a493..e1e91972 100644 --- a/rdadmin/rdadmin_nn.ts +++ b/rdadmin/rdadmin_nn.ts @@ -3904,10 +3904,6 @@ Lagre no? Set Logs to auto-delete - - days after creation - - Purge ELR Data @@ -3916,6 +3912,18 @@ Lagre no? days after airing + + days after + + + + air date + + + + creation + + EditSvcPerms diff --git a/rdadmin/rdadmin_pt_BR.ts b/rdadmin/rdadmin_pt_BR.ts index a16ca6a7..589f28b5 100644 --- a/rdadmin/rdadmin_pt_BR.ts +++ b/rdadmin/rdadmin_pt_BR.ts @@ -3927,10 +3927,6 @@ deve ser salva. Salvar Agora? Set Logs to auto-delete - - days after creation - - Purge ELR Data @@ -3939,6 +3935,18 @@ deve ser salva. Salvar Agora? days after airing + + days after + + + + air date + + + + creation + + EditSvcPerms diff --git a/rdairplay/list_log.cpp b/rdairplay/list_log.cpp index dc918e5e..e4c51e69 100644 --- a/rdairplay/list_log.cpp +++ b/rdairplay/list_log.cpp @@ -872,7 +872,8 @@ void ListLog::loadButtonData() break; case ListLogs::SaveAs: - if(!RDLog::create(name,svcname,rdripc->user(),&err_msg,air_config)) { + if(!RDLog::create(name,svcname,QDate(),rdripc->user(),&err_msg, + air_config)) { QMessageBox::warning(this,"RDAirPlay - "+tr("Error"),err_msg); return; } diff --git a/rdlogedit/edit_log.cpp b/rdlogedit/edit_log.cpp index 13f05a4d..43347fe2 100644 --- a/rdlogedit/edit_log.cpp +++ b/rdlogedit/edit_log.cpp @@ -1121,7 +1121,8 @@ void EditLog::saveasData() if(log->exec()<0) { return; } - if(!RDLog::create(logname,svcname,rdripc->user(),&err_msg,log_config)) { + if(!RDLog::create(logname,svcname,QDate(),rdripc->user(),&err_msg, + log_config)) { QMessageBox::warning(this,"RDLogEdit - "+tr("Error"),err_msg); return; } diff --git a/rdlogedit/rdlogedit.cpp b/rdlogedit/rdlogedit.cpp index 3df0537d..c45b08e8 100644 --- a/rdlogedit/rdlogedit.cpp +++ b/rdlogedit/rdlogedit.cpp @@ -425,7 +425,7 @@ void MainWidget::addData() QString username(rdripc->user()); #endif // WIN32 QString err_msg; - if(!RDLog::create(logname,svcname,username,&err_msg,log_config)) { + if(!RDLog::create(logname,svcname,QDate(),username,&err_msg,log_config)) { QMessageBox::warning(this,"RDLogEdit - "+tr("Error"),err_msg); return; } diff --git a/utils/rdrevert/rdrevert.cpp b/utils/rdrevert/rdrevert.cpp index f858fafb..7ed52826 100644 --- a/utils/rdrevert/rdrevert.cpp +++ b/utils/rdrevert/rdrevert.cpp @@ -255,6 +255,10 @@ void MainObject::Revert(int schema) const case 274: Revert274(); break; + + case 275: + Revert275(); + break; } } @@ -808,6 +812,19 @@ void MainObject::Revert274() const } +void MainObject::Revert275() const +{ + QString sql; + RDSqlQuery *q; + + sql=QString("alter table SERVICES drop column LOG_SHELFLIFE_ORIGIN"); + q=new RDSqlQuery(sql,false); + delete q; + + SetVersion(274); +} + + int MainObject::GetVersion() const { QString sql; @@ -853,7 +870,7 @@ int MainObject::MapSchema(const QString &ver) version_map["2.16"]=263; version_map["2.17"]=268; version_map["2.18"]=272; - version_map["2.19"]=274; + version_map["2.19"]=275; // // Normalize String diff --git a/utils/rdrevert/rdrevert.h b/utils/rdrevert/rdrevert.h index 575ad2fb..fef42872 100644 --- a/utils/rdrevert/rdrevert.h +++ b/utils/rdrevert/rdrevert.h @@ -70,6 +70,7 @@ class MainObject : public QObject void Revert272() const; void Revert273() const; void Revert274() const; + void Revert275() const; int GetVersion() const; void SetVersion(int schema) const; int MapSchema(const QString &ver); diff --git a/web/rdxport/logs.cpp b/web/rdxport/logs.cpp index 2b448a7b..e5046020 100644 --- a/web/rdxport/logs.cpp +++ b/web/rdxport/logs.cpp @@ -62,7 +62,7 @@ void Xport::AddLog() } QString err_msg; - if(!RDLog::create(log_name,service_name,xport_user->name(),&err_msg, + if(!RDLog::create(log_name,service_name,QDate(),xport_user->name(),&err_msg, xport_config)) { XmlExit(err_msg,500,"logs.cpp",LINE_NUMBER); }