diff --git a/ChangeLog b/ChangeLog index 0f613601..f606f4a6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15352,3 +15352,7 @@ 2016-07-21 Fred Gleason * Implemented '!' override character in rdclilogedit(1) for the 'exit' command. +2016-07-21 Fred Gleason + * Moved enforcement of user permissions to the + 'MainObject::DispatchCommand()' method in + 'utils/rdclilogedit/parser.cpp'. diff --git a/utils/rdclilogedit/Makefile.am b/utils/rdclilogedit/Makefile.am index 1f058565..8eba5206 100644 --- a/utils/rdclilogedit/Makefile.am +++ b/utils/rdclilogedit/Makefile.am @@ -31,6 +31,7 @@ bin_PROGRAMS = rdclilogedit dist_rdclilogedit_SOURCES = help.cpp\ operations.cpp\ + parser.cpp\ rdclilogedit.cpp rdclilogedit.h nodist_rdclilogedit_SOURCES = moc_rdclilogedit.cpp diff --git a/utils/rdclilogedit/operations.cpp b/utils/rdclilogedit/operations.cpp index b5c2ed87..eb0bdc6f 100644 --- a/utils/rdclilogedit/operations.cpp +++ b/utils/rdclilogedit/operations.cpp @@ -18,6 +18,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // +#include #include #include @@ -25,83 +26,63 @@ void MainObject::Addcart(int line,unsigned cartnum) { - if(edit_user->addtoLog()) { - if(line>edit_log_event->size()) { - line=edit_log_event->size(); - } - edit_log_event->insert(line,1); - edit_log_event->logLine(line)-> - setTransType(edit_airplay_conf->defaultTransType()); - edit_log_event->logLine(line)->setFadeupGain(-3000); - edit_log_event->logLine(line)->setFadedownGain(-3000); - edit_log_event->logLine(line)->setCartNumber(cartnum); - edit_log_event->refresh(line); - edit_modified=true; - } - else { - fprintf(stderr,"addcart: insufficient privileges [Add Log Items]\n"); + if(line>edit_log_event->size()) { + line=edit_log_event->size(); } + edit_log_event->insert(line,1); + edit_log_event->logLine(line)-> + setTransType(edit_airplay_conf->defaultTransType()); + edit_log_event->logLine(line)->setFadeupGain(-3000); + edit_log_event->logLine(line)->setFadedownGain(-3000); + edit_log_event->logLine(line)->setCartNumber(cartnum); + edit_log_event->refresh(line); + edit_modified=true; } void MainObject::Addchain(int line,const QString &logname) { - if(edit_user->addtoLog()) { - if(line>edit_log_event->size()) { - line=edit_log_event->size(); - } - edit_log_event->insert(line,1); - edit_log_event->logLine(line)->setType(RDLogLine::Chain); - edit_log_event->logLine(line)-> - setTransType(edit_airplay_conf->defaultTransType()); - edit_log_event->logLine(line)->setMarkerLabel(logname); - edit_log_event->refresh(line); - edit_modified=true; - } - else { - fprintf(stderr,"addchain: insufficient privileges [Add Log Items]\n"); + if(line>edit_log_event->size()) { + line=edit_log_event->size(); } + edit_log_event->insert(line,1); + edit_log_event->logLine(line)->setType(RDLogLine::Chain); + edit_log_event->logLine(line)-> + setTransType(edit_airplay_conf->defaultTransType()); + edit_log_event->logLine(line)->setMarkerLabel(logname); + edit_log_event->refresh(line); + edit_modified=true; } void MainObject::Addmarker(int line) { - if(edit_user->addtoLog()) { - if(line>edit_log_event->size()) { - line=edit_log_event->size(); - } - edit_log_event->insert(line,1); - edit_log_event->logLine(line)->setType(RDLogLine::Marker); - edit_log_event->logLine(line)-> - setTransType(edit_airplay_conf->defaultTransType()); - edit_log_event->logLine(line)->setMarkerLabel(tr("Label")); - edit_log_event->logLine(line)->setMarkerComment(tr("Marker Comment")); - edit_log_event->refresh(line); - edit_modified=true; - } - else { - fprintf(stderr,"addmarker: insufficient privileges [Add Log Items]\n"); + if(line>edit_log_event->size()) { + line=edit_log_event->size(); } + edit_log_event->insert(line,1); + edit_log_event->logLine(line)->setType(RDLogLine::Marker); + edit_log_event->logLine(line)-> + setTransType(edit_airplay_conf->defaultTransType()); + edit_log_event->logLine(line)->setMarkerLabel(tr("Label")); + edit_log_event->logLine(line)->setMarkerComment(tr("Marker Comment")); + edit_log_event->refresh(line); + edit_modified=true; } void MainObject::Addtrack(int line) { - if(edit_user->addtoLog()) { - if(line>edit_log_event->size()) { - line=edit_log_event->size(); - } - edit_log_event->insert(line,1); - edit_log_event->logLine(line)->setType(RDLogLine::Track); - edit_log_event->logLine(line)-> - setTransType(edit_airplay_conf->defaultTransType()); - edit_log_event->logLine(line)->setMarkerComment(tr("Voice Track")); - edit_log_event->refresh(line); - edit_modified=true; - } - else { - fprintf(stderr,"addtrack: insufficient privileges [Add Log Items]\n"); + if(line>edit_log_event->size()) { + line=edit_log_event->size(); } + edit_log_event->insert(line,1); + edit_log_event->logLine(line)->setType(RDLogLine::Track); + edit_log_event->logLine(line)-> + setTransType(edit_airplay_conf->defaultTransType()); + edit_log_event->logLine(line)->setMarkerComment(tr("Voice Track")); + edit_log_event->refresh(line); + edit_modified=true; } @@ -153,6 +134,84 @@ void MainObject::List() } +QString MainObject::ListLine(RDLogEvent *evt,int line) const +{ + QString ret=""; + RDLogLine *logline=evt->logLine(line); + + switch(logline->timeType()) { + case RDLogLine::Hard: + ret+=QString(). + sprintf("T%s ",(const char *)logline->startTime(RDLogLine::Logged). + toString("hh:mm:ss")); + break; + + case RDLogLine::Relative: + ret+=QString(). + sprintf(" %s ",(const char *)evt->blockStartTime(line). + toString("hh:mm:ss")); + break; + + case RDLogLine::NoTime: + ret+=" "; + break; + } + ret+=QString().sprintf("%-7s", + (const char *)RDLogLine::transText(logline->transType())); + switch(logline->type()) { + case RDLogLine::Cart: + case RDLogLine::Macro: + ret+=QString().sprintf("%06u ",logline->cartNumber()); + ret+=QString().sprintf("%-12s",(const char *)logline->groupName()); + ret+=QString().sprintf("%5s", + (const char *)RDGetTimeLength(logline->forcedLength(),false,false))+" "; + ret+=logline->title(); + break; + + case RDLogLine::Marker: + ret+="MARKER "; + ret+=" "; + ret+=" "; + ret+=logline->markerComment(); + break; + + case RDLogLine::Track: + ret+="TRACK "; + ret+=" "; + ret+=" "; + ret+=logline->markerComment(); + break; + + case RDLogLine::Chain: + ret+="LOG CHN "; + ret+=" "; + ret+=" "; + ret+=logline->markerLabel(); + break; + + case RDLogLine::MusicLink: + ret+="LINK "; + ret+=" "; + ret+=" "; + ret+="[music import]"; + break; + + case RDLogLine::TrafficLink: + ret+="LINK "; + ret+=" "; + ret+=" "; + ret+="[traffic import]"; + break; + + case RDLogLine::OpenBracket: + case RDLogLine::CloseBracket: + case RDLogLine::UnknownType: + break; + } + return ret; +} + + void MainObject::Remove(int line) { edit_log_event->remove(line,1); @@ -162,15 +221,10 @@ void MainObject::Remove(int line) void MainObject::Save() { - if(edit_user->arrangeLog()) { - edit_log_event->save(); - edit_log-> - setModifiedDatetime(QDateTime(QDate::currentDate(),QTime::currentTime())); - edit_modified=false; - } - else { - fprintf(stderr,"save: insufficient privileges [Rearrange Log Items]\n"); - } + edit_log_event->save(); + edit_log-> + setModifiedDatetime(QDateTime(QDate::currentDate(),QTime::currentTime())); + edit_modified=false; } @@ -179,110 +233,90 @@ void MainObject::Saveas(const QString &logname) QString sql; RDSqlQuery *q; - if(edit_user->arrangeLog()) { - RDLog *log=new RDLog(logname); - if(!log->exists()) { - sql=QString("insert into LOGS set ")+ - "NAME=\""+RDEscapeString(logname)+"\","+ - "TYPE=0,"+ - "DESCRIPTION=\""+"Copy of "+RDEscapeString(edit_log->name())+"\","+ - "ORIGIN_USER=\""+RDEscapeString(edit_user->name())+"\","+ - "ORIGIN_DATETIME=now(),"+ - "LINK_DATETIME=now(),"+ - "MODIFIED_DATETIME=now(),"+ - "SERVICE=\""+edit_log->service()+"\""; - q=new RDSqlQuery(sql); - delete q; - RDCreateLogTable(RDLog::tableName(logname)); - edit_log_event->setLogName(RDLog::tableName(logname)); - edit_log_event->save(); - delete edit_log; - edit_log=log; - edit_modified=false; - } - else { - fprintf(stderr,"saveas: log already exists\n"); - delete log; - } + RDLog *log=new RDLog(logname); + if(!log->exists()) { + sql=QString("insert into LOGS set ")+ + "NAME=\""+RDEscapeString(logname)+"\","+ + "TYPE=0,"+ + "DESCRIPTION=\""+"Copy of "+RDEscapeString(edit_log->name())+"\","+ + "ORIGIN_USER=\""+RDEscapeString(edit_user->name())+"\","+ + "ORIGIN_DATETIME=now(),"+ + "LINK_DATETIME=now(),"+ + "MODIFIED_DATETIME=now(),"+ + "SERVICE=\""+edit_log->service()+"\""; + q=new RDSqlQuery(sql); + delete q; + RDCreateLogTable(RDLog::tableName(logname)); + edit_log_event->setLogName(RDLog::tableName(logname)); + edit_log_event->save(); + delete edit_log; + edit_log=log; + edit_modified=false; } else { - fprintf(stderr,"saveas: insufficient privileges [Rearrange Log Items]\n"); + fprintf(stderr,"saveas: log already exists\n"); + delete log; } } void MainObject::Setcart(int line,unsigned cartnum) { - if(edit_user->arrangeLog()) { - RDLogLine *logline=edit_log_event->logLine(line); - if(logline!=NULL) { - if((logline->type()==RDLogLine::Cart)|| - (logline->type()==RDLogLine::Macro)) { - logline->setCartNumber(cartnum); - edit_log_event->refresh(line); - edit_modified=true; - } - else { - fprintf(stderr,"setcart: incompatible event type\n"); - } + RDLogLine *logline=edit_log_event->logLine(line); + if(logline!=NULL) { + if((logline->type()==RDLogLine::Cart)|| + (logline->type()==RDLogLine::Macro)) { + logline->setCartNumber(cartnum); + edit_log_event->refresh(line); + edit_modified=true; } else { - fprintf(stderr,"setcart: no such line\n"); + fprintf(stderr,"setcart: incompatible event type\n"); } } else { - fprintf(stderr,"setcart: insufficient privileges [Rearrange Log Items]\n"); + fprintf(stderr,"setcart: no such line\n"); } } void MainObject::Setcomment(int line,const QString &str) { - if(edit_user->arrangeLog()) { - RDLogLine *logline=edit_log_event->logLine(line); - if(logline!=NULL) { - if((logline->type()==RDLogLine::Marker)|| - (logline->type()==RDLogLine::Track)) { - logline->setMarkerComment(str); - edit_log_event->refresh(line); - edit_modified=true; - } - else { - fprintf(stderr,"setcomment: incompatible event type\n"); - } + RDLogLine *logline=edit_log_event->logLine(line); + if(logline!=NULL) { + if((logline->type()==RDLogLine::Marker)|| + (logline->type()==RDLogLine::Track)) { + logline->setMarkerComment(str); + edit_log_event->refresh(line); + edit_modified=true; } else { - fprintf(stderr,"setcomment: no such line\n"); + fprintf(stderr,"setcomment: incompatible event type\n"); } } else { - fprintf(stderr,"setcomment: insufficient privileges [Rearrange Log Items]\n"); - } + fprintf(stderr,"setcomment: no such line\n"); + } } void MainObject::Setlabel(int line,const QString &str) { - if(edit_user->arrangeLog()) { - RDLogLine *logline=edit_log_event->logLine(line); - if(logline!=NULL) { - if((logline->type()==RDLogLine::Chain)|| - (logline->type()==RDLogLine::Marker)) { - logline->setMarkerLabel(str); - edit_log_event->refresh(line); - edit_modified=true; - } - else { - fprintf(stderr,"setlabel: incompatible event type\n"); - } + RDLogLine *logline=edit_log_event->logLine(line); + if(logline!=NULL) { + if((logline->type()==RDLogLine::Chain)|| + (logline->type()==RDLogLine::Marker)) { + logline->setMarkerLabel(str); + edit_log_event->refresh(line); + edit_modified=true; } else { - fprintf(stderr,"setlabel: no such line\n"); + fprintf(stderr,"setlabel: incompatible event type\n"); } } else { - fprintf(stderr,"setlabel: insufficient privileges [Rearrange Log Items]\n"); - } + fprintf(stderr,"setlabel: no such line\n"); + } } diff --git a/utils/rdclilogedit/parser.cpp b/utils/rdclilogedit/parser.cpp new file mode 100644 index 00000000..26112b04 --- /dev/null +++ b/utils/rdclilogedit/parser.cpp @@ -0,0 +1,414 @@ +// rdclilogedit.cpp +// +// A command-line log editor for Rivendell +// +// (C) Copyright 2016 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 "rdclilogedit.h" + +void MainObject::DispatchCommand(QString cmd) +{ + bool processed=false; + int line; + QTime time; + bool ok=false; + bool overwrite=!edit_modified; + QStringList cmds; + QString verb; + + cmd=cmd.stripWhiteSpace(); + if(cmd.right(1)=="!") { + overwrite=true; + cmd=cmd.left(cmd.length()-1).stripWhiteSpace(); + } + cmds=cmds.split(" ",cmd); + verb=cmds[0].lower(); + + // + // No loaded log needed for these + // + if((verb=="exit")||(verb=="quit")||(verb=="bye")) { + if(overwrite) { + exit(0); + } + else { + OverwriteError(verb); + } + processed=true; + } + + if((verb=="help")||(verb=="?")) { + Help(cmds); + processed=true; + } + + if(verb=="listlogs") { + ListLogs(); + processed=true; + } + + if(verb=="load") { + if(overwrite) { + if(cmds.size()==2) { + Load(cmds[1]); + } + else { + fprintf(stderr,"load: invalid command arguments\n"); + } + } + else { + OverwriteError("load"); + } + processed=true; + } + + // + // These need a log loaded + // + if((processed)||(edit_log_event!=NULL)) { + if(verb=="addcart") { + if(edit_user->addtoLog()) { + if(cmds.size()==3) { + line=cmds[1].toInt(&ok); + if(ok&&(line>=0)) { + unsigned cartnum=cmds[2].toUInt(&ok); + if(ok&&(cartnum<=RD_MAX_CART_NUMBER)) { + Addcart(line,cartnum); + } + else { + fprintf(stderr,"addcart: invalid cart number\n"); + } + } + else { + fprintf(stderr,"addcart: invalid line number\n"); + } + } + else { + fprintf(stderr,"addcart: invalid command arguments\n"); + } + } + else { + fprintf(stderr,"addcart: insufficient privileges [Add Log Items]\n"); + } + processed=true; + } + + if(verb=="addchain") { + if(edit_user->addtoLog()) { + if(cmds.size()==3) { + line=cmds[1].toInt(&ok); + if(ok&&(line>=0)) { + Addchain(line,cmds[2]); + } + else { + fprintf(stderr,"addchain: invalid line number\n"); + } + } + else { + fprintf(stderr,"addchain: invalid command arguments\n"); + } + } + else { + fprintf(stderr,"addchain: insufficient privileges [Add Log Items]\n"); + } + processed=true; + } + + if(verb=="addmarker") { + if(edit_user->addtoLog()) { + if(cmds.size()==2) { + line=cmds[1].toInt(&ok); + if(ok&&(line>=0)) { + Addmarker(line); + } + else { + fprintf(stderr,"addmarker: invalid line number\n"); + } + } + else { + fprintf(stderr,"addmarker: invalid command arguments\n"); + } + } + else { + fprintf(stderr,"addmarker: insufficient privileges [Add Log Items]\n"); + } + processed=true; + } + + if(verb=="addtrack") { + if(edit_user->addtoLog()) { + if(cmds.size()==2) { + line=cmds[1].toInt(&ok); + if(ok&&(line>=0)) { + Addtrack(line); + } + else { + fprintf(stderr,"addtrack: invalid line number\n"); + } + } + else { + fprintf(stderr,"addtrack: invalid command arguments\n"); + } + } + else { + fprintf(stderr,"addtrack: insufficient privileges [Add Log Items]\n"); + } + processed=true; + } + + if(verb=="list") { + List(); + processed=true; + } + + if(verb=="remove") { + if(edit_user->removefromLog()) { + if(cmds.size()==2) { + line=cmds[1].toInt(&ok); + if(ok&&(line>=0)&&(linesize())) { + Remove(line); + } + else { + fprintf(stderr,"remove: invalid line number\n"); + } + } + else { + fprintf(stderr,"remove: invalid command arguments\n"); + } + } + else { + fprintf(stderr,"remove: insufficient privileges [Delete Log Items]\n"); + } + processed=true; + } + + if(verb=="save") { + if(edit_user->arrangeLog()) { + Save(); + } + else { + fprintf(stderr,"save: insufficient privileges [Rearrange Log Items]\n"); + } + processed=true; + } + + if(verb=="saveas") { + if(edit_user->arrangeLog()) { + if(cmds.size()==2) { + if(cmds[1].length()>64) { + fprintf(stderr,"saveas: log name too long\n"); + } + Saveas(cmds[1]); + } + else { + fprintf(stderr,"saveas: invalid command arguments\n"); + } + } + else { + fprintf(stderr, + "saveas: insufficient privileges [Rearrange Log Items]\n"); + } + processed=true; + } + + if(verb=="setcart") { + if(edit_user->arrangeLog()) { + if(cmds.size()==3) { + line=cmds[1].toInt(&ok); + if(ok&&(line>=0)&&(linesize())) { + unsigned cartnum=cmds[2].toUInt(&ok); + if(ok&&(cartnum<=RD_MAX_CART_NUMBER)) { + Setcart(line,cartnum); + } + else { + fprintf(stderr,"setcart: invalid cart number\n"); + } + } + else { + fprintf(stderr,"setcart: invalid line number\n"); + } + } + else { + fprintf(stderr,"setcart: invalid command arguments\n"); + } + } + else { + fprintf(stderr, + "setcart: insufficient privileges [Rearrange Log Items]\n"); + } + processed=true; + } + + if(verb=="setcomment") { + if(edit_user->arrangeLog()) { + if(cmds.size()>=3) { + line=cmds[1].toInt(&ok); + if(ok&&(line>=0)&&(linesize())) { + cmds.remove(cmds.begin()); + cmds.remove(cmds.begin()); + Setcomment(line,cmds.join(" ")); + } + else { + fprintf(stderr,"setcomment: invalid line number\n"); + } + } + else { + fprintf(stderr,"setcomment: invalid command arguments\n"); + } + } + else { + fprintf(stderr, + "setcomment: insufficient privileges [Rearrange Log Items]\n"); + } + processed=true; + } + + if(verb=="setlabel") { + if(edit_user->arrangeLog()) { + if(cmds.size()==3) { + line=cmds[1].toInt(&ok); + if(ok&&(line>=0)&&(linesize())) { + Setlabel(line,cmds[2]); + } + else { + fprintf(stderr,"setlabel: invalid line number\n"); + } + } + else { + fprintf(stderr,"setlabel: invalid command arguments\n"); + } + } + else { + fprintf(stderr, + "setlabel: insufficient privileges [Rearrange Log Items]\n"); + } + processed=true; + } + + if(verb=="settime") { + if(edit_user->arrangeLog()) { + if(cmds.size()>=3) { + line=cmds[1].toInt(&ok); + if(ok&&(line>=0)&&(linesize())) { + RDLogLine::TimeType ttype=RDLogLine::NoTime; + if(cmds[2].lower()=="hard") { + ttype=RDLogLine::Hard; + } + if(cmds[2].lower()=="none") { + ttype=RDLogLine::Relative; + } + switch(ttype) { + case RDLogLine::Hard: + if(cmds.size()>=4) { + time=RDGetWebTime(cmds[3],&ok); + if(ok) { + Settime(line,ttype,time); + } + else { + fprintf(stderr,"settime: invalid time value\n"); + } + } + else { + fprintf(stderr,"settime: missing time value\n"); + } + break; + + case RDLogLine::Relative: + Settime(line,ttype); + break; + + case RDLogLine::NoTime: + fprintf(stderr,"settime: invalid time type\n"); + break; + } + } + else { + fprintf(stderr,"settime: invalid line number\n"); + } + } + else { + fprintf(stderr,"settime: invalid command arguments\n"); + } + } + else { + fprintf(stderr, + "settime: insufficient privileges [Rearrange Log Items]\n"); + } + processed=true; + } + + if(verb=="settrans") { + if(edit_user->arrangeLog()) { + if(cmds.size()==3) { + line=cmds[1].toInt(&ok); + if(ok&&(line>=0)&&(linesize())) { + RDLogLine::TransType trans=RDLogLine::NoTrans; + if(cmds[2].lower()=="play") { + trans=RDLogLine::Play; + } + if(cmds[2].lower()=="segue") { + trans=RDLogLine::Segue; + } + if(cmds[2].lower()=="stop") { + trans=RDLogLine::Stop; + } + if(trans!=RDLogLine::NoTrans) { + Settrans(line,trans); + } + else { + fprintf(stderr,"settrans: invalid transition type\n"); + } + } + else { + fprintf(stderr,"settrans: invalid line number\n"); + } + } + else { + fprintf(stderr,"settrans: invalid command arguments\n"); + } + } + else { + fprintf(stderr, + "settrans: insufficient privileges [Rearrange Log Items]\n"); + } + processed=true; + } + + if(verb=="unload") { + if(overwrite) { + Unload(); + } + else { + OverwriteError("unload"); + } + processed=true; + } + } + else { + fprintf(stderr,"%s: no log loaded\n",(const char *)verb); + processed=true; + } + + if(!processed) { + fprintf(stderr,"invalid command\n"); + } + PrintPrompt(); +} diff --git a/utils/rdclilogedit/rdclilogedit.cpp b/utils/rdclilogedit/rdclilogedit.cpp index 122a0db2..ddb11d75 100644 --- a/utils/rdclilogedit/rdclilogedit.cpp +++ b/utils/rdclilogedit/rdclilogedit.cpp @@ -154,408 +154,6 @@ void MainObject::Print(const QString &str) const } -void MainObject::DispatchCommand(QString cmd) -{ - bool processed=false; - int line; - QTime time; - bool ok=false; - bool overwrite=!edit_modified; - QStringList cmds; - QString verb; - - cmd=cmd.stripWhiteSpace(); - if(cmd.right(1)=="!") { - overwrite=true; - cmd=cmd.left(cmd.length()-1).stripWhiteSpace(); - } - cmds=cmds.split(" ",cmd); - verb=cmds[0].lower(); - - // - // No loaded log needed for these - // - if((verb=="exit")||(verb=="quit")||(verb=="bye")) { - if(overwrite) { - exit(0); - } - else { - OverwriteError(verb); - } - processed=true; - } - - if((verb=="help")||(verb=="?")) { - Help(cmds); - processed=true; - } - - if(verb=="listlogs") { - ListLogs(); - processed=true; - } - - if(verb=="load") { - if(overwrite) { - if(cmds.size()==2) { - Load(cmds[1]); - } - else { - fprintf(stderr,"load: invalid command arguments\n"); - } - } - else { - OverwriteError("load"); - } - processed=true; - } - - // - // These need a log loaded - // - if((processed)||(edit_log_event!=NULL)) { - if(verb=="addcart") { - if(cmds.size()==3) { - line=cmds[1].toInt(&ok); - if(ok&&(line>=0)) { - unsigned cartnum=cmds[2].toUInt(&ok); - if(ok&&(cartnum<=RD_MAX_CART_NUMBER)) { - Addcart(line,cartnum); - } - else { - fprintf(stderr,"addcart: invalid cart number\n"); - } - } - else { - fprintf(stderr,"addcart: invalid line number\n"); - } - } - else { - fprintf(stderr,"addcart: invalid command arguments\n"); - } - processed=true; - } - - if(verb=="addchain") { - if(cmds.size()==3) { - line=cmds[1].toInt(&ok); - if(ok&&(line>=0)) { - Addchain(line,cmds[2]); - } - else { - fprintf(stderr,"addchain: invalid line number\n"); - } - } - else { - fprintf(stderr,"addchain: invalid command arguments\n"); - } - processed=true; - } - - if(verb=="addmarker") { - if(cmds.size()==2) { - line=cmds[1].toInt(&ok); - if(ok&&(line>=0)) { - Addmarker(line); - } - else { - fprintf(stderr,"addmarker: invalid line number\n"); - } - } - else { - fprintf(stderr,"addmarker: invalid command arguments\n"); - } - processed=true; - } - - if(verb=="addtrack") { - if(cmds.size()==2) { - line=cmds[1].toInt(&ok); - if(ok&&(line>=0)) { - Addtrack(line); - } - else { - fprintf(stderr,"addtrack: invalid line number\n"); - } - } - else { - fprintf(stderr,"addtrack: invalid command arguments\n"); - } - processed=true; - } - - if(verb=="list") { - List(); - processed=true; - } - - if(verb=="remove") { - if(cmds.size()==2) { - line=cmds[1].toInt(&ok); - if(ok&&(line>=0)&&(linesize())) { - Remove(line); - } - else { - fprintf(stderr,"remove: invalid line number\n"); - } - } - else { - fprintf(stderr,"remove: invalid command arguments\n"); - } - processed=true; - } - - if(verb=="save") { - Save(); - processed=true; - } - - if(verb=="saveas") { - if(cmds.size()==2) { - if(cmds[1].length()>64) { - fprintf(stderr,"saveas: log name too long\n"); - } - Saveas(cmds[1]); - } - else { - fprintf(stderr,"saveas: invalid command arguments\n"); - } - processed=true; - } - - if(verb=="setcart") { - if(cmds.size()==3) { - line=cmds[1].toInt(&ok); - if(ok&&(line>=0)&&(linesize())) { - unsigned cartnum=cmds[2].toUInt(&ok); - if(ok&&(cartnum<=RD_MAX_CART_NUMBER)) { - Setcart(line,cartnum); - } - else { - fprintf(stderr,"setcart: invalid cart number\n"); - } - } - else { - fprintf(stderr,"setcart: invalid line number\n"); - } - } - else { - fprintf(stderr,"setcart: invalid command arguments\n"); - } - processed=true; - } - - if(verb=="setcomment") { - if(cmds.size()>=3) { - line=cmds[1].toInt(&ok); - if(ok&&(line>=0)&&(linesize())) { - cmds.remove(cmds.begin()); - cmds.remove(cmds.begin()); - Setcomment(line,cmds.join(" ")); - } - else { - fprintf(stderr,"setcomment: invalid line number\n"); - } - } - else { - fprintf(stderr,"setcomment: invalid command arguments\n"); - } - processed=true; - } - - if(verb=="setlabel") { - if(cmds.size()==3) { - line=cmds[1].toInt(&ok); - if(ok&&(line>=0)&&(linesize())) { - Setlabel(line,cmds[2]); - } - else { - fprintf(stderr,"setlabel: invalid line number\n"); - } - } - else { - fprintf(stderr,"setlabel: invalid command arguments\n"); - } - processed=true; - } - - if(verb=="settime") { - if(cmds.size()>=3) { - line=cmds[1].toInt(&ok); - if(ok&&(line>=0)&&(linesize())) { - RDLogLine::TimeType ttype=RDLogLine::NoTime; - if(cmds[2].lower()=="hard") { - ttype=RDLogLine::Hard; - } - if(cmds[2].lower()=="none") { - ttype=RDLogLine::Relative; - } - switch(ttype) { - case RDLogLine::Hard: - if(cmds.size()>=4) { - time=RDGetWebTime(cmds[3],&ok); - if(ok) { - Settime(line,ttype,time); - } - else { - fprintf(stderr,"settime: invalid time value\n"); - } - } - else { - fprintf(stderr,"settime: missing time value\n"); - } - break; - - case RDLogLine::Relative: - Settime(line,ttype); - break; - - case RDLogLine::NoTime: - fprintf(stderr,"settime: invalid time type\n"); - break; - } - } - else { - fprintf(stderr,"settime: invalid line number\n"); - } - } - else { - fprintf(stderr,"settime: invalid command arguments\n"); - } - processed=true; - } - - if(verb=="settrans") { - if(cmds.size()==3) { - line=cmds[1].toInt(&ok); - if(ok&&(line>=0)&&(linesize())) { - RDLogLine::TransType trans=RDLogLine::NoTrans; - if(cmds[2].lower()=="play") { - trans=RDLogLine::Play; - } - if(cmds[2].lower()=="segue") { - trans=RDLogLine::Segue; - } - if(cmds[2].lower()=="stop") { - trans=RDLogLine::Stop; - } - if(trans!=RDLogLine::NoTrans) { - Settrans(line,trans); - } - else { - fprintf(stderr,"settrans: invalid transition type\n"); - } - } - else { - fprintf(stderr,"settrans: invalid line number\n"); - } - } - else { - fprintf(stderr,"settrans: invalid command arguments\n"); - } - processed=true; - } - - if(verb=="unload") { - if(overwrite) { - Unload(); - } - else { - OverwriteError("unload"); - } - processed=true; - } - } - else { - fprintf(stderr,"%s: no log loaded\n",(const char *)verb); - processed=true; - } - - if(!processed) { - fprintf(stderr,"invalid command\n"); - } - PrintPrompt(); -} - - -QString MainObject::ListLine(RDLogEvent *evt,int line) const -{ - QString ret=""; - RDLogLine *logline=evt->logLine(line); - - switch(logline->timeType()) { - case RDLogLine::Hard: - ret+=QString(). - sprintf("T%s ",(const char *)logline->startTime(RDLogLine::Logged). - toString("hh:mm:ss")); - break; - - case RDLogLine::Relative: - ret+=QString(). - sprintf(" %s ",(const char *)evt->blockStartTime(line). - toString("hh:mm:ss")); - break; - - case RDLogLine::NoTime: - ret+=" "; - break; - } - ret+=QString().sprintf("%-7s", - (const char *)RDLogLine::transText(logline->transType())); - switch(logline->type()) { - case RDLogLine::Cart: - case RDLogLine::Macro: - ret+=QString().sprintf("%06u ",logline->cartNumber()); - ret+=QString().sprintf("%-12s",(const char *)logline->groupName()); - ret+=QString().sprintf("%5s", - (const char *)RDGetTimeLength(logline->forcedLength(),false,false))+" "; - ret+=logline->title(); - break; - - case RDLogLine::Marker: - ret+="MARKER "; - ret+=" "; - ret+=" "; - ret+=logline->markerComment(); - break; - - case RDLogLine::Track: - ret+="TRACK "; - ret+=" "; - ret+=" "; - ret+=logline->markerComment(); - break; - - case RDLogLine::Chain: - ret+="LOG CHN "; - ret+=" "; - ret+=" "; - ret+=logline->markerLabel(); - break; - - case RDLogLine::MusicLink: - ret+="LINK "; - ret+=" "; - ret+=" "; - ret+="[music import]"; - break; - - case RDLogLine::TrafficLink: - ret+="LINK "; - ret+=" "; - ret+=" "; - ret+="[traffic import]"; - break; - - case RDLogLine::OpenBracket: - case RDLogLine::CloseBracket: - case RDLogLine::UnknownType: - break; - } - return ret; -} - - void MainObject::PrintPrompt() const { if(edit_log==NULL) {