From b41fb8c657510808d9b992b81500ffd51054d8e8 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Wed, 1 Mar 2017 12:58:12 -0500 Subject: [PATCH] 2017-03-01 Fred Gleason * Fixed a bug in 'rdlibrary/audio_cart.cpp' where the 'Conductor' failed to be imported from RDXL chunks. * Added a 'songId' field to the cart metadata XML. --- ChangeLog | 4 ++ lib/rdcart.cpp | 90 +++++++++++++++-------------- lib/rdcut.cpp | 122 +++++++++++++++++++-------------------- lib/rdwavedata.cpp | 12 ++++ lib/rdwavedata.h | 3 + rdlibrary/audio_cart.cpp | 6 ++ 6 files changed, 134 insertions(+), 103 deletions(-) diff --git a/ChangeLog b/ChangeLog index ebe98790..1b9cfd22 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15617,3 +15617,7 @@ * 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. +2017-03-01 Fred Gleason + * Fixed a bug in 'rdlibrary/audio_cart.cpp' where the 'Conductor' + failed to be imported from RDXL chunks. + * Added a 'songId' field to the cart metadata XML. diff --git a/lib/rdcart.cpp b/lib/rdcart.cpp index 4ee52bfd..3326e2f7 100644 --- a/lib/rdcart.cpp +++ b/lib/rdcart.cpp @@ -1320,50 +1320,51 @@ QString RDCart::xmlSql(bool include_cuts) "CART.OWNER,"+ // 24 "CART.METADATA_DATETIME,"+ // 25 "CART.CONDUCTOR,"+ // 26 - "CART.MACROS"; // 27 + "CART.MACROS,"+ // 27 + "CART.SONG_ID "; // 28 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 + "CUTS.CUT_NAME,"+ // 29 + "CUTS.EVERGREEN,"+ // 30 + "CUTS.DESCRIPTION,"+ // 31 + "CUTS.OUTCUE,"+ // 32 + "CUTS.ISRC,"+ // 33 + "CUTS.ISCI,"+ // 34 + "CUTS.LENGTH,"+ // 35 + "CUTS.ORIGIN_DATETIME,"+ // 36 + "CUTS.START_DATETIME,"+ // 37 + "CUTS.END_DATETIME,"+ // 38 + "CUTS.SUN,"+ // 39 + "CUTS.MON,"+ // 40 + "CUTS.TUE,"+ // 41 + "CUTS.WED,"+ // 42 + "CUTS.THU,"+ // 43 + "CUTS.FRI,"+ // 44 + "CUTS.SAT,"+ // 45 + "CUTS.START_DAYPART,"+ // 46 + "CUTS.END_DAYPART,"+ // 47 + "CUTS.ORIGIN_NAME,"+ // 48 + "CUTS.WEIGHT,"+ // 49 + "CUTS.LAST_PLAY_DATETIME,"+ // 50 + "CUTS.PLAY_COUNTER,"+ // 51 + "CUTS.LOCAL_COUNTER,"+ // 52 + "CUTS.VALIDITY,"+ // 53 + "CUTS.CODING_FORMAT,"+ // 54 + "CUTS.SAMPLE_RATE,"+ // 55 + "CUTS.BIT_RATE,"+ // 56 + "CUTS.CHANNELS,"+ // 57 + "CUTS.PLAY_GAIN,"+ // 58 + "CUTS.START_POINT,"+ // 59 + "CUTS.END_POINT,"+ // 60 + "CUTS.FADEUP_POINT,"+ // 61 + "CUTS.FADEDOWN_POINT,"+ // 62 + "CUTS.SEGUE_START_POINT,"+ // 63 + "CUTS.SEGUE_END_POINT,"+ // 64 + "CUTS.SEGUE_GAIN,"+ // 65 + "CUTS.HOOK_START_POINT,"+ // 66 + "CUTS.HOOK_END_POINT,"+ // 67 + "CUTS.TALK_START_POINT,"+ // 68 + "CUTS.TALK_END_POINT "+ // 69 "from CART left join CUTS "+ "on CART.NUMBER=CUTS.CART_NUMBER "; } @@ -1425,6 +1426,7 @@ QString RDCart::xml(RDSqlQuery *q,bool include_cuts, xml+=" "+RDXmlField("asyncronous",RDBool(q->value(23).toString())); xml+=" "+RDXmlField("owner",q->value(24).toString()); xml+=" "+RDXmlField("metadataDatetime",q->value(25).toDateTime()); + xml+=" "+RDXmlField("songId",q->value(28).toString()); switch((RDCart::Type)q->value(1).toInt()) { case RDCart::Audio: if(include_cuts) { @@ -1739,6 +1741,10 @@ unsigned RDCart::readXml(std::vector *data,const QString &xml) cartdata.setPublisher(GetXmlValue("publisher",f0[i]).toString()); cartdata.setMetadataFound(true); } + if(f0[i].contains("")) { + cartdata.setSongId(GetXmlValue("songId",f0[i]).toString()); + cartdata.setMetadataFound(true); + } if(f0[i].contains("")) { cartdata.setConductor(GetXmlValue("conductor",f0[i]).toString()); cartdata.setMetadataFound(true); diff --git a/lib/rdcut.cpp b/lib/rdcut.cpp index 117601aa..617e393e 100644 --- a/lib/rdcut.cpp +++ b/lib/rdcut.cpp @@ -1402,62 +1402,62 @@ 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("cutName",q->value(29).toString()); + xml+=" "+RDXmlField("cartNumber",RDCut::cartNumber(q->value(29).toString())); + xml+=" "+RDXmlField("cutNumber",RDCut::cutNumber(q->value(29).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("evergreen",RDBool(q->value(30).toString())); + xml+=" "+RDXmlField("description",q->value(31).toString()); + xml+=" "+RDXmlField("outcue",q->value(32).toString()); + xml+=" "+RDXmlField("isrc",q->value(33).toString()); + xml+=" "+RDXmlField("isci",q->value(34).toString()); + xml+=" "+RDXmlField("length",q->value(35).toUInt()); + if(q->value(36).isNull()) { xml+=" "+RDXmlField("originDatetime",""); } else { - xml+=" "+RDXmlField("originDatetime",q->value(35).toDateTime()); + xml+=" "+RDXmlField("originDatetime",q->value(36).toDateTime()); } - if(q->value(36).isNull()) { + if(q->value(37).isNull()) { xml+=" "+RDXmlField("startDatetime",""); } else { - xml+=" "+RDXmlField("startDatetime",q->value(36).toDateTime()); + xml+=" "+RDXmlField("startDatetime",q->value(37).toDateTime()); } - if(q->value(37).isNull()) { + if(q->value(38).isNull()) { xml+=" "+RDXmlField("endDatetime",""); } else { - xml+=" "+RDXmlField("endDatetime",q->value(37).toDateTime()); + xml+=" "+RDXmlField("endDatetime",q->value(38).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("sun",RDBool(q->value(39).toString())); + xml+=" "+RDXmlField("mon",RDBool(q->value(40).toString())); + xml+=" "+RDXmlField("tue",RDBool(q->value(41).toString())); + xml+=" "+RDXmlField("wed",RDBool(q->value(42).toString())); + xml+=" "+RDXmlField("thu",RDBool(q->value(43).toString())); + xml+=" "+RDXmlField("fri",RDBool(q->value(44).toString())); + xml+=" "+RDXmlField("sat",RDBool(q->value(45).toString())); + if(q->value(46).isNull()) { xml+=" "+RDXmlField("startDaypart",""); } else { - xml+=" "+RDXmlField("startDaypart",q->value(45).toTime()); + xml+=" "+RDXmlField("startDaypart",q->value(46).toTime()); } - if(q->value(46).isNull()) { + if(q->value(47).isNull()) { xml+=" "+RDXmlField("endDaypart",""); } else { - xml+=" "+RDXmlField("endDaypart",q->value(46).toTime()); + xml+=" "+RDXmlField("endDaypart",q->value(47).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()); + xml+=" "+RDXmlField("originName",q->value(48).toString()); + xml+=" "+RDXmlField("weight",q->value(49).toUInt()); + xml+=" "+RDXmlField("lastPlayDatetime",q->value(50).toDateTime()); + xml+=" "+RDXmlField("playCounter",q->value(51).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()); + xml+=" "+RDXmlField("codingFormat",q->value(54).toUInt()); + xml+=" "+RDXmlField("sampleRate",q->value(55).toUInt()); + xml+=" "+RDXmlField("bitRate",q->value(56).toUInt()); + xml+=" "+RDXmlField("channels",q->value(57).toUInt()); } else { xml+=" "+RDXmlField("codingFormat",(int)settings->format()); @@ -1465,68 +1465,68 @@ QString RDCut::xml(RDSqlQuery *q,bool absolute,RDSettings *settings) xml+=" "+RDXmlField("bitRate",settings->bitRate()); xml+=" "+RDXmlField("channels",settings->channels()); } - xml+=" "+RDXmlField("playGain",q->value(57).toUInt()); + xml+=" "+RDXmlField("playGain",q->value(58).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()); + xml+=" "+RDXmlField("startPoint",q->value(59).toInt()); + xml+=" "+RDXmlField("endPoint",q->value(60).toInt()); + xml+=" "+RDXmlField("fadeupPoint",q->value(61).toInt()); + xml+=" "+RDXmlField("fadedownPoint",q->value(62).toInt()); + xml+=" "+RDXmlField("segueStartPoint",q->value(63).toInt()); + xml+=" "+RDXmlField("segueEndPoint",q->value(64).toInt()); + xml+=" "+RDXmlField("segueGain",q->value(65).toInt()); + xml+=" "+RDXmlField("hookStartPoint",q->value(66).toInt()); + xml+=" "+RDXmlField("hookEndPoint",q->value(67).toInt()); + xml+=" "+RDXmlField("talkStartPoint",q->value(68).toInt()); + xml+=" "+RDXmlField("talkEndPoint",q->value(69).toInt()); } else { xml+=" "+RDXmlField("startPoint",0); xml+=" "+ - RDXmlField("endPoint",q->value(30).toInt()-q->value(58).toInt()); - if(q->value(60).toInt()<0) { + RDXmlField("endPoint",q->value(31).toInt()-q->value(59).toInt()); + if(q->value(61).toInt()<0) { xml+=" "+RDXmlField("fadeupPoint",-1); } else { xml+=" "+ - RDXmlField("fadeupPoint",q->value(60).toInt()-q->value(58).toInt()); + RDXmlField("fadeupPoint",q->value(61).toInt()-q->value(59).toInt()); } - if(q->value(61).toInt()<0) { + if(q->value(62).toInt()<0) { xml+=" "+RDXmlField("fadedownPoint",-1); } else { xml+=" "+ - RDXmlField("fadedownPoint",q->value(61).toInt()-q->value(58).toInt()); + RDXmlField("fadedownPoint",q->value(62).toInt()-q->value(59).toInt()); } - if(q->value(62).toInt()<0) { + if(q->value(63).toInt()<0) { xml+=" "+RDXmlField("segueStartPoint",-1); xml+=" "+RDXmlField("segueEndPoint",-1); } else { xml+=" "+RDXmlField("segueStartPoint", - q->value(62).toInt()-q->value(58).toInt()); + q->value(63).toInt()-q->value(59).toInt()); xml+=" "+RDXmlField("segueEndPoint", - q->value(63).toInt()-q->value(58).toInt()); + q->value(64).toInt()-q->value(59).toInt()); } - xml+=" "+RDXmlField("segueGain",q->value(64).toInt()); - if(q->value(65).toInt()<0) { + xml+=" "+RDXmlField("segueGain",q->value(65).toInt()); + if(q->value(66).toInt()<0) { xml+=" "+RDXmlField("hookStartPoint",-1); xml+=" "+RDXmlField("hookEndPoint",-1); } else { xml+=" "+RDXmlField("hookStartPoint", - q->value(65).toInt()-q->value(58).toInt()); + q->value(66).toInt()-q->value(59).toInt()); xml+=" "+RDXmlField("hookEndPoint", - q->value(66).toInt()-q->value(58).toInt()); + q->value(67).toInt()-q->value(59).toInt()); } - if(q->value(38).toInt()<0) { + if(q->value(39).toInt()<0) { xml+=" "+RDXmlField("talkStartPoint",-1); xml+=" "+RDXmlField("talkEndPoint",-1); } else { xml+=" "+RDXmlField("talkStartPoint", - q->value(67).toInt()-q->value(58).toInt()); + q->value(68).toInt()-q->value(59).toInt()); xml+=" "+RDXmlField("talkEndPoint", - q->value(68).toInt()-q->value(58).toInt()); + q->value(69).toInt()-q->value(59).toInt()); } } diff --git a/lib/rdwavedata.cpp b/lib/rdwavedata.cpp index a04d5cf1..c43fb9e8 100644 --- a/lib/rdwavedata.cpp +++ b/lib/rdwavedata.cpp @@ -209,6 +209,18 @@ void RDWaveData::setPublisher(const QString &str) } +QString RDWaveData::songId() const +{ + return data_song_id; +} + + +void RDWaveData::setSongId(const QString &str) +{ + data_song_id=str; +} + + RDWaveData::UsageCode RDWaveData::usageCode() const { return data_usage_code; diff --git a/lib/rdwavedata.h b/lib/rdwavedata.h index d0c94187..80ebf0f6 100644 --- a/lib/rdwavedata.h +++ b/lib/rdwavedata.h @@ -65,6 +65,8 @@ class RDWaveData void setComposer(const QString &str); QString publisher() const; void setPublisher(const QString &str); + QString songId() const; + void setSongId(const QString &str); UsageCode usageCode() const; void setUsageCode(UsageCode code); QStringList schedCodes() const; @@ -201,6 +203,7 @@ class RDWaveData QString data_artist; QString data_album; QString data_conductor; + QString data_song_id; QString data_label; int data_release_year; QString data_client; diff --git a/rdlibrary/audio_cart.cpp b/rdlibrary/audio_cart.cpp index 8514b1f1..f8d802d7 100644 --- a/rdlibrary/audio_cart.cpp +++ b/rdlibrary/audio_cart.cpp @@ -642,6 +642,9 @@ void AudioCart::importCutData() rdcart_controls->year_edit-> setText(QString().sprintf("%d",wavedata.releaseYear())); } + if(rdcart_controls->song_id_edit->text().isEmpty()) { + rdcart_controls->song_id_edit->setText(wavedata.songId()); + } if(rdcart_controls->label_edit->text().isEmpty()) { rdcart_controls->label_edit->setText(wavedata.label()); } @@ -654,6 +657,9 @@ void AudioCart::importCutData() if(rdcart_controls->publisher_edit->text().isEmpty()) { rdcart_controls->publisher_edit->setText(wavedata.publisher()); } + if(rdcart_controls->conductor_edit->text().isEmpty()) { + rdcart_controls->conductor_edit->setText(wavedata.conductor()); + } if(rdcart_controls->composer_edit->text().isEmpty()) { rdcart_controls->composer_edit->setText(wavedata.composer()); }