From b41c243de9b965f81475f02f64f90dcffc1c2c36 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Fri, 22 Jul 2016 13:53:54 -0400 Subject: [PATCH] 2016-07-22 Fred Gleason * Implemented a 'deletelog' command for rdclilogedit(1). --- ChangeLog | 2 ++ docs/docbook/rdclilogedit.xml | 12 ++++++++++ utils/rdclilogedit/help.cpp | 16 +++++++++---- utils/rdclilogedit/operations.cpp | 37 +++++++++++++++++++++++++++++ utils/rdclilogedit/parser.cpp | 15 ++++++++++++ utils/rdclilogedit/rdclilogedit.cpp | 3 ++- utils/rdclilogedit/rdclilogedit.h | 2 ++ 7 files changed, 82 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index b0d7637e..cfc78fe8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15396,3 +15396,5 @@ * Fixed a bug in 'utils/rdclilogedit/operations.cpp' where attempting to load a log with mismatched case in the name would generate a SQL error. +2016-07-22 Fred Gleason + * Implemented a 'deletelog' command for rdclilogedit(1). diff --git a/docs/docbook/rdclilogedit.xml b/docs/docbook/rdclilogedit.xml index b2291c99..c3abf0fd 100644 --- a/docs/docbook/rdclilogedit.xml +++ b/docs/docbook/rdclilogedit.xml @@ -131,6 +131,18 @@ + + + deletelog + log-name + + + + Delete the log log-name from the + Rivendell database. + + + exit diff --git a/utils/rdclilogedit/help.cpp b/utils/rdclilogedit/help.cpp index 0c91640b..6d98e421 100644 --- a/utils/rdclilogedit/help.cpp +++ b/utils/rdclilogedit/help.cpp @@ -27,10 +27,10 @@ void MainObject::Help(const QStringList &cmds) const if(cmds.size()==1) { printf("\n"); printf("The following commands are available:\n"); - printf("?, addcart, addchain, addmarker, addtrack, bye, exit, header, help, list,\n"); - printf("listlogs, listservices, load, new, quit, remove, save, saveas, setautorefresh,\n"); - printf("setcart, setcomment, setdesc, setenddate, setlabel, setpurgedate, setservice,\n"); - printf("setstartdate, settime, settrans, unload\n"); + printf("?, addcart, addchain, addmarker, addtrack, bye, deletelog, exit, header, help,\n"); + printf("list, listlogs, listservices, load, new, quit, remove, save, saveas,\n"); + printf("setautorefresh, setcart, setcomment, setdesc, setenddate, setlabel,\n"); + printf("setpurgedate, setservice, setstartdate, settime, settrans, unload\n"); printf("\n"); printf("Enter \"? \" for specific help.\n"); printf("\n"); @@ -78,6 +78,14 @@ void MainObject::Help(const QStringList &cmds) const printf("\n"); processed=true; } + if(verb=="deletelog") { + printf("\n"); + printf(" deletelog \n"); + printf("\n"); + printf("Delete log from the Rivendell database.\n"); + printf("\n"); + processed=true; + } if((verb=="?")||(verb=="help")) { printf("\n"); printf(" %s \n",(const char *)cmds[1]); diff --git a/utils/rdclilogedit/operations.cpp b/utils/rdclilogedit/operations.cpp index ab2363ab..dfd6ba35 100644 --- a/utils/rdclilogedit/operations.cpp +++ b/utils/rdclilogedit/operations.cpp @@ -87,6 +87,43 @@ void MainObject::Addtrack(int line) } +void MainObject::Deletelog(QString logname) +{ + QString sql; + RDSqlQuery *q; + + // + // Normalize log name case + // + // FIXME: This should really be handled by use of collations in the + // where clause. + // + sql=QString("select NAME from LOGS where ")+ + "NAME=\""+RDEscapeString(logname)+"\""; + q=new RDSqlQuery(sql); + if(q->first()) { + logname=q->value(0).toString(); + } + delete q; + + if((edit_log==NULL)||(edit_log->name()!=logname)) { + RDLog *log=new RDLog(logname); + if(log->exists()) { + if(!log->remove(edit_station,edit_user,edit_config)) { + fprintf(stderr,"deletelog: audio deletion error, log not deleted\n"); + } + } + else { + fprintf(stderr,"deletelog: no such log\n"); + } + delete log; + } + else { + fprintf(stderr,"deletelog: log currently loaded (try \"unload\" first)\n"); + } +} + + void MainObject::Header() const { printf(" Description: %s\n",(const char *)edit_description); diff --git a/utils/rdclilogedit/parser.cpp b/utils/rdclilogedit/parser.cpp index 37f60bcc..4748172b 100644 --- a/utils/rdclilogedit/parser.cpp +++ b/utils/rdclilogedit/parser.cpp @@ -45,6 +45,21 @@ void MainObject::DispatchCommand(QString cmd) // // No loaded log needed for these // + if(verb=="deletelog") { + if(edit_user->deleteLog()) { + if(cmds.size()==2) { + Deletelog(cmds[1]); + } + else { + fprintf(stderr,"deletelog: invalid command arguments\n"); + } + } + else { + fprintf(stderr,"deletelog: insufficient privileges [Delete Log]\n"); + } + processed=true; + } + if((verb=="exit")||(verb=="quit")||(verb=="bye")) { if(overwrite) { exit(0); diff --git a/utils/rdclilogedit/rdclilogedit.cpp b/utils/rdclilogedit/rdclilogedit.cpp index 95b36c82..94755936 100644 --- a/utils/rdclilogedit/rdclilogedit.cpp +++ b/utils/rdclilogedit/rdclilogedit.cpp @@ -83,8 +83,9 @@ MainObject::MainObject(QObject *parent) new RDDbHeartbeat(edit_config->mysqlHeartbeatInterval(),this); // - // RDAirPlay Configuration + // Configuration Objects // + edit_station=new RDStation(edit_config->stationName()); edit_airplay_conf=new RDAirPlayConf(edit_config->stationName(),"RDAIRPLAY"); // diff --git a/utils/rdclilogedit/rdclilogedit.h b/utils/rdclilogedit/rdclilogedit.h index 551474a0..84013888 100644 --- a/utils/rdclilogedit/rdclilogedit.h +++ b/utils/rdclilogedit/rdclilogedit.h @@ -48,6 +48,7 @@ class MainObject : public QObject void Addchain(int line,const QString &logname); void Addmarker(int line); void Addtrack(int line); + void Deletelog(QString logname); void Header() const; void Help(const QStringList &cmds) const; void List(); @@ -87,6 +88,7 @@ class MainObject : public QObject QDate edit_purge_date; bool edit_auto_refresh; RDUser *edit_user; + RDStation *edit_station; RDRipc *edit_ripc; RDAirPlayConf *edit_airplay_conf; RDConfig *edit_config;