diff --git a/importers/rivendell_filter.cpp b/importers/rivendell_filter.cpp index de6b68da..d1ea9b58 100644 --- a/importers/rivendell_filter.cpp +++ b/importers/rivendell_filter.cpp @@ -274,7 +274,7 @@ MainObject::MainObject(QObject *parent) TITLE=\"%s\",\ ARTIST=\"%s\",\ ALBUM=\"%s\",\ - YEAR=\"%s\",\ + YEAR=%s,\ ISRC=\"%s\",\ LABEL=\"%s\",\ CLIENT=\"%s\",\ @@ -304,8 +304,7 @@ MainObject::MainObject(QObject *parent) (const char *)RDEscapeString(q->value(3).toString()), (const char *)RDEscapeString(q->value(4).toString()), (const char *)RDEscapeString(q->value(5).toString()), - (const char *)q->value(6).toDate(). - toString("yyyy-MM-dd"), + (const char *)RDCheckDateTime(q->value(6).toDate(),"yyyy-MM-dd"), (const char *)RDEscapeString(q->value(7).toString()), (const char *)RDEscapeString(q->value(8).toString()), (const char *)RDEscapeString(q->value(9).toString()), @@ -348,33 +347,33 @@ MainObject::MainObject(QObject *parent) start_datetime="null"; } else { - start_datetime=QString().sprintf("\"%s\"", - (const char *)q1->value(7). - toDateTime().toString("yyyy-MM-dd hh:mm:ss")); + start_datetime=QString().sprintf("%s", + (const char *)RDCheckDateTime(q1->value(7). + toDateTime(),"yyyy-MM-dd hh:mm:ss"));//Could be invalid (0000-00-00) } if(q1->value(8).isNull()) { end_datetime="null"; } else { - end_datetime=QString().sprintf("\"%s\"", - (const char *)q1->value(8). - toDateTime().toString("yyyy-MM-dd hh:mm:ss")); + end_datetime=QString().sprintf("%s", + (const char *)RDCheckDateTime(q1->value(8). + toDateTime(),"yyyy-MM-dd hh:mm:ss"));//Could be invalid (0000-00-00) } if(q1->value(16).isNull()) { start_daypart="null"; } else { - start_daypart=QString().sprintf("\"%s\"", - (const char *)q1->value(16). - toTime().toString("hh:mm:ss")); + start_daypart=QString().sprintf("%s", + (const char *)RDCheckDateTime(q1->value(16). + toTime(),"hh:mm:ss"));//Invalid possible? } if(q1->value(17).isNull()) { end_daypart="null"; } else { - end_daypart=QString().sprintf("\"%s\"", - (const char *)q1->value(17). - toTime().toString("hh:mm:ss")); + end_daypart=QString().sprintf("%s", + (const char *)RDCheckDateTime(q1->value(17). + toTime(),"hh:mm:ss"));//Invalid possible? } sql=QString().sprintf("insert into CUTS set CART_NUMBER=%u,\ CUT_NAME=\"%s\",\ diff --git a/lib/rdcart.cpp b/lib/rdcart.cpp index c5016707..28181c68 100644 --- a/lib/rdcart.cpp +++ b/lib/rdcart.cpp @@ -1206,15 +1206,15 @@ void RDCart::updateLength(bool enforce_length,unsigned length) sql+="START_DATETIME=NULL,"; } else { - sql+=QString().sprintf("START_DATETIME=\"%s\",", - (const char *)start_datetime.toString("yyyy-MM-dd hh:mm:ss")); + sql+=QString().sprintf("START_DATETIME=%s,", + (const char *)RDCheckDateTime(start_datetime,"yyyy-MM-dd hh:mm:ss")); } if(end_datetime.isNull()||(!dates_valid)) { sql+="END_DATETIME=NULL,"; } else { - sql+=QString().sprintf("END_DATETIME=\"%s\",", - (const char *)end_datetime.toString("yyyy-MM-dd hh:mm:ss")); + sql+=QString().sprintf("END_DATETIME=%s,", + (const char *)RDCheckDateTime(end_datetime,"yyyy-MM-dd hh:mm:ss")); } sql+=QString().sprintf("VALIDITY=%u where NUMBER=%u", cart_validity,cart_number); @@ -1738,9 +1738,9 @@ void RDCart::SetRow(const QString ¶m,const QDateTime &value) const RDSqlQuery *q; QString sql; - sql=QString().sprintf("UPDATE CART SET %s=\"%s\" WHERE NUMBER=%u", + sql=QString().sprintf("UPDATE CART SET %s=%s WHERE NUMBER=%u", (const char *)param, - (const char *)value.toString("yyyy-MM-dd hh:mm:ss"), + (const char *)RDCheckDateTime(value,"yyyy-MM-dd hh:mm:ss"), cart_number); q=new RDSqlQuery(sql); delete q; @@ -1752,9 +1752,9 @@ void RDCart::SetRow(const QString ¶m,const QDate &value) const RDSqlQuery *q; QString sql; - sql=QString().sprintf("UPDATE CART SET %s=\"%s\" WHERE NUMBER=%u", + sql=QString().sprintf("UPDATE CART SET %s=%s WHERE NUMBER=%u", (const char *)param, - (const char *)value.toString("yyyy-MM-dd"), + (const char *)RDCheckDateTime(value,"yyyy-MM-dd"), cart_number); q=new RDSqlQuery(sql); delete q; diff --git a/lib/rdcartslot.cpp b/lib/rdcartslot.cpp index c9ce3f8e..23bc740c 100644 --- a/lib/rdcartslot.cpp +++ b/lib/rdcartslot.cpp @@ -670,6 +670,8 @@ void RDCartSlot::LogPlayout(RDPlayDeck::State state) datetime.setDate(datetime.date().addDays(-1)); } if(!slot_svcname.isEmpty()) { + QDateTime eventDateTime(datetime.date(), + slot_logline->startTime(RDLogLine::Actual)); QString svctablename=slot_svcname; svctablename.replace(" ","_"); sql=QString("insert into `")+svctablename+"_SRT` set "+ @@ -687,17 +689,18 @@ void RDCartSlot::LogPlayout(RDPlayDeck::State state) slot_logline->usageCode(), slot_logline->startSource())+ "STATION_NAME=\""+RDEscapeString(slot_station->name())+"\","+ - "EVENT_DATETIME=\""+datetime.toString("yyyy-MM-dd")+ - " "+slot_logline->startTime(RDLogLine::Actual).toString("hh:mm:ss")+"\","+ - "EXT_START_TIME=\""+slot_logline->extStartTime().toString("hh:mm:ss")+"\","+ + "EVENT_DATETIME="+RDCheckDateTime(eventDateTime,"yyyy-MM-dd hh:mm:ss")+ + ","+ + "EXT_START_TIME="+RDCheckDateTime( + slot_logline->extStartTime(),"hh:mm:ss")+","+ "EXT_DATA=\""+RDEscapeString(slot_logline->extData())+"\","+ "EXT_EVENT_ID=\""+RDEscapeString(slot_logline->extEventId())+"\","+ "EXT_ANNC_TYPE=\""+RDEscapeString(slot_logline->extAnncType())+"\","+ "EXT_CART_NAME=\""+RDEscapeString(slot_logline->extCartName())+"\","+ "TITLE=\""+RDEscapeString(slot_logline->title())+"\","+ "ARTIST=\""+RDEscapeString(slot_logline->artist())+"\","+ - "SCHEDULED_TIME=\""+slot_logline->startTime(RDLogLine::Logged). - toString("hh:mm:ss")+"\","+ + "SCHEDULED_TIME="+ + RDCheckDateTime(slot_logline->startTime(RDLogLine::Logged),"hh:mm:ss")+","+ "ISRC=\""+RDEscapeString(slot_logline->isrc())+"\","+ "PUBLISHER=\""+RDEscapeString(slot_logline->publisher())+"\","+ "COMPOSER=\""+RDEscapeString(slot_logline->composer())+"\","+ diff --git a/lib/rdcut.cpp b/lib/rdcut.cpp index 28f35dfb..3c298577 100644 --- a/lib/rdcut.cpp +++ b/lib/rdcut.cpp @@ -1060,8 +1060,9 @@ void RDCut::setMetadata(RDWaveData *data) const } if(data->daypartStartTime().isValid()&&data->daypartEndTime().isValid()&& (data->daypartStartTime()daypartEndTime())) { - sql+="START_DAYPART=\""+data->daypartStartTime().toString("hh:mm:ss")+"\","+ - "END_DAYPART=\""+data->daypartEndTime().toString("hh:mm:ss")+"\","; + sql+="START_DAYPART="+ + RDCheckDateTime(data->daypartStartTime(),"hh:mm:ss")+","+ + "END_DAYPART="+RDCheckDateTime(data->daypartEndTime(),"hh:mm:ss")+","; } if((data->hookStartPos()>=data->startPos())&& (data->hookStartPos()<=data->endPos())&& @@ -1079,32 +1080,36 @@ void RDCut::setMetadata(RDWaveData *data) const (data->fadeDownPos()<=data->endPos())) { sql+=QString().sprintf("FADEDOWN_POINT=%d,",data->fadeDownPos()); } - if((data->startDate()>QDate(1900,1,1))&&(data->endDate().year()<8000)) { - if(data->startTime().isValid()) { - sql+=QString().sprintf("START_DATETIME=\"%s %s\",", - (const char *)data->startDate(). - toString("yyyy-MM-dd"), - (const char *)data->startTime(). - toString("hh:mm:ss")); - } - else { - sql+=QString().sprintf("START_DATETIME=\"%s 00:00:00\",", - (const char *)data->startDate(). - toString("yyyy-MM-dd")); - } + if(data->startDate().isValid() && + (data->startDate()>QDate(1900,1,1))&&(data->endDate().year()<8000)) { + + /* Reworked, + * if date not valid, do nothing + * if time valid use date + time + * else use date + 00:00:00 + */ + QDateTime startDateTime(data->startDate()); + + if(data->startTime().isValid()) + startDateTime.setTime(data->startTime()); + else + startDateTime.setTime(QTime(0,0,0)); + + sql+=QString().sprintf("START_DATETIME=%s,", + (const char *)RDCheckDateTime(startDateTime,"yyyy-MM-dd hh:mm:ss")); + if(data->endDate().isValid()&&(data->endDate().year()<8000)) { - if(data->endTime().isValid()) { - sql+=QString().sprintf("END_DATETIME=\"%s %s\",", - (const char *)data->endDate(). - toString("yyyy-MM-dd"), - (const char *)data->endTime(). - toString("hh:mm:ss")); - } - else { - sql+=QString().sprintf("END_DATETIME=\"%s 23:59:59\",", - (const char *)data->endDate(). - toString("yyyy-MM-dd")); - } + + // Reworked as START_DATETIME + QDateTime endDateTime(data->endDate()); + + if(data->endTime().isValid()) + endDateTime.setTime(data->endTime()); + else + endDateTime.setTime(QTime(23,59,59)); + + sql+=QString().sprintf("END_DATETIME=%s,", + (const char *)RDCheckDateTime(endDateTime,"yyyy-MM-dd hh:mm:ss")); } } if(sql.right(1)==",") { @@ -1603,9 +1608,9 @@ void RDCut::SetRow(const QString ¶m,const QDateTime &value) const RDSqlQuery *q; QString sql; - sql=QString().sprintf("UPDATE CUTS SET %s=\"%s\" WHERE CUT_NAME=\"%s\"", + sql=QString().sprintf("UPDATE CUTS SET %s=%s WHERE CUT_NAME=\"%s\"", (const char *)param, - (const char *)value.toString("yyyy-MM-dd hh:mm:ss"), + (const char *)RDCheckDateTime(value,"yyyy-MM-dd hh:mm:ss"), (const char *)cut_name); q=new RDSqlQuery(sql,cut_db); delete q; @@ -1617,9 +1622,9 @@ void RDCut::SetRow(const QString ¶m,const QDate &value) const RDSqlQuery *q; QString sql; - sql=QString().sprintf("UPDATE CUTS SET %s=\"%s\" WHERE CUT_NAME=\"%s\"", + sql=QString().sprintf("UPDATE CUTS SET %s=%s WHERE CUT_NAME=\"%s\"", (const char *)param, - (const char *)value.toString("yyyy-MM-dd"), + (const char *)RDCheckDateTime(value,"yyyy-MM-dd"), (const char *)cut_name); q=new RDSqlQuery(sql,cut_db); delete q; @@ -1630,9 +1635,9 @@ void RDCut::SetRow(const QString ¶m,const QTime &value) const { RDSqlQuery *q; QString sql; - sql=QString().sprintf("UPDATE CUTS SET %s=\"%s\" WHERE CUT_NAME=\"%s\"", + sql=QString().sprintf("UPDATE CUTS SET %s=%s WHERE CUT_NAME=\"%s\"", (const char *)param, - (const char *)value.toString("hh:mm:ss"), + (const char *)RDCheckDateTime(value,"hh:mm:ss"), (const char *)cut_name); q=new RDSqlQuery(sql,cut_db); delete q; diff --git a/lib/rdescape_string.cpp b/lib/rdescape_string.cpp index 89dd9caa..c2a1c6f7 100644 --- a/lib/rdescape_string.cpp +++ b/lib/rdescape_string.cpp @@ -21,6 +21,58 @@ #include #include +#include + +/** + * RDCheckDateTime - Checks for QTime.isValid + * @param time - QTime object + * @param format - QString representing time format e.g. HH:MM + * @return QString, "NULL" if not Valid else formatted Time String + */ +QString RDCheckDateTime(QTime const &time, QString const &format) +{ + QString checkedValue = "NULL"; + + if(time.isValid()) + checkedValue = "\"" + time.toString(format) + "\""; + + return checkedValue; + +} + +/** + * RDCheckDateTime - Checks for QDateTime.isValid + * @param datetime - QDateTime object + * @param format - QString representing date time format e.g. yyyy-mm-dd HH:MM + * @return QString, "NULL" if not Valid else formatted DateTime String + */ +QString RDCheckDateTime(QDateTime const &datetime, QString const &format) +{ + QString checkedValue = "NULL"; + + if(datetime.isValid()) + checkedValue = "\"" + datetime.toString(format) + "\""; + + return checkedValue; + +} + +/** + * RDCheckDateTime - Checks for QDate.isValid + * @param date - QDate object + * @param format - QString representing date format e.g. yyyy-mm-dd + * @return QString, "NULL" if not Valid else formatted Date String + */ +QString RDCheckDateTime(QDate const &date, QString const &format) +{ + QString checkedValue = "NULL"; + + if(date.isValid()) + checkedValue = "\"" + date.toString(format) + "\""; + + return checkedValue; + +} QString RDEscapeString(QString const &str) { diff --git a/lib/rdescape_string.h b/lib/rdescape_string.h index 32ffac3f..553d84a6 100644 --- a/lib/rdescape_string.h +++ b/lib/rdescape_string.h @@ -19,11 +19,16 @@ // #include +#include #ifndef RDESCAPE_STRING_H #define RDESCAPE_STRING_H +QString RDCheckDateTime(const QTime &time, const QString &format); +QString RDCheckDateTime(const QDateTime &datetime, const QString &format); +QString RDCheckDateTime(const QDate &date, const QString &format); QString RDEscapeString(const QString &str); + #endif // RDESCAPE_STRING_H diff --git a/lib/rdevent_line.cpp b/lib/rdevent_line.cpp index 20340dc5..eb73a12e 100644 --- a/lib/rdevent_line.cpp +++ b/lib/rdevent_line.cpp @@ -814,7 +814,7 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname, sql=QString().sprintf("insert into `%s_LOG` set ID=%d,COUNT=%d,TYPE=%d,\ SOURCE=%d,START_TIME=%d,GRACE_TIME=%d, \ CART_NUMBER=%u,TIME_TYPE=%d,POST_POINT=\"%s\", \ - TRANS_TYPE=%d,EXT_START_TIME=\"%s\",\ + TRANS_TYPE=%d,EXT_START_TIME=%s,\ EVENT_LENGTH=%d", (const char *)logname,count,count, RDLogLine::Cart,source, @@ -824,7 +824,7 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname, time_type, (const char *)RDYesNo(post_point), trans_type, - (const char *)time.toString("hh:mm:ss"), + (const char *)RDCheckDateTime(time,"hh:mm:ss"), event_length); q=new RDSqlQuery(sql); delete q; diff --git a/lib/rdfeed.cpp b/lib/rdfeed.cpp index 2c5d7f12..54d43c80 100644 --- a/lib/rdfeed.cpp +++ b/lib/rdfeed.cpp @@ -320,7 +320,7 @@ QDateTime RDFeed::lastBuildDateTime() const void RDFeed::setLastBuildDateTime(const QDateTime &datetime) const { - SetRow("LAST_BUILD_DATETIME",datetime.toString("yyyy-MM-dd hh:mm:ss")); + SetRow("LAST_BUILD_DATETIME",datetime,"yyyy-MM-dd hh:mm:ss"); } @@ -333,7 +333,7 @@ QDateTime RDFeed::originDateTime() const void RDFeed::setOriginDateTime(const QDateTime &datetime) const { - SetRow("ORIGIN_DATETIME",datetime.toString("yyyy-MM-dd hh:mm:ss")); + SetRow("ORIGIN_DATETIME",datetime,"yyyy-MM-dd hh:mm:ss"); } @@ -896,3 +896,17 @@ void RDFeed::SetRow(const QString ¶m,const QString &value) const q=new RDSqlQuery(sql); delete q; } + +void RDFeed::SetRow(const QString ¶m,const QDateTime &value, + const QString &format) const +{ + RDSqlQuery *q; + QString sql; + + sql=QString().sprintf("UPDATE FEEDS SET %s=%s WHERE KEY_NAME=\"%s\"", + (const char *)param, + (const char *)RDCheckDateTime(value, format), + (const char *)feed_keyname); + q=new RDSqlQuery(sql); + delete q; +} \ No newline at end of file diff --git a/lib/rdfeed.h b/lib/rdfeed.h index 67bd2c19..e64af84d 100644 --- a/lib/rdfeed.h +++ b/lib/rdfeed.h @@ -123,6 +123,8 @@ class RDFeed : public QObject QString GetTempFilename() const; void SetRow(const QString ¶m,int value) const; void SetRow(const QString ¶m,const QString &value) const; + void SetRow(const QString ¶m,const QDateTime &value, + const QString &format) const; QString feed_keyname; unsigned feed_id; }; diff --git a/lib/rdlog.cpp b/lib/rdlog.cpp index ec7c145c..931d5955 100644 --- a/lib/rdlog.cpp +++ b/lib/rdlog.cpp @@ -661,9 +661,9 @@ void RDLog::SetRow(const QString ¶m,const QDate &value) const RDSqlQuery *q; QString sql; - sql=QString().sprintf("UPDATE LOGS SET %s=\"%s\" WHERE NAME=\"%s\"", + sql=QString().sprintf("UPDATE LOGS SET %s=%s WHERE NAME=\"%s\"", (const char *)param, - (const char *)value.toString("yyyy/MM/dd"), + (const char *)RDCheckDateTime(value,"yyyy/MM/dd"), (const char *)RDEscapeString(log_name)); q=new RDSqlQuery(sql); delete q; @@ -675,9 +675,9 @@ void RDLog::SetRow(const QString ¶m,const QDateTime &value) const RDSqlQuery *q; QString sql; - sql=QString().sprintf("UPDATE LOGS SET %s=\"%s\" WHERE NAME=\"%s\"", + sql=QString().sprintf("UPDATE LOGS SET %s=%s WHERE NAME=\"%s\"", (const char *)param, - (const char *)value.toString("yyyy-MM-dd hh:mm:ss"), + (const char *)RDCheckDateTime(value,"yyyy-MM-dd hh:mm:ss"), (const char *)RDEscapeString(log_name)); q=new RDSqlQuery(sql); delete q; diff --git a/lib/rdlog_event.cpp b/lib/rdlog_event.cpp index 898617ae..35e231bc 100644 --- a/lib/rdlog_event.cpp +++ b/lib/rdlog_event.cpp @@ -244,6 +244,7 @@ int RDLogEvent::validate(QString *report,const QDate &date) // // Handle events with no logged start time (e.g. manual inserts) // + //TODO do we need to verify date here? sql=QString(). sprintf("select CUT_NAME from CUTS where \ (CART_NUMBER=%u)&& \ @@ -258,6 +259,7 @@ int RDLogEvent::validate(QString *report,const QDate &date) (const char *)RDDowCode(date.dayOfWeek())); } else { + //TODO Do we need to verify date and logLine(i)->startTime? sql=QString(). sprintf("select CUT_NAME from CUTS where \ (CART_NUMBER=%u)&& \ @@ -1184,7 +1186,7 @@ void RDLogEvent::InsertLines(QString values) { void RDLogEvent::InsertLineValues(QString *query, int line) { // one line to save query space - QString sql=QString().sprintf("(%d,%d,%u,%d,%d,%d,%d,%d,%d,%d,%d,\"%s\",\"%s\",%d,%d,\"%s\",%d,\"%s\",\"%s\",\"%s\",\"%s\",%d,%d,%d,%d,%d,\"%s\",%d,%d,%d,\"%s\",\"%s\",\"%s\",%d,%d,%d,%d,%d)", + QString sql=QString().sprintf("(%d,%d,%u,%d,%d,%d,%d,%d,%d,%d,%d,\"%s\",\"%s\",%d,%d,%s,%d,\"%s\",\"%s\",\"%s\",\"%s\",%d,%d,%d,%d,%d,\"%s\",%d,%d,%d,\"%s\",\"%s\",%s,%d,%d,%d,%d,%d)", log_line[line]->id(), line, log_line[line]->cartNumber(), @@ -1203,8 +1205,8 @@ void RDLogEvent::InsertLineValues(QString *query, int line) RDEscapeString(log_line[line]->markerLabel()), log_line[line]->graceTime(), log_line[line]->source(), - (const char *)log_line[line]->extStartTime(). - toString("hh:mm:ss"), + (const char *)RDCheckDateTime( + log_line[line]->extStartTime(),"hh:mm:ss"), log_line[line]->extLength(), (const char *)RDEscapeString(log_line[line]->extData()), (const char *) @@ -1226,8 +1228,8 @@ void RDLogEvent::InsertLineValues(QString *query, int line) (const char *)RDYesNo(log_line[line]->linkEmbedded()), (const char *) RDEscapeString(log_line[line]->originUser()), - (const char *)log_line[line]->originDateTime(). - toString("yyyy-MM-dd hh:mm:ss"), + (const char *)RDCheckDateTime( + log_line[line]->originDateTime(),"yyyy-MM-dd hh:mm:ss"), log_line[line]->linkStartSlop(), log_line[line]->linkEndSlop(), log_line[line]->duckUpGain(), diff --git a/lib/rdpodcast.cpp b/lib/rdpodcast.cpp index 267c6188..f0766f30 100644 --- a/lib/rdpodcast.cpp +++ b/lib/rdpodcast.cpp @@ -209,7 +209,7 @@ QDateTime RDPodcast::originDateTime() const void RDPodcast::setOriginDateTime(const QDateTime &datetime) const { - SetRow("ORIGIN_DATETIME",datetime.toString("yyyy-MM-dd hh:mm:ss")); + SetRow("ORIGIN_DATETIME",datetime,"yyyy-MM-dd hh:mm:ss"); } @@ -222,7 +222,7 @@ QDateTime RDPodcast::effectiveDateTime() const void RDPodcast::setEffectiveDateTime(const QDateTime &datetime) const { - SetRow("EFFECTIVE_DATETIME",datetime.toString("yyyy-MM-dd hh:mm:ss")); + SetRow("EFFECTIVE_DATETIME",datetime,"yyyy-MM-dd hh:mm:ss"); } @@ -398,3 +398,18 @@ void RDPodcast::SetRow(const QString ¶m,const QString &value) const q=new RDSqlQuery(sql); delete q; } + + +void RDPodcast::SetRow(const QString ¶m,const QDateTime &value, + const QString &format) const +{ + RDSqlQuery *q; + QString sql; + + sql=QString().sprintf("UPDATE PODCASTS SET %s=%s WHERE ID=%u", + (const char *)param, + (const char *)RDCheckDateTime(value, format), + podcast_id); + q=new RDSqlQuery(sql); + delete q; +} \ No newline at end of file diff --git a/lib/rdpodcast.h b/lib/rdpodcast.h index c4080e94..f89ec2f6 100644 --- a/lib/rdpodcast.h +++ b/lib/rdpodcast.h @@ -76,6 +76,7 @@ class RDPodcast private: void SetRow(const QString ¶m,int value) const; void SetRow(const QString ¶m,const QString &value) const; + void SetRow(const QString ¶m,const QDateTime &datetime,const QString &value) const; QString podcast_keyname; unsigned podcast_id; }; diff --git a/lib/rdrecording.cpp b/lib/rdrecording.cpp index b698aa90..3b95ec09 100644 --- a/lib/rdrecording.cpp +++ b/lib/rdrecording.cpp @@ -945,9 +945,9 @@ void RDRecording::SetRow(const QString ¶m,const QTime &value) const RDSqlQuery *q; QString sql; - sql=QString().sprintf("update RECORDINGS set %s=\"%s\" where ID=%d", + sql=QString().sprintf("update RECORDINGS set %s=%s where ID=%d", (const char *)param, - (const char *)value.toString("hh:mm:ss"),rec_id); + (const char *)RDCheckDateTime(value,"hh:mm:ss"),rec_id); q=new RDSqlQuery(sql); delete q; } diff --git a/lib/rdreport.cpp b/lib/rdreport.cpp index 8bf1b0d2..71ee8fee 100644 --- a/lib/rdreport.cpp +++ b/lib/rdreport.cpp @@ -346,6 +346,7 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, for(int i=0;i<(startdate.daysTo(enddate)+1);i++) { QDate date=startdate.addDays(i); if(startTime()=\"")+ date.toString("yyyy-MM-dd")+ " "+startTime().toString("hh:mm:ss")+"\")&&"+ @@ -534,6 +535,7 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, // Daypart Filter // if(daypart_sql.isEmpty()) { + //TODO Do we need to escape on Select statement? sql+=QString("(EVENT_DATETIME>=\"")+startdate.toString("yyyy-MM-dd")+ " 00:00:00\")&&"+ "(EVENT_DATETIME<=\""+enddate.toString("yyyy-MM-dd")+ @@ -555,8 +557,8 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, q1->value(1).toUInt(), q1->value(2).toInt())+ "STATION_NAME=\""+RDEscapeString(q1->value(3).toString())+"\","+ - "EVENT_DATETIME=\""+RDEscapeString(q1->value(4).toDateTime(). - toString("yyyy-MM-dd hh:mm:ss"))+"\","+ + "EVENT_DATETIME="+RDCheckDateTime(q1->value(4).toDateTime(), + "yyyy-MM-dd hh:mm:ss")+","+ QString().sprintf("EVENT_TYPE=%d,",q1->value(5).toInt())+ "EXT_START_TIME=\""+RDEscapeString(q1->value(6).toString())+"\","+ QString().sprintf("EXT_LENGTH=%d,",q1->value(7).toInt())+ @@ -571,8 +573,8 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, "LOG_NAME=\""+RDEscapeString(q1->value(15).toString())+"\","+ "TITLE=\""+RDEscapeString(q1->value(16).toString())+"\","+ "ARTIST=\""+RDEscapeString(q1->value(17).toString())+"\","+ - "SCHEDULED_TIME=\""+ - q1->value(18).toDate().toString("yyyy-MM-dd hh:mm:ss")+"\","+ + "SCHEDULED_TIME="+ + RDCheckDateTime(q1->value(18).toDate(),"yyyy-MM-dd hh:mm:ss")+","+ QString().sprintf("START_SOURCE=%d,",q1->value(19).toInt())+ "PUBLISHER=\""+RDEscapeString(q1->value(20).toString())+"\","+ "COMPOSER=\""+RDEscapeString(q1->value(21).toString())+"\","+ @@ -921,9 +923,9 @@ void RDReport::SetRow(const QString ¶m,const QTime &value) const RDSqlQuery *q; QString sql; - sql=QString().sprintf("UPDATE REPORTS SET %s=\"%s\" WHERE NAME=\"%s\"", + sql=QString().sprintf("UPDATE REPORTS SET %s=%s WHERE NAME=\"%s\"", (const char *)param, - (const char *)value.toString("hh:mm:ss"), + (const char *)RDCheckDateTime(value, "hh:mm:ss"), (const char *)report_name); q=new RDSqlQuery(sql); delete q; diff --git a/lib/rdsound_panel.cpp b/lib/rdsound_panel.cpp index f92fb6fe..982c82d0 100644 --- a/lib/rdsound_panel.cpp +++ b/lib/rdsound_panel.cpp @@ -1485,13 +1485,19 @@ void RDSoundPanel::LogTraffic(RDPanelButton *button) "CUTS.CUT_NAME=\""+RDEscapeString(button->cutName())+"\""; q=new RDSqlQuery(sql); if(q->first()) { + + QString eventDateTimeSQL = "NULL"; + + if(datetime.isValid() && button->startTime().isValid()) + eventDateTimeSQL = RDCheckDateTime(QDateTime(datetime.date(), + button->startTime()), "yyyy-MM-dd hh:mm:ss"); + sql=QString("insert into `")+panel_svcname+"_SRT` set "+ QString().sprintf("LENGTH=%d,",button->startTime(). msecsTo(datetime.time()))+ QString().sprintf("CART_NUMBER=%u,",button->cart())+ "STATION_NAME=\""+RDEscapeString(panel_station->name().utf8())+"\","+ - "EVENT_DATETIME=\""+datetime.toString("yyyy-MM-dd")+" "+ - button->startTime().toString("hh:mm:ss")+"\","+ + "EVENT_DATETIME="+eventDateTimeSQL+","+ QString().sprintf("EVENT_TYPE=%d,",RDAirPlayConf::TrafficStop)+ QString().sprintf("EVENT_SOURCE=%d,",RDLogLine::SoundPanel)+ QString().sprintf("PLAY_SOURCE=%d,",RDLogLine::SoundPanel)+ diff --git a/lib/rdsvc.cpp b/lib/rdsvc.cpp index 7607f3f6..b7a23a95 100644 --- a/lib/rdsvc.cpp +++ b/lib/rdsvc.cpp @@ -731,9 +731,9 @@ bool RDSvc::generateLog(const QDate &date,const QString &logname, // // Generate Log Structure // - QString purge_date; + QDate purge_date; if(defaultLogShelflife()>=0) { - purge_date=date.addDays(defaultLogShelflife()).toString("yyyy-MM-dd"); + purge_date=date.addDays(defaultLogShelflife()); } sql=QString().sprintf("select NAME from LOGS where NAME=\"%s\"", (const char *)RDEscapeString(logname)); @@ -748,8 +748,8 @@ bool RDSvc::generateLog(const QDate &date,const QString &logname, (const char *)RDEscapeString(svc_name), (const char *)RDEscapeString(RDDateDecode(descriptionTemplate(),date)), "RDLogManager"); - if(!purge_date.isEmpty()) { - sql+=(",PURGE_DATE=\""+purge_date+"\""); + if(!purge_date.isValid()) { + sql+=(",PURGE_DATE=\""+purge_date.toString("yyyy-MM-dd")+"\""); } sql+=(" where NAME=\""+RDEscapeString(logname)+"\""); @@ -765,12 +765,12 @@ bool RDSvc::generateLog(const QDate &date,const QString &logname, SERVICE=\"%s\",DESCRIPTION=\"%s\",\ ORIGIN_USER=\"%s\",ORIGIN_DATETIME=now(),\ LINK_DATETIME=now(),MODIFIED_DATETIME=now(),\ - PURGE_DATE=\"%s\"", + PURGE_DATE=%s", (const char *)RDEscapeString(logname), (const char *)RDEscapeString(svc_name), (const char *)RDEscapeString(RDDateDecode(descriptionTemplate(),date)), "RDLogManager", - (const char *)purge_date); + (const char *)RDCheckDateTime(purge_date,"yyyy-MM-dd")); q=new RDSqlQuery(sql); delete q; } diff --git a/rdairplay/log_traffic.cpp b/rdairplay/log_traffic.cpp index f1cee81d..2e42755e 100644 --- a/rdairplay/log_traffic.cpp +++ b/rdairplay/log_traffic.cpp @@ -44,17 +44,23 @@ void LogTraffic(const QString &svcname,const QString &logname, if((logline==NULL)||(svcname.isEmpty())) { return; } + + QString eventDateTimeSQL = "NULL"; + + if(datetime.isValid() && logline->startTime(RDLogLine::Actual).isValid()) + eventDateTimeSQL = RDCheckDateTime(QDateTime(datetime.date(), + logline->startTime(RDLogLine::Actual)), "yyyy-MM-dd hh:mm:ss"); + sql=QString("insert into `")+RDSvc::svcTableName(svcname)+"` set "+ QString().sprintf("LENGTH=%d,",length)+ "LOG_NAME=\""+RDEscapeString(logname.utf8())+"\","+ QString().sprintf("LOG_ID=%d,",logline->id())+ QString().sprintf("CART_NUMBER=%u,",logline->cartNumber())+ "STATION_NAME=\""+RDEscapeString(rdstation_conf->name().utf8())+"\","+ - "EVENT_DATETIME=\""+datetime.toString("yyyy-MM-dd")+" "+ - logline->startTime(RDLogLine::Actual).toString("hh:mm:ss")+"\","+ + "EVENT_DATETIME="+eventDateTimeSQL+","+ QString().sprintf("EVENT_TYPE=%d,",action)+ QString().sprintf("EVENT_SOURCE=%d,",logline->source())+ - "EXT_START_TIME=\""+logline->extStartTime().toString("hh:mm:ss")+"\","+ + "EXT_START_TIME=\""+RDCheckDateTime(logline->extStartTime(),"hh:mm:ss")+"\","+ QString().sprintf("EXT_LENGTH=%d,",logline->extLength())+ "EXT_DATA=\""+RDEscapeString(logline->extData())+"\","+ "EXT_EVENT_ID=\""+RDEscapeString(logline->extEventId())+"\","+ @@ -64,8 +70,8 @@ void LogTraffic(const QString &svcname,const QString &logname, "EXT_CART_NAME=\""+RDEscapeString(logline->extCartName().utf8())+"\","+ "TITLE=\""+RDEscapeString(logline->title().utf8())+"\","+ "ARTIST=\""+RDEscapeString(logline->artist().utf8())+"\","+ - "SCHEDULED_TIME=\""+RDEscapeString(logline->startTime(RDLogLine::Logged). - toString("hh:mm:ss"))+"\","+ + "SCHEDULED_TIME="+RDCheckDateTime(logline->startTime(RDLogLine::Logged), + "hh:mm:ss")+","+ "ISRC=\""+RDEscapeString(logline->isrc().utf8())+"\","+ "PUBLISHER=\""+RDEscapeString(logline->publisher().utf8())+"\","+ "COMPOSER=\""+RDEscapeString(logline->composer().utf8())+"\","+ diff --git a/tests/sas_switch_torture.cpp b/tests/sas_switch_torture.cpp index ca3c20d0..8e8bef87 100644 --- a/tests/sas_switch_torture.cpp +++ b/tests/sas_switch_torture.cpp @@ -29,6 +29,7 @@ #include #include #include +#include MainWidget::MainWidget(QWidget *parent) :QWidget(parent) @@ -123,13 +124,13 @@ void MainWidget::generateData() SUN=\'Y\',MON=\'Y\',TUE=\'Y\',WED=\'Y\',THU=\'Y\',\ FRI=\'Y\',SAT=\'Y\',DESCRIPTION=\"%s\",\ CUT_NAME=\"SAS_SWITCH_TORTURE\",\ - START_TIME=\"%s\",TYPE=1", + START_TIME=%s,TYPE=1", SAS_STATION, SAS_MATRIX, j+1, k+1, (const char *)desc, - (const char *)time.toString("hh:mm:ss")); + (const char *)RDCheckDateTime(time,"hh:mm:ss")); q=new RDSqlQuery(sql); delete q; } diff --git a/tests/sas_torture.cpp b/tests/sas_torture.cpp index 19fe6631..c24ef3bc 100644 --- a/tests/sas_torture.cpp +++ b/tests/sas_torture.cpp @@ -29,6 +29,7 @@ #include #include #include +#include MainWidget::MainWidget(QWidget *parent) :QWidget(parent) @@ -137,11 +138,11 @@ void MainWidget::generateData() SUN=\'Y\',MON=\'Y\',TUE=\'Y\',WED=\'Y\',THU=\'Y\',\ FRI=\'Y\',SAT=\'Y\',DESCRIPTION=\"%s\",\ CUT_NAME=\"SAS_TORTURE\",MACRO_CART=%d,\ - START_TIME=\"%s\",TYPE=1", + START_TIME=%s,TYPE=1", SAS_STATION, (const char *)desc, CART_START+j, - (const char *)time.toString("hh:mm:ss")); + (const char *)RDCheckDateTime(time,"hh:mm:ss")); q=new RDSqlQuery(sql); delete q; } diff --git a/utils/rddgimport/rddgimport.cpp b/utils/rddgimport/rddgimport.cpp index 40cf3174..75d9e741 100644 --- a/utils/rddgimport/rddgimport.cpp +++ b/utils/rddgimport/rddgimport.cpp @@ -431,6 +431,12 @@ bool MainWidget::CheckSpot(const QString &isci) QDate today=QDate::currentDate(); QDate killdate=dg_date_edit->date().addDays(RDDGIMPORT_KILLDATE_OFFSET); + QString endDateTimeSQL = "NULL"; + + if(killdate.isValid()) + endDateTimeSQL = RDCheckDateTime(QDateTime(killdate,QTime(23,59,59)), + "yyyy-MM-dd hh:mm:ss"); + sql=QString("select CUT_NAME,CUTS.START_DATETIME,CUTS.END_DATETIME ")+ "from CART left join CUTS on CART.NUMBER=CUTS.CART_NUMBER "+ "where (CART.GROUP_NAME=\""+RDEscapeString(dg_svc->autospotGroup())+"\")&&" @@ -443,7 +449,7 @@ bool MainWidget::CheckSpot(const QString &isci) if(q->value(1).isNull()) { sql+="START_DATETIME=\""+today.toString("yyyy-MM-dd")+" 00:00:00\","; } - sql+="END_DATETIME=\""+killdate.toString("yyyy-MM-dd")+" 23:59:59\" "; + sql+="END_DATETIME="+endDateTimeSQL+" "; sql+="where CUT_NAME=\""+q->value(0).toString()+"\""; q1=new RDSqlQuery(sql); delete q1; diff --git a/utils/rdimport/rdimport.cpp b/utils/rdimport/rdimport.cpp index f02218c7..31c7faf7 100644 --- a/utils/rdimport/rdimport.cpp +++ b/utils/rdimport/rdimport.cpp @@ -1864,15 +1864,15 @@ void MainObject::WriteTimestampCache(const QString &filename, sql=QString().sprintf("insert into DROPBOX_PATHS set \ DROPBOX_ID=%d,\ FILE_PATH=\"%s\",\ - FILE_DATETIME=\"%s\"", + FILE_DATETIME=%s", import_persistent_dropbox_id, (const char *)RDEscapeString(filename), - (const char *)dt.toString("yyyy-MM-dd hh:mm:ss")); + (const char *)RDCheckDateTime(dt,"yyyy-MM-dd hh:mm:ss")); } else { - sql=QString().sprintf("update DROPBOX_PATHS set FILE_DATETIME=\"%s\" \ + sql=QString().sprintf("update DROPBOX_PATHS set FILE_DATETIME=%s \ where (DROPBOX_ID=%d)&&(FILE_PATH=\"%s\")", - (const char *)dt.toString("yyyy-MM-dd hh:mm:ss"), + (const char *)RDCheckDateTime(dt,"yyyy-MM-dd hh:mm:ss"), import_persistent_dropbox_id, (const char *)RDEscapeString(filename)); } diff --git a/web/rdcastmanager/rdcastmanager.cpp b/web/rdcastmanager/rdcastmanager.cpp index 8a2c9b3a..dadc75bd 100644 --- a/web/rdcastmanager/rdcastmanager.cpp +++ b/web/rdcastmanager/rdcastmanager.cpp @@ -1310,7 +1310,7 @@ void MainObject::CommitCast() ITEM_SOURCE_TEXT=\"%s\",\ ITEM_SOURCE_URL=\"%s\",\ SHELF_LIFE=%d,\ - EFFECTIVE_DATETIME=\"%s\" \ + EFFECTIVE_DATETIME=%s \ where ID=%d", status, (const char *)RDEscapeString(item_title), @@ -1322,8 +1322,8 @@ void MainObject::CommitCast() (const char *)RDEscapeString(item_source_text), (const char *)RDEscapeString(item_source_url), shelf_life, - (const char *)RDLocalToUtc(effective_datetime). - toString("yyyy-MM-dd hh:mm:ss"), + (const char *)RDCheckDateTime(RDLocalToUtc(effective_datetime), + "yyyy-MM-dd hh:mm:ss"), cast_cast_id); q=new RDSqlQuery(sql); delete q;