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

* 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.
This commit is contained in:
Fred Gleason 2017-03-01 11:52:14 -05:00
parent 839aa239c8
commit 0a934357c4
6 changed files with 370 additions and 332 deletions

View File

@ -15612,3 +15612,8 @@
events.
2017-02-28 Fred Gleason <fredg@paravelsystems.com>
* Fixed a regression in 'lib/rdformpost.cpp'.
2017-03-01 Fred Gleason <fredg@paravelsystems.com>
* 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.

View File

@ -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+="<cart>\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+="<cutList>\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+="</cutList>\n";
}
break;
case RDCart::Macro:
mlist=mlist.split("!",macros());
ret+=" <macroList>\n";
for(unsigned i=0;i<mlist.size();i++) {
ret+=QString().sprintf(" <macro%d>",i)+mlist[i]+
QString().sprintf("!</macro%d>\n",i);
}
ret+=" </macroList>\n";
break;
case RDCart::All:
break;
}
ret+="</cart>\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+="<cart>\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+=" <cutList/>\n";
}
else {
xml+=" <cutList>\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+=" </cutList>\n";
}
}
break;
case RDCart::Macro:
mlist=mlist.split("!",q->value(27).toString());
if(mlist.size()==0) {
xml+=" <macroList/>\n";
}
else {
xml+=" <macroList>\n";
for(unsigned i=0;i<mlist.size();i++) {
xml+=" "+RDXmlField(QString().sprintf("macro%d",i),mlist[i]+"!");
}
xml+=" </macroList>\n";
}
break;
case RDCart::All:
break;
}
xml+="</cart>\n";
}
return xml;
}
QString RDCart::cutXml(unsigned cartnum,int cutnum,bool absolute,
RDSettings *settings)
{
QString xml="";
QString sql=RDCart::xmlSql(true)+" where "+
"CUTS.CUT_NAME=\""+RDCut::cutName(cartnum,cutnum)+"\"";
RDSqlQuery *q=new RDSqlQuery(sql);
if(q->first()) {
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\

View File

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

View File

@ -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+="<cut>\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+="</cut>\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+="<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("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+="</cut>\n";
return xml;
}
QString RDCut::cutName(unsigned cartnum,unsigned cutnum)
{
if((cartnum<1)||(cartnum>RD_MAX_CART_NUMBER)||

View File

@ -23,6 +23,7 @@
#include <qobject.h>
#include <rdconfig.h>
#include <rddb.h>
#include <rdwavedata.h>
#include <rdsettings.h>
#include <rdstation.h>
@ -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);

View File

@ -25,6 +25,7 @@
#include <errno.h>
#include <rdformpost.h>
#include <rdlog_line.h>
#include <rdweb.h>
#include <rduser.h>
#include <rdgroup.h>
@ -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("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
printf("<cartList>\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("</cartList>\n");
delete q;
Exit(0);
}
@ -479,7 +475,7 @@ void Xport::AddCut()
printf("<cutAdd>\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("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
printf("<cutList>\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("</cutList>\n");
delete q;
Exit(0);
}
@ -570,7 +560,7 @@ void Xport::ListCut()
printf("Status: 200\n\n");
printf("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
printf("<cutList>\n");
printf("%s",(const char *)cut->xml(true));
printf("%s",(const char *)RDCart::cutXml(cart_number,cut_number,true));
printf("</cutList>\n");
delete cut;
@ -839,11 +829,12 @@ void Xport::EditCut()
}
delete cart;
}
printf("Content-type: application/xml\n");
printf("Status: 200\n\n");
printf("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
printf("<cutList>\n");
printf("%s",(const char *)cut->xml(true));
printf("%s",(const char *)RDCart::cutXml(cart_number,cut_number,true));
printf("</cutList>\n");
delete cut;