2017-03-01 Fred Gleason <fredg@paravelsystems.com>

* 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.
This commit is contained in:
Fred Gleason 2017-03-01 12:58:12 -05:00
parent 0a934357c4
commit b41fb8c657
6 changed files with 134 additions and 103 deletions

View File

@ -15617,3 +15617,7 @@
* Refactored the 'RDCart::xml()' method to use a SQL query. * Refactored the 'RDCart::xml()' method to use a SQL query.
* Refactored the Cart and Cut web methods in 'web/rdxport/carts.cpp' * Refactored the Cart and Cut web methods in 'web/rdxport/carts.cpp'
to use SQL queries. to use SQL queries.
2017-03-01 Fred Gleason <fredg@paravelsystems.com>
* 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.

View File

@ -1320,50 +1320,51 @@ QString RDCart::xmlSql(bool include_cuts)
"CART.OWNER,"+ // 24 "CART.OWNER,"+ // 24
"CART.METADATA_DATETIME,"+ // 25 "CART.METADATA_DATETIME,"+ // 25
"CART.CONDUCTOR,"+ // 26 "CART.CONDUCTOR,"+ // 26
"CART.MACROS"; // 27 "CART.MACROS,"+ // 27
"CART.SONG_ID "; // 28
if(include_cuts) { if(include_cuts) {
sql+=QString(",")+ sql+=QString(",")+
"CUTS.CUT_NAME,"+ // 28 "CUTS.CUT_NAME,"+ // 29
"CUTS.EVERGREEN,"+ // 29 "CUTS.EVERGREEN,"+ // 30
"CUTS.DESCRIPTION,"+ // 30 "CUTS.DESCRIPTION,"+ // 31
"CUTS.OUTCUE,"+ // 31 "CUTS.OUTCUE,"+ // 32
"CUTS.ISRC,"+ // 32 "CUTS.ISRC,"+ // 33
"CUTS.ISCI,"+ // 33 "CUTS.ISCI,"+ // 34
"CUTS.LENGTH,"+ // 34 "CUTS.LENGTH,"+ // 35
"CUTS.ORIGIN_DATETIME,"+ // 35 "CUTS.ORIGIN_DATETIME,"+ // 36
"CUTS.START_DATETIME,"+ // 36 "CUTS.START_DATETIME,"+ // 37
"CUTS.END_DATETIME,"+ // 37 "CUTS.END_DATETIME,"+ // 38
"CUTS.SUN,"+ // 38 "CUTS.SUN,"+ // 39
"CUTS.MON,"+ // 39 "CUTS.MON,"+ // 40
"CUTS.TUE,"+ // 40 "CUTS.TUE,"+ // 41
"CUTS.WED,"+ // 41 "CUTS.WED,"+ // 42
"CUTS.THU,"+ // 42 "CUTS.THU,"+ // 43
"CUTS.FRI,"+ // 43 "CUTS.FRI,"+ // 44
"CUTS.SAT,"+ // 44 "CUTS.SAT,"+ // 45
"CUTS.START_DAYPART,"+ // 45 "CUTS.START_DAYPART,"+ // 46
"CUTS.END_DAYPART,"+ // 46 "CUTS.END_DAYPART,"+ // 47
"CUTS.ORIGIN_NAME,"+ // 47 "CUTS.ORIGIN_NAME,"+ // 48
"CUTS.WEIGHT,"+ // 48 "CUTS.WEIGHT,"+ // 49
"CUTS.LAST_PLAY_DATETIME,"+ // 49 "CUTS.LAST_PLAY_DATETIME,"+ // 50
"CUTS.PLAY_COUNTER,"+ // 50 "CUTS.PLAY_COUNTER,"+ // 51
"CUTS.LOCAL_COUNTER,"+ // 51 "CUTS.LOCAL_COUNTER,"+ // 52
"CUTS.VALIDITY,"+ // 52 "CUTS.VALIDITY,"+ // 53
"CUTS.CODING_FORMAT,"+ // 53 "CUTS.CODING_FORMAT,"+ // 54
"CUTS.SAMPLE_RATE,"+ // 54 "CUTS.SAMPLE_RATE,"+ // 55
"CUTS.BIT_RATE,"+ // 55 "CUTS.BIT_RATE,"+ // 56
"CUTS.CHANNELS,"+ // 56 "CUTS.CHANNELS,"+ // 57
"CUTS.PLAY_GAIN,"+ // 57 "CUTS.PLAY_GAIN,"+ // 58
"CUTS.START_POINT,"+ // 58 "CUTS.START_POINT,"+ // 59
"CUTS.END_POINT,"+ // 59 "CUTS.END_POINT,"+ // 60
"CUTS.FADEUP_POINT,"+ // 60 "CUTS.FADEUP_POINT,"+ // 61
"CUTS.FADEDOWN_POINT,"+ // 61 "CUTS.FADEDOWN_POINT,"+ // 62
"CUTS.SEGUE_START_POINT,"+ // 62 "CUTS.SEGUE_START_POINT,"+ // 63
"CUTS.SEGUE_END_POINT,"+ // 63 "CUTS.SEGUE_END_POINT,"+ // 64
"CUTS.SEGUE_GAIN,"+ // 64 "CUTS.SEGUE_GAIN,"+ // 65
"CUTS.HOOK_START_POINT,"+ // 65 "CUTS.HOOK_START_POINT,"+ // 66
"CUTS.HOOK_END_POINT,"+ // 66 "CUTS.HOOK_END_POINT,"+ // 67
"CUTS.TALK_START_POINT,"+ // 67 "CUTS.TALK_START_POINT,"+ // 68
"CUTS.TALK_END_POINT "+ // 68 "CUTS.TALK_END_POINT "+ // 69
"from CART left join CUTS "+ "from CART left join CUTS "+
"on CART.NUMBER=CUTS.CART_NUMBER "; "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("asyncronous",RDBool(q->value(23).toString()));
xml+=" "+RDXmlField("owner",q->value(24).toString()); xml+=" "+RDXmlField("owner",q->value(24).toString());
xml+=" "+RDXmlField("metadataDatetime",q->value(25).toDateTime()); xml+=" "+RDXmlField("metadataDatetime",q->value(25).toDateTime());
xml+=" "+RDXmlField("songId",q->value(28).toString());
switch((RDCart::Type)q->value(1).toInt()) { switch((RDCart::Type)q->value(1).toInt()) {
case RDCart::Audio: case RDCart::Audio:
if(include_cuts) { if(include_cuts) {
@ -1739,6 +1741,10 @@ unsigned RDCart::readXml(std::vector<RDWaveData> *data,const QString &xml)
cartdata.setPublisher(GetXmlValue("publisher",f0[i]).toString()); cartdata.setPublisher(GetXmlValue("publisher",f0[i]).toString());
cartdata.setMetadataFound(true); cartdata.setMetadataFound(true);
} }
if(f0[i].contains("<songId>")) {
cartdata.setSongId(GetXmlValue("songId",f0[i]).toString());
cartdata.setMetadataFound(true);
}
if(f0[i].contains("<conductor>")) { if(f0[i].contains("<conductor>")) {
cartdata.setConductor(GetXmlValue("conductor",f0[i]).toString()); cartdata.setConductor(GetXmlValue("conductor",f0[i]).toString());
cartdata.setMetadataFound(true); cartdata.setMetadataFound(true);

View File

@ -1402,62 +1402,62 @@ QString RDCut::xml(RDSqlQuery *q,bool absolute,RDSettings *settings)
QString xml=""; QString xml="";
xml+="<cut>\n"; xml+="<cut>\n";
xml+=" "+RDXmlField("cutName",q->value(28).toString()); xml+=" "+RDXmlField("cutName",q->value(29).toString());
xml+=" "+RDXmlField("cartNumber",RDCut::cartNumber(q->value(28).toString())); xml+=" "+RDXmlField("cartNumber",RDCut::cartNumber(q->value(29).toString()));
xml+=" "+RDXmlField("cutNumber",RDCut::cutNumber(q->value(28).toString())); xml+=" "+RDXmlField("cutNumber",RDCut::cutNumber(q->value(29).toString()));
xml+=" "+RDXmlField("evergreen",RDBool(q->value(29).toString())); xml+=" "+RDXmlField("evergreen",RDBool(q->value(30).toString()));
xml+=" "+RDXmlField("description",q->value(30).toString()); xml+=" "+RDXmlField("description",q->value(31).toString());
xml+=" "+RDXmlField("outcue",q->value(31).toString()); xml+=" "+RDXmlField("outcue",q->value(32).toString());
xml+=" "+RDXmlField("isrc",q->value(32).toString()); xml+=" "+RDXmlField("isrc",q->value(33).toString());
xml+=" "+RDXmlField("isci",q->value(33).toString()); xml+=" "+RDXmlField("isci",q->value(34).toString());
xml+=" "+RDXmlField("length",q->value(34).toUInt()); xml+=" "+RDXmlField("length",q->value(35).toUInt());
if(q->value(35).isNull()) { if(q->value(36).isNull()) {
xml+=" "+RDXmlField("originDatetime",""); xml+=" "+RDXmlField("originDatetime","");
} }
else { 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",""); xml+=" "+RDXmlField("startDatetime","");
} }
else { 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",""); xml+=" "+RDXmlField("endDatetime","");
} }
else { 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("sun",RDBool(q->value(39).toString()));
xml+=" "+RDXmlField("mon",RDBool(q->value(39).toString())); xml+=" "+RDXmlField("mon",RDBool(q->value(40).toString()));
xml+=" "+RDXmlField("tue",RDBool(q->value(40).toString())); xml+=" "+RDXmlField("tue",RDBool(q->value(41).toString()));
xml+=" "+RDXmlField("wed",RDBool(q->value(41).toString())); xml+=" "+RDXmlField("wed",RDBool(q->value(42).toString()));
xml+=" "+RDXmlField("thu",RDBool(q->value(42).toString())); xml+=" "+RDXmlField("thu",RDBool(q->value(43).toString()));
xml+=" "+RDXmlField("fri",RDBool(q->value(43).toString())); xml+=" "+RDXmlField("fri",RDBool(q->value(44).toString()));
xml+=" "+RDXmlField("sat",RDBool(q->value(44).toString())); xml+=" "+RDXmlField("sat",RDBool(q->value(45).toString()));
if(q->value(45).isNull()) { if(q->value(46).isNull()) {
xml+=" "+RDXmlField("startDaypart",""); xml+=" "+RDXmlField("startDaypart","");
} }
else { 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",""); xml+=" "+RDXmlField("endDaypart","");
} }
else { else {
xml+=" "+RDXmlField("endDaypart",q->value(46).toTime()); xml+=" "+RDXmlField("endDaypart",q->value(47).toTime());
} }
xml+=" "+RDXmlField("originName",q->value(47).toString()); xml+=" "+RDXmlField("originName",q->value(48).toString());
xml+=" "+RDXmlField("weight",q->value(48).toUInt()); xml+=" "+RDXmlField("weight",q->value(49).toUInt());
xml+=" "+RDXmlField("lastPlayDatetime",q->value(49).toDateTime()); xml+=" "+RDXmlField("lastPlayDatetime",q->value(50).toDateTime());
xml+=" "+RDXmlField("playCounter",q->value(50).toUInt()); xml+=" "+RDXmlField("playCounter",q->value(51).toUInt());
if(settings==NULL) { if(settings==NULL) {
xml+=" "+RDXmlField("codingFormat",q->value(53).toUInt()); xml+=" "+RDXmlField("codingFormat",q->value(54).toUInt());
xml+=" "+RDXmlField("sampleRate",q->value(54).toUInt()); xml+=" "+RDXmlField("sampleRate",q->value(55).toUInt());
xml+=" "+RDXmlField("bitRate",q->value(55).toUInt()); xml+=" "+RDXmlField("bitRate",q->value(56).toUInt());
xml+=" "+RDXmlField("channels",q->value(56).toUInt()); xml+=" "+RDXmlField("channels",q->value(57).toUInt());
} }
else { else {
xml+=" "+RDXmlField("codingFormat",(int)settings->format()); 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("bitRate",settings->bitRate());
xml+=" "+RDXmlField("channels",settings->channels()); xml+=" "+RDXmlField("channels",settings->channels());
} }
xml+=" "+RDXmlField("playGain",q->value(57).toUInt()); xml+=" "+RDXmlField("playGain",q->value(58).toUInt());
if(absolute) { if(absolute) {
xml+=" "+RDXmlField("startPoint",q->value(58).toInt()); xml+=" "+RDXmlField("startPoint",q->value(59).toInt());
xml+=" "+RDXmlField("endPoint",q->value(59).toInt()); xml+=" "+RDXmlField("endPoint",q->value(60).toInt());
xml+=" "+RDXmlField("fadeupPoint",q->value(60).toInt()); xml+=" "+RDXmlField("fadeupPoint",q->value(61).toInt());
xml+=" "+RDXmlField("fadedownPoint",q->value(61).toInt()); xml+=" "+RDXmlField("fadedownPoint",q->value(62).toInt());
xml+=" "+RDXmlField("segueStartPoint",q->value(62).toInt()); xml+=" "+RDXmlField("segueStartPoint",q->value(63).toInt());
xml+=" "+RDXmlField("segueEndPoint",q->value(63).toInt()); xml+=" "+RDXmlField("segueEndPoint",q->value(64).toInt());
xml+=" "+RDXmlField("segueGain",q->value(64).toInt()); xml+=" "+RDXmlField("segueGain",q->value(65).toInt());
xml+=" "+RDXmlField("hookStartPoint",q->value(65).toInt()); xml+=" "+RDXmlField("hookStartPoint",q->value(66).toInt());
xml+=" "+RDXmlField("hookEndPoint",q->value(66).toInt()); xml+=" "+RDXmlField("hookEndPoint",q->value(67).toInt());
xml+=" "+RDXmlField("talkStartPoint",q->value(67).toInt()); xml+=" "+RDXmlField("talkStartPoint",q->value(68).toInt());
xml+=" "+RDXmlField("talkEndPoint",q->value(68).toInt()); xml+=" "+RDXmlField("talkEndPoint",q->value(69).toInt());
} }
else { else {
xml+=" "+RDXmlField("startPoint",0); xml+=" "+RDXmlField("startPoint",0);
xml+=" "+ xml+=" "+
RDXmlField("endPoint",q->value(30).toInt()-q->value(58).toInt()); RDXmlField("endPoint",q->value(31).toInt()-q->value(59).toInt());
if(q->value(60).toInt()<0) { if(q->value(61).toInt()<0) {
xml+=" "+RDXmlField("fadeupPoint",-1); xml+=" "+RDXmlField("fadeupPoint",-1);
} }
else { else {
xml+=" "+ 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); xml+=" "+RDXmlField("fadedownPoint",-1);
} }
else { else {
xml+=" "+ 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("segueStartPoint",-1);
xml+=" "+RDXmlField("segueEndPoint",-1); xml+=" "+RDXmlField("segueEndPoint",-1);
} }
else { else {
xml+=" "+RDXmlField("segueStartPoint", xml+=" "+RDXmlField("segueStartPoint",
q->value(62).toInt()-q->value(58).toInt()); q->value(63).toInt()-q->value(59).toInt());
xml+=" "+RDXmlField("segueEndPoint", 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()); xml+=" "+RDXmlField("segueGain",q->value(65).toInt());
if(q->value(65).toInt()<0) { if(q->value(66).toInt()<0) {
xml+=" "+RDXmlField("hookStartPoint",-1); xml+=" "+RDXmlField("hookStartPoint",-1);
xml+=" "+RDXmlField("hookEndPoint",-1); xml+=" "+RDXmlField("hookEndPoint",-1);
} }
else { else {
xml+=" "+RDXmlField("hookStartPoint", xml+=" "+RDXmlField("hookStartPoint",
q->value(65).toInt()-q->value(58).toInt()); q->value(66).toInt()-q->value(59).toInt());
xml+=" "+RDXmlField("hookEndPoint", 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("talkStartPoint",-1);
xml+=" "+RDXmlField("talkEndPoint",-1); xml+=" "+RDXmlField("talkEndPoint",-1);
} }
else { else {
xml+=" "+RDXmlField("talkStartPoint", xml+=" "+RDXmlField("talkStartPoint",
q->value(67).toInt()-q->value(58).toInt()); q->value(68).toInt()-q->value(59).toInt());
xml+=" "+RDXmlField("talkEndPoint", xml+=" "+RDXmlField("talkEndPoint",
q->value(68).toInt()-q->value(58).toInt()); q->value(69).toInt()-q->value(59).toInt());
} }
} }

View File

@ -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 RDWaveData::UsageCode RDWaveData::usageCode() const
{ {
return data_usage_code; return data_usage_code;

View File

@ -65,6 +65,8 @@ class RDWaveData
void setComposer(const QString &str); void setComposer(const QString &str);
QString publisher() const; QString publisher() const;
void setPublisher(const QString &str); void setPublisher(const QString &str);
QString songId() const;
void setSongId(const QString &str);
UsageCode usageCode() const; UsageCode usageCode() const;
void setUsageCode(UsageCode code); void setUsageCode(UsageCode code);
QStringList schedCodes() const; QStringList schedCodes() const;
@ -201,6 +203,7 @@ class RDWaveData
QString data_artist; QString data_artist;
QString data_album; QString data_album;
QString data_conductor; QString data_conductor;
QString data_song_id;
QString data_label; QString data_label;
int data_release_year; int data_release_year;
QString data_client; QString data_client;

View File

@ -642,6 +642,9 @@ void AudioCart::importCutData()
rdcart_controls->year_edit-> rdcart_controls->year_edit->
setText(QString().sprintf("%d",wavedata.releaseYear())); 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()) { if(rdcart_controls->label_edit->text().isEmpty()) {
rdcart_controls->label_edit->setText(wavedata.label()); rdcart_controls->label_edit->setText(wavedata.label());
} }
@ -654,6 +657,9 @@ void AudioCart::importCutData()
if(rdcart_controls->publisher_edit->text().isEmpty()) { if(rdcart_controls->publisher_edit->text().isEmpty()) {
rdcart_controls->publisher_edit->setText(wavedata.publisher()); 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()) { if(rdcart_controls->composer_edit->text().isEmpty()) {
rdcart_controls->composer_edit->setText(wavedata.composer()); rdcart_controls->composer_edit->setText(wavedata.composer());
} }