From 0a934357c4f886c773595e744de9662127b3c2fc Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Wed, 1 Mar 2017 11:52:14 -0500 Subject: [PATCH] 2017-03-01 Fred Gleason * Added 'RDCart::xmlSql()' and second 'RDCart::xml()' methods. * Refactored the 'RDCart::xml()' method to use a SQL query. * Refactored the Cart and Cut web methods in 'web/rdxport/carts.cpp' to use SQL queries. --- ChangeLog | 5 + lib/rdcart.cpp | 328 ++++++++++++++++++++++++++---------------- lib/rdcart.h | 5 + lib/rdcut.cpp | 328 ++++++++++++++++++------------------------ lib/rdcut.h | 3 +- web/rdxport/carts.cpp | 33 ++--- 6 files changed, 370 insertions(+), 332 deletions(-) diff --git a/ChangeLog b/ChangeLog index 107ed857..ebe98790 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15612,3 +15612,8 @@ events. 2017-02-28 Fred Gleason * Fixed a regression in 'lib/rdformpost.cpp'. +2017-03-01 Fred Gleason + * Added 'RDCart::xmlSql()' and second 'RDCart::xml()' methods. + * Refactored the 'RDCart::xml()' method to use a SQL query. + * Refactored the Cart and Cut web methods in 'web/rdxport/carts.cpp' + to use SQL queries. diff --git a/lib/rdcart.cpp b/lib/rdcart.cpp index 335d09ec..4ee52bfd 100644 --- a/lib/rdcart.cpp +++ b/lib/rdcart.cpp @@ -991,129 +991,16 @@ QString RDCart::xml(bool include_cuts,bool absolute, #ifdef WIN32 return QString(); #else - QString sql; - RDSqlQuery *q; - RDSqlQuery *q1; - QString ret=""; - RDCut *cut; - QStringList mlist; - - sql=QString("select ")+ - "TYPE,"+ // 00 - "GROUP_NAME,"+ // 01 - "TITLE,"+ // 02 - "ARTIST,"+ // 03 - "ALBUM,"+ // 04 - "YEAR,"+ // 05 - "LABEL,"+ // 06 - "CLIENT,"+ // 07 - "AGENCY,"+ // 08 - "PUBLISHER,"+ // 09 - "COMPOSER,"+ // 10 - "USER_DEFINED,"+ // 11 - "USAGE_CODE,"+ // 12 - "FORCED_LENGTH,"+ // 13 - "AVERAGE_LENGTH,"+ // 14 - "LENGTH_DEVIATION,"+ // 15 - "AVERAGE_SEGUE_LENGTH,"+ // 16 - "AVERAGE_HOOK_LENGTH,"+ // 17 - "CUT_QUANTITY,"+ // 18 - "LAST_CUT_PLAYED,"+ // 19 - "VALIDITY,"+ // 20 - "ENFORCE_LENGTH,"+ // 21 - "ASYNCRONOUS,"+ // 22 - "OWNER,"+ // 23 - "METADATA_DATETIME,"+ // 24 - "CONDUCTOR "+ // 25 - QString().sprintf("from CART where NUMBER=%u",cart_number); - q=new RDSqlQuery(sql); - if(q->first()) { - ret+="\n"; - ret+=" "+RDXmlField("number",cart_number); - switch((RDCart::Type)q->value(0).toUInt()) { - case RDCart::Audio: - ret+=" "+RDXmlField("type","audio"); - break; - - case RDCart::Macro: - ret+=" "+RDXmlField("type","macro"); - break; - - case RDCart::All: - break; - } - ret+=" "+RDXmlField("groupName",q->value(1).toString()); - ret+=" "+RDXmlField("title",q->value(2).toString()); - ret+=" "+RDXmlField("artist",q->value(3).toString()); - ret+=" "+RDXmlField("album",q->value(4).toString()); - ret+=" "+RDXmlField("year",q->value(5).toDate().toString("yyyy")); - ret+=" "+RDXmlField("label",q->value(6).toString()); - ret+=" "+RDXmlField("client",q->value(7).toString()); - ret+=" "+RDXmlField("agency",q->value(8).toString()); - ret+=" "+RDXmlField("publisher",q->value(9).toString()); - ret+=" "+RDXmlField("composer",q->value(10).toString()); - ret+=" "+RDXmlField("conductor",q->value(25).toString()); - ret+=" "+RDXmlField("userDefined",q->value(11).toString()); - ret+=" "+RDXmlField("usageCode",q->value(12).toInt()); - ret+=" "+RDXmlField("forcedLength", - "0"+RDGetTimeLength(q->value(13).toUInt(),true)); - ret+=" "+RDXmlField("averageLength", - "0"+RDGetTimeLength(q->value(14).toUInt(),true)); - ret+=" "+RDXmlField("lengthDeviation", - "0"+RDGetTimeLength(q->value(15).toUInt(),true)); - ret+=" "+RDXmlField("averageSegueLength", - "0"+RDGetTimeLength(q->value(16).toUInt(),true)); - ret+=" "+RDXmlField("averageHookLength", - "0"+RDGetTimeLength(q->value(17).toUInt(),true)); - ret+=" "+RDXmlField("cutQuantity",q->value(18).toUInt()); - ret+=" "+RDXmlField("lastCutPlayed",q->value(19).toUInt()); - ret+=" "+RDXmlField("enforceLength",RDBool(q->value(21).toString())); - ret+=" "+RDXmlField("asyncronous",RDBool(q->value(22).toString())); - ret+=" "+RDXmlField("owner",q->value(23).toString()); - ret+=" "+RDXmlField("metadataDatetime",q->value(24).toDateTime()); - switch(type()) { - case RDCart::Audio: - if(include_cuts) { - ret+="\n"; - if(cutnum<0) { - sql=QString("select CUT_NAME from CUTS where ")+ - QString().sprintf("(CART_NUMBER=%u)",cart_number); - q1=new RDSqlQuery(sql); - while(q1->next()) { - cut=new RDCut(q1->value(0).toString()); - ret+=cut->xml(absolute,settings); - delete cut; - } - delete q1; - } - else { - cut=new RDCut(RDCut::cutName(cart_number,cutnum)); - if(cut->exists()) { - ret+=cut->xml(absolute,settings); - } - delete cut; - } - ret+="\n"; - } - break; - - case RDCart::Macro: - mlist=mlist.split("!",macros()); - ret+=" \n"; - for(unsigned i=0;i",i)+mlist[i]+ - QString().sprintf("!\n",i); - } - ret+=" \n"; - break; - - case RDCart::All: - break; - } - ret+="\n"; + QString sql=RDCart::xmlSql(include_cuts)+ + QString().sprintf(" where (CART.NUMBER=%u)",cart_number); + if(cutnum>=0) { + sql+=QString("&&(CUT_NAME=\"")+RDCut::cutName(cart_number,cutnum)+"\")"; } + RDSqlQuery *q=new RDSqlQuery(sql); + QString xml=RDCart::xml(q,include_cuts,absolute,settings); delete q; - return ret; + + return xml; #endif // WIN32 } @@ -1403,6 +1290,205 @@ bool RDCart::remove(RDStation *station,RDUser *user,RDConfig *config) const } +QString RDCart::xmlSql(bool include_cuts) +{ + QString sql=QString("select ")+ + "CART.NUMBER,"+ // 00 + "CART.TYPE,"+ // 01 + "CART.GROUP_NAME,"+ // 02 + "CART.TITLE,"+ // 03 + "CART.ARTIST,"+ // 04 + "CART.ALBUM,"+ // 05 + "CART.YEAR,"+ // 06 + "CART.LABEL,"+ // 07 + "CART.CLIENT,"+ // 08 + "CART.AGENCY,"+ // 09 + "CART.PUBLISHER,"+ // 10 + "CART.COMPOSER,"+ // 11 + "CART.USER_DEFINED,"+ // 12 + "CART.USAGE_CODE,"+ // 13 + "CART.FORCED_LENGTH,"+ // 14 + "CART.AVERAGE_LENGTH,"+ // 15 + "CART.LENGTH_DEVIATION,"+ // 16 + "CART.AVERAGE_SEGUE_LENGTH,"+ // 17 + "CART.AVERAGE_HOOK_LENGTH,"+ // 18 + "CART.CUT_QUANTITY,"+ // 19 + "CART.LAST_CUT_PLAYED,"+ // 20 + "CART.VALIDITY,"+ // 21 + "CART.ENFORCE_LENGTH,"+ // 22 + "CART.ASYNCRONOUS,"+ // 23 + "CART.OWNER,"+ // 24 + "CART.METADATA_DATETIME,"+ // 25 + "CART.CONDUCTOR,"+ // 26 + "CART.MACROS"; // 27 + if(include_cuts) { + sql+=QString(",")+ + "CUTS.CUT_NAME,"+ // 28 + "CUTS.EVERGREEN,"+ // 29 + "CUTS.DESCRIPTION,"+ // 30 + "CUTS.OUTCUE,"+ // 31 + "CUTS.ISRC,"+ // 32 + "CUTS.ISCI,"+ // 33 + "CUTS.LENGTH,"+ // 34 + "CUTS.ORIGIN_DATETIME,"+ // 35 + "CUTS.START_DATETIME,"+ // 36 + "CUTS.END_DATETIME,"+ // 37 + "CUTS.SUN,"+ // 38 + "CUTS.MON,"+ // 39 + "CUTS.TUE,"+ // 40 + "CUTS.WED,"+ // 41 + "CUTS.THU,"+ // 42 + "CUTS.FRI,"+ // 43 + "CUTS.SAT,"+ // 44 + "CUTS.START_DAYPART,"+ // 45 + "CUTS.END_DAYPART,"+ // 46 + "CUTS.ORIGIN_NAME,"+ // 47 + "CUTS.WEIGHT,"+ // 48 + "CUTS.LAST_PLAY_DATETIME,"+ // 49 + "CUTS.PLAY_COUNTER,"+ // 50 + "CUTS.LOCAL_COUNTER,"+ // 51 + "CUTS.VALIDITY,"+ // 52 + "CUTS.CODING_FORMAT,"+ // 53 + "CUTS.SAMPLE_RATE,"+ // 54 + "CUTS.BIT_RATE,"+ // 55 + "CUTS.CHANNELS,"+ // 56 + "CUTS.PLAY_GAIN,"+ // 57 + "CUTS.START_POINT,"+ // 58 + "CUTS.END_POINT,"+ // 59 + "CUTS.FADEUP_POINT,"+ // 60 + "CUTS.FADEDOWN_POINT,"+ // 61 + "CUTS.SEGUE_START_POINT,"+ // 62 + "CUTS.SEGUE_END_POINT,"+ // 63 + "CUTS.SEGUE_GAIN,"+ // 64 + "CUTS.HOOK_START_POINT,"+ // 65 + "CUTS.HOOK_END_POINT,"+ // 66 + "CUTS.TALK_START_POINT,"+ // 67 + "CUTS.TALK_END_POINT "+ // 68 + "from CART left join CUTS "+ + "on CART.NUMBER=CUTS.CART_NUMBER "; + } + else { + sql+=" from CART "; + } + return sql; +} + + +QString RDCart::xml(RDSqlQuery *q,bool include_cuts, + bool absolute,RDSettings *settings,int cutnum) +{ + QStringList mlist; + unsigned cartnum; + QString xml=""; + + while(q->next()) { + xml+="\n"; + xml+=" "+RDXmlField("number",q->value(0).toUInt()); + switch((RDCart::Type)q->value(1).toUInt()) { + case RDCart::Audio: + xml+=" "+RDXmlField("type","audio"); + break; + + case RDCart::Macro: + xml+=" "+RDXmlField("type","macro"); + break; + + case RDCart::All: + break; + } + xml+=" "+RDXmlField("groupName",q->value(2).toString()); + xml+=" "+RDXmlField("title",q->value(3).toString()); + xml+=" "+RDXmlField("artist",q->value(4).toString()); + xml+=" "+RDXmlField("album",q->value(5).toString()); + xml+=" "+RDXmlField("year",q->value(6).toDate().toString("yyyy")); + xml+=" "+RDXmlField("label",q->value(7).toString()); + xml+=" "+RDXmlField("client",q->value(8).toString()); + xml+=" "+RDXmlField("agency",q->value(9).toString()); + xml+=" "+RDXmlField("publisher",q->value(10).toString()); + xml+=" "+RDXmlField("composer",q->value(11).toString()); + xml+=" "+RDXmlField("conductor",q->value(26).toString()); + xml+=" "+RDXmlField("userDefined",q->value(12).toString()); + xml+=" "+RDXmlField("usageCode",q->value(13).toInt()); + xml+=" "+RDXmlField("forcedLength", + "0"+RDGetTimeLength(q->value(14).toUInt(),true)); + xml+=" "+RDXmlField("averageLength", + "0"+RDGetTimeLength(q->value(15).toUInt(),true)); + xml+=" "+RDXmlField("lengthDeviation", + "0"+RDGetTimeLength(q->value(16).toUInt(),true)); + xml+=" "+RDXmlField("averageSegueLength", + "0"+RDGetTimeLength(q->value(17).toUInt(),true)); + xml+=" "+RDXmlField("averageHookLength", + "0"+RDGetTimeLength(q->value(18).toUInt(),true)); + xml+=" "+RDXmlField("cutQuantity",q->value(19).toUInt()); + xml+=" "+RDXmlField("lastCutPlayed",q->value(20).toUInt()); + xml+=" "+RDXmlField("enforceLength",RDBool(q->value(22).toString())); + xml+=" "+RDXmlField("asyncronous",RDBool(q->value(23).toString())); + xml+=" "+RDXmlField("owner",q->value(24).toString()); + xml+=" "+RDXmlField("metadataDatetime",q->value(25).toDateTime()); + switch((RDCart::Type)q->value(1).toInt()) { + case RDCart::Audio: + if(include_cuts) { + cartnum=q->value(0).toUInt(); + if(q->value(28).toString().isEmpty()) { + xml+=" \n"; + } + else { + xml+=" \n"; + xml+=" "+RDCut::xml(q,absolute,settings); + while(q->next()) { + if(q->value(0).toUInt()==cartnum) { + xml+=" "+RDCut::xml(q,absolute,settings); + } + else { + q->prev(); + break; + } + } + xml+=" \n"; + } + } + break; + + case RDCart::Macro: + mlist=mlist.split("!",q->value(27).toString()); + if(mlist.size()==0) { + xml+=" \n"; + } + else { + xml+=" \n"; + for(unsigned i=0;ifirst()) { + xml=RDCut::xml(q,absolute,settings); + } + delete q; + + return xml; +} + + bool RDCart::exists(unsigned cartnum) { RDSqlQuery *q=new RDSqlQuery(QString().sprintf("select NUMBER from CART\ diff --git a/lib/rdcart.h b/lib/rdcart.h index c448e436..d1c8802c 100644 --- a/lib/rdcart.h +++ b/lib/rdcart.h @@ -151,6 +151,11 @@ class RDCart const QString &cutname,RDConfig *config); bool create(const QString &groupname,RDCart::Type type); bool remove(RDStation *station,RDUser *user,RDConfig *config) const; + static QString xmlSql(bool include_cuts); + static QString xml(RDSqlQuery *q,bool include_cuts,bool absolute, + RDSettings *settings=NULL,int cutnum=-1); + static QString cutXml(unsigned cartnum,int cutnum,bool absolute, + RDSettings *settings=NULL); static bool exists(unsigned cartnum); static QString playOrderText(RDCart::PlayOrder order); static QString usageText(RDCart::UsageCode usage); diff --git a/lib/rdcut.cpp b/lib/rdcut.cpp index fecfae95..117601aa 100644 --- a/lib/rdcut.cpp +++ b/lib/rdcut.cpp @@ -1160,195 +1160,6 @@ void RDCut::setMetadata(RDWaveData *data) const } -QString RDCut::xml(bool absolute,RDSettings *settings) const -{ -#ifdef WIN32 - return QString(); -#else - QString sql; - RDSqlQuery *q; - QString ret=""; - - sql=QString("select ")+ - "EVERGREEN,"+ // 00 - "DESCRIPTION,"+ // 01 - "OUTCUE,"+ // 02 - "ISRC,"+ // 03 - "ISCI,"+ // 04 - "LENGTH,"+ // 05 - "ORIGIN_DATETIME,"+ // 06 - "START_DATETIME,"+ // 07 - "END_DATETIME,"+ // 08 - "SUN,"+ // 09 - "MON,"+ // 10 - "TUE,"+ // 11 - "WED,"+ // 12 - "THU,"+ // 13 - "FRI,"+ // 14 - "SAT,"+ // 15 - "START_DAYPART,"+ // 16 - "END_DAYPART,"+ // 17 - "ORIGIN_NAME,"+ // 18 - "WEIGHT,"+ // 19 - "LAST_PLAY_DATETIME,"+ // 20 - "PLAY_COUNTER,"+ // 21 - "LOCAL_COUNTER,"+ // 22 - "VALIDITY,"+ // 23 - "CODING_FORMAT,"+ // 24 - "SAMPLE_RATE,"+ // 25 - "BIT_RATE,"+ // 26 - "CHANNELS,"+ // 27 - "PLAY_GAIN,"+ // 28 - "START_POINT,"+ // 29 - "END_POINT,"+ // 30 - "FADEUP_POINT,"+ // 31 - "FADEDOWN_POINT,"+ // 32 - "SEGUE_START_POINT,"+ // 33 - "SEGUE_END_POINT,"+ // 34 - "SEGUE_GAIN,"+ // 35 - "HOOK_START_POINT,"+ // 36 - "HOOK_END_POINT,"+ // 37 - "TALK_START_POINT,"+ // 38 - "TALK_END_POINT "+ // 39 - "from CUTS where CUT_NAME=\""+cut_name+"\""; - q=new RDSqlQuery(sql); - if(q->first()) { - ret+="\n"; - ret+=" "+RDXmlField("cutName",cut_name); - ret+=" "+RDXmlField("cartNumber",cart_number); - ret+=" "+RDXmlField("cutNumber",cut_number); - ret+=" "+RDXmlField("evergreen",RDBool(q->value(0).toString())); - ret+=" "+RDXmlField("description",q->value(1).toString()); - ret+=" "+RDXmlField("outcue",q->value(2).toString()); - ret+=" "+RDXmlField("isrc",q->value(3).toString()); - ret+=" "+RDXmlField("isci",q->value(4).toString()); - ret+=" "+RDXmlField("length",q->value(5).toUInt()); - if(q->value(6).isNull()) { - ret+=" "+RDXmlField("originDatetime",""); - } - else { - ret+=" "+RDXmlField("originDatetime",q->value(6).toDateTime()); - } - if(q->value(7).isNull()) { - ret+=" "+RDXmlField("startDatetime",""); - } - else { - ret+=" "+RDXmlField("startDatetime",q->value(7).toDateTime()); - } - if(q->value(8).isNull()) { - ret+=" "+RDXmlField("endDatetime",""); - } - else { - ret+=" "+RDXmlField("endDatetime",q->value(8).toDateTime()); - } - ret+=" "+RDXmlField("sun",RDBool(q->value(9).toString())); - ret+=" "+RDXmlField("mon",RDBool(q->value(10).toString())); - ret+=" "+RDXmlField("tue",RDBool(q->value(11).toString())); - ret+=" "+RDXmlField("wed",RDBool(q->value(12).toString())); - ret+=" "+RDXmlField("thu",RDBool(q->value(13).toString())); - ret+=" "+RDXmlField("fri",RDBool(q->value(14).toString())); - ret+=" "+RDXmlField("sat",RDBool(q->value(15).toString())); - if(q->value(16).isNull()) { - ret+=" "+RDXmlField("startDaypart",""); - } - else { - ret+=" "+RDXmlField("startDaypart",q->value(16).toTime()); - } - if(q->value(17).isNull()) { - ret+=" "+RDXmlField("endDaypart",""); - } - else { - ret+=" "+RDXmlField("endDaypart",q->value(17).toTime()); - } - ret+=" "+RDXmlField("originName",q->value(18).toString()); - ret+=" "+RDXmlField("weight",q->value(19).toUInt()); - ret+=" "+RDXmlField("lastPlayDatetime",q->value(20).toDateTime()); - ret+=" "+RDXmlField("playCounter",q->value(21).toUInt()); - if(settings==NULL) { - ret+=" "+RDXmlField("codingFormat",q->value(24).toUInt()); - ret+=" "+RDXmlField("sampleRate",q->value(25).toUInt()); - ret+=" "+RDXmlField("bitRate",q->value(26).toUInt()); - ret+=" "+RDXmlField("channels",q->value(27).toUInt()); - } - else { - ret+=" "+RDXmlField("codingFormat",(int)settings->format()); - ret+=" "+RDXmlField("sampleRate",settings->sampleRate()); - ret+=" "+RDXmlField("bitRate",settings->bitRate()); - ret+=" "+RDXmlField("channels",settings->channels()); - } - ret+=" "+RDXmlField("playGain",q->value(28).toUInt()); - if(absolute) { - ret+=" "+RDXmlField("startPoint",q->value(29).toInt()); - ret+=" "+RDXmlField("endPoint",q->value(30).toInt()); - ret+=" "+RDXmlField("fadeupPoint",q->value(31).toInt()); - ret+=" "+RDXmlField("fadedownPoint",q->value(32).toInt()); - ret+=" "+RDXmlField("segueStartPoint",q->value(33).toInt()); - ret+=" "+RDXmlField("segueEndPoint",q->value(34).toInt()); - ret+=" "+RDXmlField("segueGain",q->value(35).toInt()); - ret+=" "+RDXmlField("hookStartPoint",q->value(36).toInt()); - ret+=" "+RDXmlField("hookEndPoint",q->value(37).toInt()); - ret+=" "+RDXmlField("talkStartPoint",q->value(38).toInt()); - ret+=" "+RDXmlField("talkEndPoint",q->value(39).toInt()); - } - else { - ret+=" "+RDXmlField("startPoint",0); - ret+=" "+ - RDXmlField("endPoint",q->value(30).toInt()-q->value(29).toInt()); - if(q->value(31).toInt()<0) { - ret+=" "+RDXmlField("fadeupPoint",-1); - } - else { - ret+=" "+ - RDXmlField("fadeupPoint",q->value(31).toInt()-q->value(29).toInt()); - } - if(q->value(32).toInt()<0) { - ret+=" "+RDXmlField("fadedownPoint",-1); - } - else { - ret+=" "+ - RDXmlField("fadedownPoint",q->value(32).toInt()-q->value(29).toInt()); - } - if(q->value(33).toInt()<0) { - ret+=" "+RDXmlField("segueStartPoint",-1); - ret+=" "+RDXmlField("segueEndPoint",-1); - } - else { - ret+=" "+RDXmlField("segueStartPoint", - q->value(33).toInt()-q->value(29).toInt()); - ret+=" "+RDXmlField("segueEndPoint", - q->value(34).toInt()-q->value(29).toInt()); - } - ret+=" "+RDXmlField("segueGain",q->value(35).toInt()); - if(q->value(36).toInt()<0) { - ret+=" "+RDXmlField("hookStartPoint",-1); - ret+=" "+RDXmlField("hookEndPoint",-1); - } - else { - ret+=" "+RDXmlField("hookStartPoint", - q->value(36).toInt()-q->value(29).toInt()); - ret+=" "+RDXmlField("hookEndPoint", - q->value(37).toInt()-q->value(29).toInt()); - } - if(q->value(38).toInt()<0) { - ret+=" "+RDXmlField("talkStartPoint",-1); - ret+=" "+RDXmlField("talkEndPoint",-1); - } - else { - ret+=" "+RDXmlField("talkStartPoint", - q->value(38).toInt()-q->value(29).toInt()); - ret+=" "+RDXmlField("talkEndPoint", - q->value(39).toInt()-q->value(29).toInt()); - } - } - - ret+="\n"; - } - delete q; - return ret; -#endif // WIN32 -} - - bool RDCut::checkInRecording(const QString &stationname,RDSettings *settings, unsigned msecs) const { @@ -1586,6 +1397,145 @@ void RDCut::disconnect(QObject *receiver,const char *member) const } +QString RDCut::xml(RDSqlQuery *q,bool absolute,RDSettings *settings) +{ + QString xml=""; + + xml+="\n"; + xml+=" "+RDXmlField("cutName",q->value(28).toString()); + xml+=" "+RDXmlField("cartNumber",RDCut::cartNumber(q->value(28).toString())); + xml+=" "+RDXmlField("cutNumber",RDCut::cutNumber(q->value(28).toString())); + + xml+=" "+RDXmlField("evergreen",RDBool(q->value(29).toString())); + xml+=" "+RDXmlField("description",q->value(30).toString()); + xml+=" "+RDXmlField("outcue",q->value(31).toString()); + xml+=" "+RDXmlField("isrc",q->value(32).toString()); + xml+=" "+RDXmlField("isci",q->value(33).toString()); + xml+=" "+RDXmlField("length",q->value(34).toUInt()); + if(q->value(35).isNull()) { + xml+=" "+RDXmlField("originDatetime",""); + } + else { + xml+=" "+RDXmlField("originDatetime",q->value(35).toDateTime()); + } + if(q->value(36).isNull()) { + xml+=" "+RDXmlField("startDatetime",""); + } + else { + xml+=" "+RDXmlField("startDatetime",q->value(36).toDateTime()); + } + if(q->value(37).isNull()) { + xml+=" "+RDXmlField("endDatetime",""); + } + else { + xml+=" "+RDXmlField("endDatetime",q->value(37).toDateTime()); + } + xml+=" "+RDXmlField("sun",RDBool(q->value(38).toString())); + xml+=" "+RDXmlField("mon",RDBool(q->value(39).toString())); + xml+=" "+RDXmlField("tue",RDBool(q->value(40).toString())); + xml+=" "+RDXmlField("wed",RDBool(q->value(41).toString())); + xml+=" "+RDXmlField("thu",RDBool(q->value(42).toString())); + xml+=" "+RDXmlField("fri",RDBool(q->value(43).toString())); + xml+=" "+RDXmlField("sat",RDBool(q->value(44).toString())); + if(q->value(45).isNull()) { + xml+=" "+RDXmlField("startDaypart",""); + } + else { + xml+=" "+RDXmlField("startDaypart",q->value(45).toTime()); + } + if(q->value(46).isNull()) { + xml+=" "+RDXmlField("endDaypart",""); + } + else { + xml+=" "+RDXmlField("endDaypart",q->value(46).toTime()); + } + xml+=" "+RDXmlField("originName",q->value(47).toString()); + xml+=" "+RDXmlField("weight",q->value(48).toUInt()); + xml+=" "+RDXmlField("lastPlayDatetime",q->value(49).toDateTime()); + xml+=" "+RDXmlField("playCounter",q->value(50).toUInt()); + if(settings==NULL) { + xml+=" "+RDXmlField("codingFormat",q->value(53).toUInt()); + xml+=" "+RDXmlField("sampleRate",q->value(54).toUInt()); + xml+=" "+RDXmlField("bitRate",q->value(55).toUInt()); + xml+=" "+RDXmlField("channels",q->value(56).toUInt()); + } + else { + xml+=" "+RDXmlField("codingFormat",(int)settings->format()); + xml+=" "+RDXmlField("sampleRate",settings->sampleRate()); + xml+=" "+RDXmlField("bitRate",settings->bitRate()); + xml+=" "+RDXmlField("channels",settings->channels()); + } + xml+=" "+RDXmlField("playGain",q->value(57).toUInt()); + if(absolute) { + xml+=" "+RDXmlField("startPoint",q->value(58).toInt()); + xml+=" "+RDXmlField("endPoint",q->value(59).toInt()); + xml+=" "+RDXmlField("fadeupPoint",q->value(60).toInt()); + xml+=" "+RDXmlField("fadedownPoint",q->value(61).toInt()); + xml+=" "+RDXmlField("segueStartPoint",q->value(62).toInt()); + xml+=" "+RDXmlField("segueEndPoint",q->value(63).toInt()); + xml+=" "+RDXmlField("segueGain",q->value(64).toInt()); + xml+=" "+RDXmlField("hookStartPoint",q->value(65).toInt()); + xml+=" "+RDXmlField("hookEndPoint",q->value(66).toInt()); + xml+=" "+RDXmlField("talkStartPoint",q->value(67).toInt()); + xml+=" "+RDXmlField("talkEndPoint",q->value(68).toInt()); + } + else { + xml+=" "+RDXmlField("startPoint",0); + xml+=" "+ + RDXmlField("endPoint",q->value(30).toInt()-q->value(58).toInt()); + if(q->value(60).toInt()<0) { + xml+=" "+RDXmlField("fadeupPoint",-1); + } + else { + xml+=" "+ + RDXmlField("fadeupPoint",q->value(60).toInt()-q->value(58).toInt()); + } + if(q->value(61).toInt()<0) { + xml+=" "+RDXmlField("fadedownPoint",-1); + } + else { + xml+=" "+ + RDXmlField("fadedownPoint",q->value(61).toInt()-q->value(58).toInt()); + } + if(q->value(62).toInt()<0) { + xml+=" "+RDXmlField("segueStartPoint",-1); + xml+=" "+RDXmlField("segueEndPoint",-1); + } + else { + xml+=" "+RDXmlField("segueStartPoint", + q->value(62).toInt()-q->value(58).toInt()); + xml+=" "+RDXmlField("segueEndPoint", + q->value(63).toInt()-q->value(58).toInt()); + } + xml+=" "+RDXmlField("segueGain",q->value(64).toInt()); + if(q->value(65).toInt()<0) { + xml+=" "+RDXmlField("hookStartPoint",-1); + xml+=" "+RDXmlField("hookEndPoint",-1); + } + else { + xml+=" "+RDXmlField("hookStartPoint", + q->value(65).toInt()-q->value(58).toInt()); + xml+=" "+RDXmlField("hookEndPoint", + q->value(66).toInt()-q->value(58).toInt()); + } + if(q->value(38).toInt()<0) { + xml+=" "+RDXmlField("talkStartPoint",-1); + xml+=" "+RDXmlField("talkEndPoint",-1); + } + else { + xml+=" "+RDXmlField("talkStartPoint", + q->value(67).toInt()-q->value(58).toInt()); + xml+=" "+RDXmlField("talkEndPoint", + q->value(68).toInt()-q->value(58).toInt()); + } + } + + xml+="\n"; + + return xml; +} + + QString RDCut::cutName(unsigned cartnum,unsigned cutnum) { if((cartnum<1)||(cartnum>RD_MAX_CART_NUMBER)|| diff --git a/lib/rdcut.h b/lib/rdcut.h index 0c22c8e0..67a74297 100644 --- a/lib/rdcut.h +++ b/lib/rdcut.h @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -127,7 +128,6 @@ class RDCut RDConfig *config) const; void getMetadata(RDWaveData *data) const; void setMetadata(RDWaveData *data) const; - QString xml(bool absolute,RDSettings *settings=NULL) const; bool checkInRecording(const QString &stationname,RDSettings *settings, unsigned msecs) const; void autoTrim(RDCut::AudioEnd end,int level); @@ -136,6 +136,7 @@ class RDCut void reset() const; void connect(QObject *receiver,const char *member) const; void disconnect(QObject *receiver,const char *member) const; + static QString xml(RDSqlQuery *q,bool absolute,RDSettings *settings=NULL); static QString cutName(unsigned cartnum,unsigned cutnum); static unsigned cartNumber(const QString &cutname); static unsigned cutNumber(const QString &cutname); diff --git a/web/rdxport/carts.cpp b/web/rdxport/carts.cpp index e921c1ae..f67f9fc5 100644 --- a/web/rdxport/carts.cpp +++ b/web/rdxport/carts.cpp @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -118,12 +119,12 @@ void Xport::ListCarts() QString sql; RDSqlQuery *q; QString where=""; - RDCart *cart; QString group_name; QString filter; int include_cuts; RDCart::Type cart_type=RDCart::All; QString type; + QStringList mlist; // // Verify Post @@ -161,7 +162,7 @@ void Xport::ListCarts() if(cart_type!=RDCart::All) { where+=QString().sprintf("&&(TYPE=%u)",cart_type); } - sql="select NUMBER from CART where "+where+"order by NUMBER"; + sql=RDCart::xmlSql(include_cuts)+"where "+where+" order by CART.NUMBER"; q=new RDSqlQuery(sql); // @@ -171,13 +172,8 @@ void Xport::ListCarts() printf("Status: 200\n\n"); printf("\n"); printf("\n"); - while(q->next()) { - cart=new RDCart(q->value(0).toUInt()); - printf("%s",(const char *)cart->xml(include_cuts,true)); - delete cart; - } + printf("%s\n",(const char *)RDCart::xml(q,include_cuts,true)); printf("\n"); - delete q; Exit(0); } @@ -479,7 +475,7 @@ void Xport::AddCut() printf("\n"); cut=new RDCut(cart_number,cut_number); if(cut->exists()) { - printf("%s",(const char *)cut->xml(true)); + printf("%s",(const char *)RDCart::cutXml(cart_number,cut_number,true)); } delete cut; delete cart; @@ -491,7 +487,6 @@ void Xport::AddCut() void Xport::ListCuts() { - RDCut *cut; int cart_number; QString sql; RDSqlQuery *q; @@ -513,23 +508,18 @@ void Xport::ListCuts() // // Process Request // - sql=QString().sprintf("select CUT_NAME from CUTS where CART_NUMBER=%u \ - order by CUT_NAME", - cart_number); + sql=RDCart::xmlSql(true)+ + QString().sprintf(" where CART.NUMBER=%u",cart_number); q=new RDSqlQuery(sql); printf("Content-type: application/xml\n"); printf("Status: 200\n\n"); printf("\n"); printf("\n"); while(q->next()) { - cut=new RDCut(q->value(0).toString()); - if(cut->exists()) { - printf("%s",(const char *)cut->xml(true)); - } - delete cut; + printf("%s\n",(const char *)RDCut::xml(q,false)); } - delete q; printf("\n"); + delete q; Exit(0); } @@ -570,7 +560,7 @@ void Xport::ListCut() printf("Status: 200\n\n"); printf("\n"); printf("\n"); - printf("%s",(const char *)cut->xml(true)); + printf("%s",(const char *)RDCart::cutXml(cart_number,cut_number,true)); printf("\n"); delete cut; @@ -839,11 +829,12 @@ void Xport::EditCut() } delete cart; } + printf("Content-type: application/xml\n"); printf("Status: 200\n\n"); printf("\n"); printf("\n"); - printf("%s",(const char *)cut->xml(true)); + printf("%s",(const char *)RDCart::cutXml(cart_number,cut_number,true)); printf("\n"); delete cut;