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 Cart and Cut web methods in 'web/rdxport/carts.cpp'
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.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<RDWaveData> *data,const QString &xml)
cartdata.setPublisher(GetXmlValue("publisher",f0[i]).toString());
cartdata.setMetadataFound(true);
}
if(f0[i].contains("<songId>")) {
cartdata.setSongId(GetXmlValue("songId",f0[i]).toString());
cartdata.setMetadataFound(true);
}
if(f0[i].contains("<conductor>")) {
cartdata.setConductor(GetXmlValue("conductor",f0[i]).toString());
cartdata.setMetadataFound(true);

View File

@ -1402,62 +1402,62 @@ QString RDCut::xml(RDSqlQuery *q,bool absolute,RDSettings *settings)
QString xml="";
xml+="<cut>\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());
}
}

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
{
return data_usage_code;

View File

@ -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;

View File

@ -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());
}