Fixed conflict in 'ChangeLog'

This commit is contained in:
Fred Gleason 2019-04-22 16:54:02 -04:00
commit 207cd93741
4 changed files with 189 additions and 169 deletions

View File

@ -18582,3 +18582,6 @@
2019-04-22 Patrick Linstruth <patrick@deltecent.com>
* Fixed a regression in rdimport(1) that broke the
"--set-daypart-times" argument.
2019-04-22 Patrick Linstruth <patrick@deltecent.com>
* Fixed a regression that broke clock scheduler rules
in rdlogmanager(1).

View File

@ -596,71 +596,75 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
time.addMSecs(postimport_length);
//
// Load all carts with requested scheduler codes into schedCL
//
sql=QString("select NUMBER,ARTIST from CART");
if(event_have_code!="") {
sql+=" INNER JOIN CART_SCHED_CODES AS S1 on (NUMBER=S1.CART_NUMBER AND S1.SCHED_CODE='"+RDEscapeString(event_have_code)+"')";
if(event_artist_sep>=-1 && event_artist_sep<=50000) {
artistsep = event_artist_sep;
}
if(event_have_code2!="") {
sql+=" INNER JOIN CART_SCHED_CODES AS S2 on (NUMBER=S2.CART_NUMBER AND S2.SCHED_CODE='"+RDEscapeString(event_have_code2)+"')";
else {
artistsep = 15;
}
sql+=" where GROUP_NAME='"+RDEscapeString(SchedGroup())+"'";
if(event_title_sep>=-1 && event_title_sep<=50000) {
titlesep = event_title_sep;
}
else {
titlesep = 100;
}
//
// Get next stack id from the stack
//
sql=QString("select ")+
"MAX(SCHED_STACK_ID) "+
"from STACK_LINES where "+
"SERVICE_NAME=\""+RDEscapeString(svcname)+"\"";
q=new RDSqlQuery(sql);
if(q->size()>0) {
if(event_artist_sep>=-1 && event_artist_sep<=50000) {
artistsep = event_artist_sep;
}
else {
artistsep = 15;
}
if(event_title_sep>=-1 && event_title_sep<=50000) {
titlesep = event_title_sep;
}
else {
titlesep = 100;
}
int querysize=(int)q->size();
SchedCartList *schedCL;
schedCL=new SchedCartList(querysize);
QString schedcode; // No longer needed - possibly remove at a later date
for(counter=0;counter<querysize;counter++)
{
q->seek(counter);
schedCL->insertItem(q->value(0).toUInt(),0,0,q->value(1).toString(),schedcode);
}
delete q;
if (q->next()) {
stackid=q->value(0).toUInt();
}
else {
stackid=0;
}
stackid++;
delete q;
//
// Get next stack id from the stack
//
sql=QString("select ")+
"MAX(SCHED_STACK_ID) "+
"from STACK_LINES where "+
"SERVICE_NAME=\""+RDEscapeString(svcname)+"\"";
q=new RDSqlQuery(sql);
if (q->next())
{
stackid=q->value(0).toUInt();
}
else
{
stackid=0;
}
stackid++;
delete q;
//////////////////////////////////
// //
// Add deconflicting rules here //
// //
//////////////////////////////////
//
// Load all carts in requested group into schedCL
//
sql=QString("select NUMBER,ARTIST,")+
"CONCAT(GROUP_CONCAT(RPAD(SC.SCHED_CODE,11,' ') separator ''),'.') as SCHED_CODES"+
" from CART LEFT JOIN CART_SCHED_CODES AS SC on (NUMBER=SC.CART_NUMBER)"+
" where GROUP_NAME='"+RDEscapeString(SchedGroup())+"'"+
" group by NUMBER";
q=new RDSqlQuery(sql);
int querysize=(int)q->size();
SchedCartList *schedCL;
schedCL=new SchedCartList(querysize);
for(counter=0;counter<querysize;counter++) {
q->seek(counter);
schedCL->insertItem(q->value(0).toUInt(),0,0,q->value(1).toString(),q->value(2).toString());
}
delete q;
//////////////////////////////////
// //
// Add deconflicting rules here //
// //
//////////////////////////////////
// Reduce schedCL to match requested scheduler code
if(event_have_code!=""||event_have_code2!="") {
QStringList codes;
codes << event_have_code << event_have_code2;
for(counter=0;counter<schedCL->getNumberOfItems();counter++) {
if(!schedCL->itemHasCodes(counter,codes)) {
schedCL->removeItem(counter);
counter--;
}
}
}
if(schedCL->getNumberOfItems()) {
//
// Title separation
//
@ -673,9 +677,9 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
"SERVICE_NAME=\""+RDEscapeString(svcname)+"\" && "+
QString().sprintf("SCHED_STACK_ID >= %d",stackid-titlesep);
q=new RDSqlQuery(sql);
while (q->next()) {
while (q->next()) {
for(counter=0;counter<schedCL->getNumberOfItems();counter++) {
if(q->value(0).toUInt()==schedCL->getItemCartnumber(counter)) {
if(q->value(0).toUInt()==schedCL->getItemCartNumber(counter)) {
schedCL->removeItem(counter);
counter--;
}
@ -725,7 +729,7 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
schedCL->restore();
}
// Scheduler Codes
// Clock Scheduler Rules
sql=QString("select ")+
"CODE,"+ // 00
"MAX_ROW,"+ // 01
@ -763,8 +767,9 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
q->value(0).toString()+"\n";
}
schedCL->restore();
// do not play after
if(q->value(3).toString()!="") {
if(q->value(3).toString()!="") {
schedCL->save();
QString wstr=q->value(3).toString();
wstr+=" ";
@ -787,8 +792,8 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
QObject::tr("Rule broken: Do not schedule ")+
q->value(0).toString()+" "+QObject::tr("after")+" "+
q->value(3).toString()+"\n";
schedCL->restore();
}
schedCL->restore();
}
// or after
if (q->value(4).toString()!="") {
@ -813,8 +818,8 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
QObject::tr("Rule broken: Do not schedule")+" "+
q->value(0).toString()+" "+QObject::tr("after")+" "+
q->value(4).toString()+"\n";
schedCL->restore();
}
schedCL->restore();
}
// or after II
if (q->value(5).toString()!="") {
@ -839,8 +844,8 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
QObject::tr("Rule broken: Do not schedule")+" "+
q->value(0).toString()+" "+QObject::tr("after")+" "+
q->value(5).toString()+"\n";
schedCL->restore();
}
schedCL->restore();
}
}
delete q;
@ -864,7 +869,7 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
QString().sprintf("SOURCE=%d,",source)+
QString().sprintf("START_TIME=%d,",QTime().msecsTo(time))+
QString().sprintf("GRACE_TIME=%d,",grace_time)+
QString().sprintf("CART_NUMBER=%u,",schedCL->getItemCartnumber(schedpos))+
QString().sprintf("CART_NUMBER=%u,",schedCL->getItemCartNumber(schedpos))+
QString().sprintf("TIME_TYPE=%d,",time_type)+
"POST_POINT=\""+RDYesNo(post_point)+"\","+
QString().sprintf("TRANS_TYPE=%d,",trans_type)+
@ -879,16 +884,16 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
"SERVICE_NAME=\""+RDEscapeString(svcname)+"\","+
"SCHEDULED_AT=now(),"+
QString().sprintf("SCHED_STACK_ID=%u,",stackid)+
QString().sprintf("CART=%u,",schedCL->getItemCartnumber(schedpos))+
QString().sprintf("CART=%u,",schedCL->getItemCartNumber(schedpos))+
"ARTIST=\""+RDEscapeString(schedCL->getItemArtist(schedpos))+"\","+
"SCHED_CODES=\""+RDEscapeString(schedCL->getItemSchedCodes(schedpos))+
"\"";
q=new RDSqlQuery(sql);
delete q;
delete schedCL;
}
else
{
else {
// We don't have any carts to work with
*report+=time.toString("hh:mm:ss")+
" "+QObject::tr("No carts found in group")+" "+SchedGroup();
@ -896,7 +901,8 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
*report+=QObject::tr(" with sched code(s): ")+HaveCode()+" "+HaveCode2();
}
*report+="\n";
delete q;
delete schedCL;
}
}

View File

@ -18,162 +18,171 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#include <schedcartlist.h>
#include <stdio.h>
#include "schedcartlist.h"
SchedCartList::SchedCartList(int listsize)
{
cartnum=new unsigned[listsize];
cartlen=new int[listsize];
stackid=new int[listsize];
artist=new QString[listsize];
sched_codes=new QString[listsize];
itemcounter=0;
cartnum=new unsigned[listsize];
cartlen=new int[listsize];
stackid=new int[listsize];
artist=new QString[listsize];
sched_codes=new QString[listsize];
itemcounter=0;
}
SchedCartList::~SchedCartList()
{
delete []cartnum;
delete []cartlen;
delete []stackid;
delete []artist;
delete []sched_codes;
delete []cartnum;
delete []cartlen;
delete []stackid;
delete []artist;
delete []sched_codes;
}
//
// stack_schedcodes should no longer be needed. Possibly remove at a later date. P. Linstruth 01/12/2019
//
void SchedCartList::insertItem(unsigned cartnumber,int cartlength,int stack_id,QString stack_artist,QString stack_schedcodes)
{
cartnum[itemcounter]=cartnumber;
cartlen[itemcounter]=cartlength;
stackid[itemcounter]=stack_id;
artist[itemcounter]=stack_artist.lower().replace(" ","");
sched_codes[itemcounter]=stack_schedcodes;
itemcounter++;
cartnum[itemcounter]=cartnumber;
cartlen[itemcounter]=cartlength;
stackid[itemcounter]=stack_id;
artist[itemcounter]=stack_artist.lower().replace(" ","");
if(stack_schedcodes=="") {
stack_schedcodes=".";
}
sched_codes[itemcounter]=stack_schedcodes;
itemcounter++;
}
void SchedCartList::removeItem(int itemnumber)
{
for(int i=itemnumber;i<(itemcounter-1);i++)
{
cartnum[i]=cartnum[i+1];
cartlen[i]=cartlen[i+1];
stackid[i]=stackid[i+1];
artist[i]=artist[i+1];
sched_codes[i]=sched_codes[i+1];
}
itemcounter--;
for(int i=itemnumber;i<(itemcounter-1);i++) {
cartnum[i]=cartnum[i+1];
cartlen[i]=cartlen[i+1];
stackid[i]=stackid[i+1];
artist[i]=artist[i+1];
sched_codes[i]=sched_codes[i+1];
}
itemcounter--;
}
bool SchedCartList::removeIfCode(int itemnumber,QString test_code)
{
QString test = test_code;
test+=" ";
test=test.left(11);
QString test = test_code;
test+=" ";
test=test.left(11);
if (sched_codes[itemnumber].find(test)!=-1)
{
for(int i=itemnumber;i<(itemcounter-1);i++)
{
cartnum[i]=cartnum[i+1];
cartlen[i]=cartlen[i+1];
stackid[i]=stackid[i+1];
artist[i]=artist[i+1];
sched_codes[i]=sched_codes[i+1];
}
itemcounter--;
return true;
}
return false;
if (sched_codes[itemnumber].find(test)!=-1) {
for(int i=itemnumber;i<(itemcounter-1);i++) {
cartnum[i]=cartnum[i+1];
cartlen[i]=cartlen[i+1];
stackid[i]=stackid[i+1];
artist[i]=artist[i+1];
sched_codes[i]=sched_codes[i+1];
}
itemcounter--;
return true;
}
return false;
}
bool SchedCartList::itemHasCode(int itemnumber,QString test_code)
{
QString test=test_code;
test+=" ";
test=test.left(11);
QString test=test_code;
test+=" ";
test=test.left(11);
if (sched_codes[itemnumber].find(test)!=-1)
return true;
else
return false;
if (sched_codes[itemnumber].find(test)!=-1) {
return true;
}
else {
return false;
}
}
bool SchedCartList::itemHasCodes(int itemnumber,QStringList test_codes)
{
for (int i=0;i<test_codes.size();i++) {
QString test=test_codes.at(i);
test+=" ";
test=test.left(11);
if (sched_codes[itemnumber].find(test)!=-1) {
return true;
}
}
return false;
}
void SchedCartList::save(void)
{
savecartnum=new unsigned[itemcounter];
savecartlen=new int[itemcounter];
savestackid=new int[itemcounter];
saveartist=new QString[itemcounter];
save_sched_codes=new QString[itemcounter];
savecartnum=new unsigned[itemcounter];
savecartlen=new int[itemcounter];
savestackid=new int[itemcounter];
saveartist=new QString[itemcounter];
save_sched_codes=new QString[itemcounter];
saveitemcounter=itemcounter;
for(int i=0;i<saveitemcounter;i++)
{
savecartnum[i]=cartnum[i];
savecartlen[i]=cartlen[i];
savestackid[i]=stackid[i];
saveartist[i]=artist[i];
save_sched_codes[i]=sched_codes[i];
}
saveitemcounter=itemcounter;
for(int i=0;i<saveitemcounter;i++) {
savecartnum[i]=cartnum[i];
savecartlen[i]=cartlen[i];
savestackid[i]=stackid[i];
saveartist[i]=artist[i];
save_sched_codes[i]=sched_codes[i];
}
}
void SchedCartList::restore(void)
{
if(itemcounter==0)
{
for(int i=0;i<saveitemcounter;i++)
{
cartnum[i]=savecartnum[i];
cartlen[i]=savecartlen[i];
stackid[i]=savestackid[i];
artist[i]=saveartist[i];
sched_codes[i]=save_sched_codes[i];
}
itemcounter=saveitemcounter;
}
delete []savecartnum;
delete []savecartlen;
delete []savestackid;
delete []saveartist;
delete []save_sched_codes;
if(itemcounter==0) {
for(int i=0;i<saveitemcounter;i++) {
cartnum[i]=savecartnum[i];
cartlen[i]=savecartlen[i];
stackid[i]=savestackid[i];
artist[i]=saveartist[i];
sched_codes[i]=save_sched_codes[i];
}
itemcounter=saveitemcounter;
}
delete []savecartnum;
delete []savecartlen;
delete []savestackid;
delete []saveartist;
delete []save_sched_codes;
}
unsigned SchedCartList::getItemCartnumber(int itemnumber)
unsigned SchedCartList::getItemCartNumber(int itemnumber)
{
return cartnum[itemnumber];
return cartnum[itemnumber];
}
int SchedCartList::getItemStackid(int itemnumber)
{
return stackid[itemnumber];
return stackid[itemnumber];
}
QString SchedCartList::getItemArtist(int itemnumber)
{
return artist[itemnumber];
return artist[itemnumber];
}
QString SchedCartList::getItemSchedCodes(int itemnumber)
{
return sched_codes[itemnumber];
return sched_codes[itemnumber];
}
int SchedCartList::getItemCartlength(int itemnumber)
int SchedCartList::getItemCartLength(int itemnumber)
{
return cartlen[itemnumber];
return cartlen[itemnumber];
}
int SchedCartList::getNumberOfItems(void)
{
return itemcounter;
return itemcounter;
}

View File

@ -22,6 +22,7 @@
#define SCHEDCARTLIST_H
#include <qsqldatabase.h>
#include <qstringlist.h>
class SchedCartList
{
@ -32,8 +33,9 @@ class SchedCartList
void removeItem(int itemnumber);
bool removeIfCode(int itemnumber,QString test_code);
bool itemHasCode(int itemnumber,QString test_code);
unsigned getItemCartnumber(int itemnumber);
int getItemCartlength(int itemnumber);
bool itemHasCodes(int itemnumber,QStringList test_codes);
unsigned getItemCartNumber(int itemnumber);
int getItemCartLength(int itemnumber);
int getItemStackid(int itemnumber);
QString getItemArtist(int itemnumber);
QString getItemSchedCodes(int itemnumber);