diff --git a/ChangeLog b/ChangeLog index 280f5c1b..a8f5ebf1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15077,3 +15077,8 @@ 'rlm/rlm_walltime.c'. 2016-04-25 Fred Gleason * Fixed a regression in 'ripcd/btsrc16.cpp' that broke RML processing. +2016-04-25 Fred Gleason + * Added a 'Cut Log' report in 'lib/export_cutlog.cpp'. + * Added 'DESCRIPTION' and 'OUTCUE' fields to the '_SRT' table + schema. + * Incremented the database version to 255. diff --git a/docs/tables/svc_rec_format.txt b/docs/tables/svc_rec_format.txt index 214d63a0..0066c266 100644 --- a/docs/tables/svc_rec_format.txt +++ b/docs/tables/svc_rec_format.txt @@ -22,6 +22,8 @@ CONDUCTOR char(64) From CART.CONDUCTOR USER_DEFINED char(255) From CART.USER_DEFINED SONG_ID char(32) From CART.SONG_ID USAGE_CODE int From CART.USAGE_CODE +DESCRIPTION char(64) From CUTS.DESCRIPTION +OUTCUE char(64) From CUTS.OUTCUE ISRC char(12) From CUTS.ISRC ISCI char(32) From CUTS.ISCI STATION_NAME char(64) From STATIONS.NAME diff --git a/lib/Makefile.am b/lib/Makefile.am index 823a43ab..f2b07812 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -2,9 +2,7 @@ ## ## Automake.am for rivendell/lib ## -## (C) Copyright 2002-2006 Fred Gleason -## -## $Id: Makefile.am,v 1.132.4.15.2.3 2014/05/28 21:21:39 cvs Exp $ +## (C) Copyright 2002-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 @@ -52,6 +50,7 @@ lib_LTLIBRARIES = librd.la dist_librd_la_SOURCES = dbversion.h\ gpio.h\ export_bmiemr.cpp\ + export_cutlog.cpp\ export_deltaflex.cpp\ export_musicclassical.cpp\ export_musicplayout.cpp\ diff --git a/lib/dbversion.h b/lib/dbversion.h index c1ab62ce..8080c660 100644 --- a/lib/dbversion.h +++ b/lib/dbversion.h @@ -2,9 +2,7 @@ // // The Current Database Schema Version for Rivendell // -// (C) Copyright 2002-2008 Fred Gleason -// -// $Id: dbversion.h,v 1.34.4.29.2.4 2014/06/03 18:23:34 cvs Exp $ +// (C) Copyright 2002-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 @@ -26,7 +24,7 @@ /* * Current Database Version */ -#define RD_VERSION_DATABASE 254 +#define RD_VERSION_DATABASE 255 #endif // DBVERSION_H diff --git a/lib/export_cutlog.cpp b/lib/export_cutlog.cpp new file mode 100644 index 00000000..70503672 --- /dev/null +++ b/lib/export_cutlog.cpp @@ -0,0 +1,136 @@ +// export_cutlog.cpp +// +// Export a Rivendell Cut Report. +// +// (C) Copyright 2002-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 +#include +#include +#include +#include +#include +#include + +bool RDReport::ExportCutLog(const QDate &startdate,const QDate &enddate, + const QString &mixtable) +{ + QString sql; + RDSqlQuery *q; + FILE *f; + QString cut; + QString str; + QString cart_fmt; + QString cart_num; + +#ifdef WIN32 + QString filename=RDDateDecode(exportPath(RDReport::Windows),startdate); +#else + QString filename=RDDateDecode(exportPath(RDReport::Linux),startdate); +#endif + + QFile file(filename); + if((f=fopen((const char *)filename,"w"))==NULL) { + report_error_code=RDReport::ErrorCantOpen; + return false; + } + if(useLeadingZeros()) { + cart_fmt=QString().sprintf("%%0%uu",cartDigits()); + } + else { + cart_fmt="%6u"; + } + sql=QString("select ")+ + "`"+mixtable+"_SRT`.LENGTH,"+ // 00 + "`"+mixtable+"_SRT`.CART_NUMBER,"+ // 01 + "`"+mixtable+"_SRT`.EVENT_DATETIME,"+ // 02 + "`"+mixtable+"_SRT`.EVENT_TYPE,"+ // 03 + "`"+mixtable+"_SRT`.EXT_START_TIME,"+ // 04 + "`"+mixtable+"_SRT`.EXT_LENGTH,"+ // 05 + "`"+mixtable+"_SRT`.EXT_DATA,"+ // 06 + "`"+mixtable+"_SRT`.EXT_EVENT_ID,"+ // 07 + "`"+mixtable+"_SRT`.TITLE,"+ // 08 + "CART.FORCED_LENGTH,"+ // 09 + "`"+mixtable+"_SRT`.STATION_NAME,"+ // 10 + "`"+mixtable+"_SRT`.PLAY_SOURCE,"+ // 11 + "`"+mixtable+"_SRT`.CUT_NUMBER,"+ // 12 + "`"+mixtable+"_SRT`.DESCRIPTION "+ // 13 + "from `"+mixtable+"_SRT` left join CART "+ + "on `"+mixtable+"_SRT`.CART_NUMBER=CART.NUMBER "+ + "order by EVENT_DATETIME"; + q=new RDSqlQuery(sql); + + // + // Write File Header + // + if(startdate==enddate) { + fprintf(f," Rivendell RDAirPlay Cut Report for %s\n", + (const char *)startdate.toString("MM/dd/yyyy")); + } + else { + fprintf(f," Rivendell RDAirPlay Cut Report for %s - %s\n", + (const char *)startdate.toString("MM/dd/yyyy"), + (const char *)enddate.toString("MM/dd/yyyy")); + } + str=QString().sprintf("%s -- %s\n",(const char *)name(), + (const char *)description()); + for(unsigned i=0;i<(80-str.length())/2;i++) { + fprintf(f," "); + } + fprintf(f,"%s\n",(const char *)str); + fprintf(f,"--Time-- -Cart- --Title---------------- Cut --Description------- -Len-\n"); + + // + // Write Data Rows + // + while(q->next()) { + if(q->value(12).toInt()>0) { + cut=QString().sprintf("%03d",q->value(12).toInt()); + } + else { + if((RDAirPlayConf::TrafficAction)q->value(3).toInt()== + RDAirPlayConf::TrafficMacro) { + cut="rml"; + } + else { + cut=" "; + } + } + cart_num=QString().sprintf(cart_fmt,q->value(1).toUInt()); + QString desc=q->value(13).toString(); + if(desc.isEmpty()) { + desc=" "; + } + fprintf(f,"%8s %6s %-23s %3s %-20s %5s", + (const char *)q->value(2).toTime().toString("hh:mm:ss"), + (const char *)cart_num, + (const char *)q->value(8).toString().left(23), + (const char *)cut, + (const char *)desc.left(20), + (const char *)RDGetTimeLength(q->value(9).toInt(),true,false). + right(5)); + fprintf(f,"\n"); + } + delete q; + fclose(f); + report_error_code=RDReport::ErrorOk; + return true; +} + diff --git a/lib/librd_cs.ts b/lib/librd_cs.ts index dee25ccd..5ff7ac39 100644 --- a/lib/librd_cs.ts +++ b/lib/librd_cs.ts @@ -427,6 +427,10 @@ Spin Count + + Cut Log + + RDAddCart diff --git a/lib/librd_de.ts b/lib/librd_de.ts index 647ec026..7df19df7 100644 --- a/lib/librd_de.ts +++ b/lib/librd_de.ts @@ -423,6 +423,10 @@ Spin Count + + Cut Log + + RDAddCart diff --git a/lib/librd_es.ts b/lib/librd_es.ts index 400e882d..bf393e07 100644 --- a/lib/librd_es.ts +++ b/lib/librd_es.ts @@ -423,6 +423,10 @@ Spin Count + + Cut Log + + RDAddCart diff --git a/lib/librd_fr.ts b/lib/librd_fr.ts index 309ec481..002cfc8b 100644 --- a/lib/librd_fr.ts +++ b/lib/librd_fr.ts @@ -409,6 +409,10 @@ Spin Count + + Cut Log + + RDAddCart diff --git a/lib/librd_nb.ts b/lib/librd_nb.ts index b32ea562..80b607b5 100644 --- a/lib/librd_nb.ts +++ b/lib/librd_nb.ts @@ -423,6 +423,10 @@ Spin Count + + Cut Log + + RDAddCart diff --git a/lib/librd_nn.ts b/lib/librd_nn.ts index b32ea562..80b607b5 100644 --- a/lib/librd_nn.ts +++ b/lib/librd_nn.ts @@ -423,6 +423,10 @@ Spin Count + + Cut Log + + RDAddCart diff --git a/lib/librd_pt_BR.ts b/lib/librd_pt_BR.ts index 6262f71b..80ae5ec8 100644 --- a/lib/librd_pt_BR.ts +++ b/lib/librd_pt_BR.ts @@ -423,6 +423,10 @@ Spin Count + + Cut Log + + RDAddCart diff --git a/lib/rdcartslot.cpp b/lib/rdcartslot.cpp index 19b9944d..3379285c 100644 --- a/lib/rdcartslot.cpp +++ b/lib/rdcartslot.cpp @@ -670,46 +670,50 @@ void RDCartSlot::LogPlayout(RDPlayDeck::State state) length+=86400000; datetime.setDate(datetime.date().addDays(-1)); } - QString svctablename=slot_svcname; - svctablename.replace(" ","_"); - sql=QString("insert into `")+svctablename+"_SRT` set "+ - QString().sprintf("LENGTH=%d,LOG_ID=%d,CART_NUMBER=%u,EVENT_TYPE=%d,\ - EVENT_SOURCE=%d,EXT_LENGTH=%d,PLAY_SOURCE=%d,\ + if(!slot_svcname.isEmpty()) { + QString svctablename=slot_svcname; + svctablename.replace(" ","_"); + sql=QString("insert into `")+svctablename+"_SRT` set "+ + QString().sprintf("LENGTH=%d,LOG_ID=%d,CART_NUMBER=%u,EVENT_TYPE=%d,\ + EVENT_SOURCE=%d,EXT_LENGTH=%d,PLAY_SOURCE=%d, \ CUT_NUMBER=%d,USAGE_CODE=%d,START_SOURCE=%d,", - length, - slot_number+1, - slot_logline->cartNumber(), - action, - slot_logline->source(), - slot_logline->extLength(), - RDLogLine::CartSlot, - slot_logline->cutNumber(), - 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")+"\","+ - "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")+"\","+ - "ISRC=\""+RDEscapeString(slot_logline->isrc())+"\","+ - "PUBLISHER=\""+RDEscapeString(slot_logline->publisher())+"\","+ - "COMPOSER=\""+RDEscapeString(slot_logline->composer())+"\","+ - "ONAIR_FLAG=\""+RDYesNo(slot_ripc->onairFlag())+"\","+ - "ALBUM=\""+RDEscapeString(slot_logline->album())+"\","+ - "LABEL=\""+RDEscapeString(slot_logline->label())+"\","+ - "CONDUCTOR=\""+RDEscapeString(slot_logline->conductor())+"\","+ - "USER_DEFINED=\""+RDEscapeString(slot_logline->userDefined())+"\","+ - "SONG_ID=\""+RDEscapeString(slot_logline->songId())+"\","+ - "ISCI=\""+RDEscapeString(slot_logline->isci())+"\""; - q=new RDSqlQuery(sql); - delete q; + length, + slot_number+1, + slot_logline->cartNumber(), + action, + slot_logline->source(), + slot_logline->extLength(), + RDLogLine::CartSlot, + slot_logline->cutNumber(), + 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")+"\","+ + "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")+"\","+ + "ISRC=\""+RDEscapeString(slot_logline->isrc())+"\","+ + "PUBLISHER=\""+RDEscapeString(slot_logline->publisher())+"\","+ + "COMPOSER=\""+RDEscapeString(slot_logline->composer())+"\","+ + "ONAIR_FLAG=\""+RDYesNo(slot_ripc->onairFlag())+"\","+ + "ALBUM=\""+RDEscapeString(slot_logline->album())+"\","+ + "LABEL=\""+RDEscapeString(slot_logline->label())+"\","+ + "CONDUCTOR=\""+RDEscapeString(slot_logline->conductor())+"\","+ + "USER_DEFINED=\""+RDEscapeString(slot_logline->userDefined())+"\","+ + "SONG_ID=\""+RDEscapeString(slot_logline->songId())+"\","+ + "DESCRIPTION=\""+RDEscapeString(slot_logline->description())+"\","+ + "OUTCUE=\""+RDEscapeString(slot_logline->outcue())+"\","+ + "ISCI=\""+RDEscapeString(slot_logline->isci())+"\""; + q=new RDSqlQuery(sql); + delete q; + } } void RDCartSlot::ClearTempCart() diff --git a/lib/rdcreate_log.cpp b/lib/rdcreate_log.cpp index e4c267cf..4f38be4e 100644 --- a/lib/rdcreate_log.cpp +++ b/lib/rdcreate_log.cpp @@ -114,6 +114,8 @@ QString RDCreateReconciliationTableSql(QString name) "LABEL char(64),"+ "CONDUCTOR char(64),"+ "USAGE_CODE int,"+ + "DESCRIPTION char(64),"+ + "OUTCUE char(64),"+ "ISRC char(12),"+ "ISCI char(32),"+ "STATION_NAME char(64),"+ diff --git a/lib/rdreport.cpp b/lib/rdreport.cpp index 6f942e7b..4fe0bcc0 100644 --- a/lib/rdreport.cpp +++ b/lib/rdreport.cpp @@ -477,35 +477,42 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, // // Selected Fields // - sql=QString().sprintf("select LENGTH,LOG_ID,CART_NUMBER,STATION_NAME,\ - EVENT_DATETIME,EVENT_TYPE,EXT_START_TIME,\ - EXT_LENGTH,EXT_DATA,EXT_EVENT_ID,EXT_ANNC_TYPE,\ - PLAY_SOURCE,CUT_NUMBER,EVENT_SOURCE,EXT_CART_NAME,\ - LOG_NAME,`%s_SRT`.TITLE,`%s_SRT`.ARTIST,\ - SCHEDULED_TIME,\ - START_SOURCE,`%s_SRT`.PUBLISHER,`%s_SRT`.COMPOSER,\ - `%s_SRT`.ALBUM,`%s_SRT`.LABEL,\ - `%s_SRT`.ISRC,`%s_SRT`.USAGE_CODE,\ - `%s_SRT`.ONAIR_FLAG,`%s_SRT`.ISCI,\ - `%s_SRT`.CONDUCTOR,`%s_SRT`.USER_DEFINED,\ - `%s_SRT`.SONG_ID from `%s_SRT`\ - left join CART on `%s_SRT`.CART_NUMBER=CART.NUMBER \ - where ", - (const char *)rec_name, - (const char *)rec_name, - (const char *)rec_name, - (const char *)rec_name, - (const char *)rec_name, - (const char *)rec_name, - (const char *)rec_name, - (const char *)rec_name, - (const char *)rec_name, - (const char *)rec_name, - (const char *)rec_name, - (const char *)rec_name, - (const char *)rec_name, - (const char *)rec_name, - (const char *)rec_name); + sql=QString("select ")+ + "LENGTH,"+ // 00 + "LOG_ID,"+ // 01 + "CART_NUMBER,"+ // 02 + "STATION_NAME,"+ // 03 + "EVENT_DATETIME,"+ // 04 + "EVENT_TYPE,"+ // 05 + "EXT_START_TIME,"+ // 06 + "EXT_LENGTH,"+ // 07 + "EXT_DATA,"+ // 08 + "EXT_EVENT_ID,"+ // 09 + "EXT_ANNC_TYPE,"+ // 10 + "PLAY_SOURCE,"+ // 11 + "CUT_NUMBER,"+ // 12 + "EVENT_SOURCE,"+ // 13 + "EXT_CART_NAME,"+ // 14 + "LOG_NAME,"+ // 15 + "`"+rec_name+"_SRT`.TITLE,"+ // 16 + "`"+rec_name+"_SRT`.ARTIST,"+ // 17 + "SCHEDULED_TIME,"+ // 18 + "START_SOURCE,"+ // 19 + "`"+rec_name+"_SRT`.PUBLISHER,"+ // 20 + "`"+rec_name+"_SRT`.COMPOSER,"+ // 21 + "`"+rec_name+"_SRT`.ALBUM,"+ // 22 + "`"+rec_name+"_SRT`.LABEL,"+ // 23 + "`"+rec_name+"_SRT`.ISRC,"+ // 24 + "`"+rec_name+"_SRT`.USAGE_CODE,"+ // 25 + "`"+rec_name+"_SRT`.ONAIR_FLAG,"+ // 26 + "`"+rec_name+"_SRT`.ISCI,"+ // 27 + "`"+rec_name+"_SRT`.CONDUCTOR,"+ // 28 + "`"+rec_name+"_SRT`.USER_DEFINED,"+ // 29 + "`"+rec_name+"_SRT`.SONG_ID,"+ // 30 + "`"+rec_name+"_SRT`.DESCRIPTION,"+ // 31 + "`"+rec_name+"_SRT`.OUTCUE "+ // 32 + "from `"+rec_name+"_SRT` left join CART "+ + "on `"+rec_name+"_SRT`.CART_NUMBER=CART.NUMBER where "; // // OnAir Flag Filter @@ -542,7 +549,6 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, } sql=sql.left(sql.length()-2); sql+=")"; - //printf("SQL: %s\n",(const char *)sql); q1=new RDSqlQuery(sql); while(q1->next()) { sql=QString("insert into `")+mixname+"_SRT` "+ @@ -580,7 +586,9 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, "ISCI=\""+RDEscapeString(q1->value(27).toString())+"\","+ "CONDUCTOR=\""+RDEscapeString(q1->value(28).toString())+"\","+ "USER_DEFINED=\""+RDEscapeString(q1->value(29).toString())+"\","+ - "SONG_ID=\""+RDEscapeString(q1->value(30).toString())+"\""; + "SONG_ID=\""+RDEscapeString(q1->value(30).toString())+"\","+ + "DESCRIPTION=\""+RDEscapeString(q1->value(31).toString())+"\","+ + "OUTCUE=\""+RDEscapeString(q1->value(32).toString())+"\""; q2=new RDSqlQuery(sql); delete q2; } @@ -654,6 +662,10 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, ret=ExportTechnical(startdate,enddate,false,true,mixname); break; + case RDReport::CutLog: + ret=ExportCutLog(startdate,enddate,mixname); + break; + default: return false; break; @@ -670,6 +682,7 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, sql=QString().sprintf("drop table `%s_SRT`",(const char *)mixname); q=new RDSqlQuery(sql); delete q; + return ret; } @@ -728,6 +741,9 @@ QString RDReport::filterText(RDReport::ExportFilter filter) case RDReport::WideOrbit: return QObject::tr("WideOrbit Traffic Reconciliation"); + case RDReport::CutLog: + return QObject::tr("Cut Log"); + default: return QObject::tr("Unknown"); } @@ -770,6 +786,7 @@ bool RDReport::multipleDaysAllowed(RDReport::ExportFilter filter) case RDReport::NaturalLog: case RDReport::SpinCount: case RDReport::WideOrbit: + case RDReport::CutLog: return false; case RDReport::BmiEmr: @@ -799,6 +816,7 @@ bool RDReport::multipleMonthsAllowed(RDReport::ExportFilter filter) case RDReport::MusicPlayout: case RDReport::NaturalLog: case RDReport::WideOrbit: + case RDReport::CutLog: return false; case RDReport::MusicSummary: diff --git a/lib/rdreport.h b/lib/rdreport.h index 79c478ae..c85aea38 100644 --- a/lib/rdreport.h +++ b/lib/rdreport.h @@ -37,8 +37,8 @@ class RDReport SoundExchange=4,RadioTraffic=5,VisualTraffic=6, CounterPoint=7,Music1=8,MusicSummary=9,WideOrbit=10, NprSoundExchange=11,MusicPlayout=12,NaturalLog=13, - MusicClassical=14,MrMaster=15,SpinCount=16, - LastFilter=17}; + MusicClassical=14,MrMaster=15,SpinCount=16,CutLog=17, + LastFilter=18}; enum ExportOs {Linux=0,Windows=1}; enum ExportType {Generic=0,Traffic=1,Music=2}; enum StationType {TypeOther=0,TypeAm=1,TypeFm=2,TypeLast=3}; @@ -117,6 +117,8 @@ class RDReport const QString &mixtable); bool ExportSpinCount(const QDate &startdate,const QDate &enddate, const QString &mixtable); + bool ExportCutLog(const QDate &startdate,const QDate &enddate, + const QString &mixtable); QString StringField(const QString &str,const QString &null_text="") const; void SetRow(const QString ¶m,const QString &value) const; void SetRow(const QString ¶m,int value) const; diff --git a/lib/rdsound_panel.cpp b/lib/rdsound_panel.cpp index d3ba9f95..610c9375 100644 --- a/lib/rdsound_panel.cpp +++ b/lib/rdsound_panel.cpp @@ -2,9 +2,7 @@ // // The sound panel widget for RDAirPlay // -// (C) Copyright 2002-2004 Fred Gleason -// -// $Id: rdsound_panel.cpp,v 1.62.6.13.2.3 2014/05/20 22:39:35 cvs Exp $ +// (C) Copyright 2002-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 @@ -1468,10 +1466,22 @@ void RDSoundPanel::LogTraffic(RDPanelButton *button) RDSqlQuery *q; QDateTime datetime(QDate::currentDate(),QTime::currentTime()); - sql=QString("select CART.TITLE,CART.ARTIST,CART.PUBLISHER,")+ - "CART.COMPOSER,CART.USAGE_CODE,CUTS.ISRC,"+ - "CART.ALBUM,CART.LABEL,CUTS.ISCI,CART.CONDUCTOR,CART.USER_DEFINED," - "CART.SONG_ID from CART left join CUTS "+ + sql=QString("select ")+ + "CART.TITLE,"+ // 00 + "CART.ARTIST,"+ // 01 + "CART.PUBLISHER,"+ // 02 + "CART.COMPOSER,"+ // 03 + "CART.USAGE_CODE,"+ // 04 + "CUTS.ISRC,"+ // 05 + "CART.ALBUM,"+ // 06 + "CART.LABEL,"+ // 07 + "CUTS.ISCI,"+ // 08 + "CART.CONDUCTOR,"+ // 09 + "CART.USER_DEFINED,"+ // 10 + "CART.SONG_ID,"+ // 11 + "CUTS.DESCRIPTION,"+ // 12 + "CUTS.OUTCUE "+ // 13 + "from CART left join CUTS "+ "on CART.NUMBER=CUTS.CART_NUMBER where "+ "CUTS.CUT_NAME=\""+RDEscapeString(button->cutName())+"\""; q=new RDSqlQuery(sql); @@ -1497,6 +1507,8 @@ void RDSoundPanel::LogTraffic(RDPanelButton *button) "ALBUM=\""+RDEscapeString(q->value(6).toString().utf8())+"\","+ "LABEL=\""+RDEscapeString(q->value(7).toString().utf8())+"\","+ "ISCI=\""+RDEscapeString(q->value(8).toString().utf8())+"\","+ + "DESCRIPTION=\""+RDEscapeString(q->value(12).toString().utf8())+"\","+ + "OUTCUE=\""+RDEscapeString(q->value(13).toString().utf8())+"\","+ "CONDUCTOR=\""+RDEscapeString(q->value(9).toString().utf8())+"\","+ "USER_DEFINED=\""+RDEscapeString(q->value(10).toString().utf8())+"\","+ "SONG_ID=\""+RDEscapeString(q->value(11).toString().utf8())+"\","+ diff --git a/rdadmin/createdb.cpp b/rdadmin/createdb.cpp index 1d25a3e0..2b5d90c2 100644 --- a/rdadmin/createdb.cpp +++ b/rdadmin/createdb.cpp @@ -8132,6 +8132,24 @@ int UpdateDb(int ver) delete q; } + if(ver<255) { + sql=QString("select NAME from SERVICES"); + q=new QSqlQuery(sql); + while(q->next()) { + sql=QString("alter table `")+RDSvc::svcTableName(q->value(0).toString())+ + "` add column DESCRIPTION char(64) after USAGE_CODE"; + q1=new QSqlQuery(sql); + delete q1; + + sql=QString("alter table `")+RDSvc::svcTableName(q->value(0).toString())+ + "` add column OUTCUE char(64) after DESCRIPTION"; + q1=new QSqlQuery(sql); + delete q1; + } + delete q; + } + + // **** End of version updates **** diff --git a/rdairplay/log_traffic.cpp b/rdairplay/log_traffic.cpp index b9d2cc44..7649c922 100644 --- a/rdairplay/log_traffic.cpp +++ b/rdairplay/log_traffic.cpp @@ -2,9 +2,7 @@ // // Add an entry to the reconciliation table. // -// (C) Copyright 2002-2005 Fred Gleason -// -// $Id: log_traffic.cpp,v 1.20.8.2.2.3 2014/06/24 18:27:05 cvs Exp $ +// (C) Copyright 2002-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 @@ -80,6 +78,8 @@ void LogTraffic(const QString &svcname,const QString &logname, "USER_DEFINED=\""+RDEscapeString(logline->userDefined().utf8())+"\","+ "CONDUCTOR=\""+RDEscapeString(logline->conductor().utf8())+"\","+ "SONG_ID=\""+RDEscapeString(logline->songId().utf8())+"\","+ + "DESCRIPTION=\""+RDEscapeString(logline->description().utf8())+"\","+ + "OUTCUE=\""+RDEscapeString(logline->outcue().utf8())+"\","+ "ISCI=\""+RDEscapeString(logline->isci().utf8())+"\""; q=new RDSqlQuery(sql); diff --git a/utils/rdrevert/rdrevert.cpp b/utils/rdrevert/rdrevert.cpp index d4f742d7..a243b239 100644 --- a/utils/rdrevert/rdrevert.cpp +++ b/utils/rdrevert/rdrevert.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include "rdrevert.h" @@ -162,6 +163,10 @@ void MainObject::Revert(int schema) const case 254: Revert254(); break; + + case 255: + Revert255(); + break; } } @@ -376,6 +381,31 @@ void MainObject::Revert254() const } +void MainObject::Revert255() const +{ + QString sql; + QSqlQuery *q; + QSqlQuery *q1; + + sql=QString("select NAME from SERVICES"); + q=new QSqlQuery(sql); + while(q->next()) { + sql=QString("alter table `")+RDSvc::svcTableName(q->value(0).toString())+ + "` drop column DESCRIPTION"; + q1=new QSqlQuery(sql); + delete q1; + + sql=QString("alter table `")+RDSvc::svcTableName(q->value(0).toString())+ + "` drop column OUTCUE"; + q1=new QSqlQuery(sql); + delete q1; + } + delete q; + + SetVersion(254); +} + + int MainObject::GetVersion() const { QString sql; diff --git a/utils/rdrevert/rdrevert.h b/utils/rdrevert/rdrevert.h index ea08855c..78ece0bf 100644 --- a/utils/rdrevert/rdrevert.h +++ b/utils/rdrevert/rdrevert.h @@ -50,6 +50,7 @@ class MainObject : public QObject void Revert252() const; void Revert253() const; void Revert254() const; + void Revert255() const; int GetVersion() const; void SetVersion(int schema) const; int MapSchema(const QString &ver);