2016-06-07 Fred Gleason <fredg@paravelsystems.com>

* Refactored the 'RDSvc::import()' method in 'lib/rdsvc.cpp' to
	improve robustness and readability.
This commit is contained in:
Fred Gleason 2016-06-07 12:56:52 -04:00
parent 6a05fd90a5
commit 31cd72a7a4
2 changed files with 131 additions and 169 deletions

View File

@ -15200,3 +15200,6 @@
* Added code in 'lib/rdevent_line.cpp' and 'lib/rdsvc.cpp' to allow * Added code in 'lib/rdevent_line.cpp' and 'lib/rdsvc.cpp' to allow
embedded traffic breaks to be specified with start time and length embedded traffic breaks to be specified with start time and length
in the music schedule. in the music schedule.
2016-06-07 Fred Gleason <fredg@paravelsystems.com>
* Refactored the 'RDSvc::import()' method in 'lib/rdsvc.cpp' to
improve robustness and readability.

View File

@ -351,7 +351,6 @@ bool RDSvc::import(ImportSource src,const QDate &date,const QString &break_str,
QString src_str; QString src_str;
char buf[RD_MAX_IMPORT_LINE_LENGTH]; char buf[RD_MAX_IMPORT_LINE_LENGTH];
QString str_buf; QString str_buf;
char var_buf[RD_MAX_IMPORT_LINE_LENGTH];
int start_hour; int start_hour;
int start_minutes; int start_minutes;
int start_seconds; int start_seconds;
@ -361,9 +360,10 @@ bool RDSvc::import(ImportSource src,const QDate &date,const QString &break_str,
unsigned cartnum; unsigned cartnum;
QString cartname; QString cartname;
QString title; QString title;
char data_buf[RD_MAX_IMPORT_LINE_LENGTH]; QString data_buf;
char eventid_buf[RD_MAX_IMPORT_LINE_LENGTH]; QString eventid_buf;
char annctype_buf[RD_MAX_IMPORT_LINE_LENGTH]; // char annctype_buf[RD_MAX_IMPORT_LINE_LENGTH];
QString annctype_buf;
QString os_flag; QString os_flag;
int cartlen; int cartlen;
QString sql; QString sql;
@ -484,37 +484,26 @@ bool RDSvc::import(ImportSource src,const QDate &date,const QString &break_str,
} }
int cart_offset=q->value(0).toInt(); int cart_offset=q->value(0).toInt();
int cart_length=q->value(1).toInt(); int cart_length=q->value(1).toInt();
unsigned cart_size=cart_offset+cart_length;
int data_offset=q->value(2).toInt(); int data_offset=q->value(2).toInt();
int data_length=q->value(3).toInt(); int data_length=q->value(3).toInt();
unsigned data_size=data_offset+data_length;
int eventid_offset=q->value(4).toInt(); int eventid_offset=q->value(4).toInt();
int eventid_length=q->value(5).toInt(); int eventid_length=q->value(5).toInt();
unsigned eventid_size=eventid_offset+eventid_length;
int annctype_offset=q->value(6).toInt(); int annctype_offset=q->value(6).toInt();
int annctype_length=q->value(7).toInt(); int annctype_length=q->value(7).toInt();
unsigned annctype_size=annctype_offset+annctype_length;
int title_offset=q->value(8).toInt(); int title_offset=q->value(8).toInt();
int title_length=q->value(9).toInt(); int title_length=q->value(9).toInt();
unsigned title_size=title_offset+title_length;
int hours_offset=q->value(10).toInt(); int hours_offset=q->value(10).toInt();
int hours_length=q->value(11).toInt(); int hours_length=q->value(11).toInt();
unsigned hours_size=hours_offset+hours_length;
int minutes_offset=q->value(12).toInt(); int minutes_offset=q->value(12).toInt();
int minutes_length=q->value(13).toInt(); int minutes_length=q->value(13).toInt();
unsigned minutes_size=minutes_offset+minutes_length;
int seconds_offset=q->value(14).toInt(); int seconds_offset=q->value(14).toInt();
int seconds_length=q->value(15).toInt(); int seconds_length=q->value(15).toInt();
unsigned seconds_size=seconds_offset+seconds_length;
int hours_len_offset=q->value(16).toInt(); int hours_len_offset=q->value(16).toInt();
int hours_len_length=q->value(17).toInt(); int hours_len_length=q->value(17).toInt();
unsigned hours_len_size=hours_len_offset+hours_len_length;
int minutes_len_offset=q->value(18).toInt(); int minutes_len_offset=q->value(18).toInt();
int minutes_len_length=q->value(19).toInt(); int minutes_len_length=q->value(19).toInt();
unsigned minutes_len_size=minutes_len_offset+minutes_len_length;
int seconds_len_offset=q->value(20).toInt(); int seconds_len_offset=q->value(20).toInt();
int seconds_len_length=q->value(21).toInt(); int seconds_len_length=q->value(21).toInt();
unsigned seconds_len_size=seconds_len_offset+seconds_len_length;
delete q; delete q;
@ -554,6 +543,7 @@ bool RDSvc::import(ImportSource src,const QDate &date,const QString &break_str,
int line_id=0; int line_id=0;
bool insert_found=false; bool insert_found=false;
bool cart_ok=false; bool cart_ok=false;
bool start_time_ok=false;
bool line_used=false; bool line_used=false;
bool insert_break=false; bool insert_break=false;
bool insert_track=false; bool insert_track=false;
@ -565,167 +555,136 @@ bool RDSvc::import(ImportSource src,const QDate &date,const QString &break_str,
while(fgets(buf,RD_MAX_IMPORT_LINE_LENGTH,infile)!=NULL) { while(fgets(buf,RD_MAX_IMPORT_LINE_LENGTH,infile)!=NULL) {
line_used=false; line_used=false;
str_buf=buf; str_buf=QString(buf).stripWhiteSpace();
cartnum=0; // Get Cart Number
if(strlen(buf)>=cart_size) { //
for(int i=cart_offset;i<(cart_offset+cart_length);i++) { // Cart Number
var_buf[i-cart_offset]=buf[i]; //
} cartnum=0;
var_buf[cart_length]=0; cartname=str_buf.mid(cart_offset,cart_length).stripWhiteSpace();
cartname=QString(var_buf).stripWhiteSpace();
if(strlen(buf)>=hours_size) { // Get Start Hours //
start_hour=QString(buf).mid(hours_offset,hours_length).toInt(&ok); // Start Time
if(ok&&(strlen(buf)>=minutes_size)) { // Get Start Minutes //
start_minutes= start_time_ok=true;
QString(buf).mid(minutes_offset,minutes_length).toInt(&ok); start_hour=str_buf.mid(hours_offset,hours_length).toInt(&ok);
if(ok&&(strlen(buf)>=seconds_size)) { // Get Start Seconds if((!ok)||(start_hour<0)||(start_hour>23)) {
start_seconds= start_time_ok=false;
QString(buf).mid(seconds_offset,seconds_length).toInt(&ok); }
if(ok&&(strlen(buf)>=hours_len_size)) { // Get Length Hours start_minutes=str_buf.mid(minutes_offset,minutes_length).toInt(&ok);
hours_len_buf= if((!ok)||(start_minutes<0)||(start_minutes>59)) {
QString(buf).mid(hours_len_offset,hours_len_length); start_time_ok=false;
if(strlen(buf)>=minutes_len_size) { // Get Length Minutes }
minutes_len_buf= start_seconds=str_buf.mid(seconds_offset,seconds_length).toInt(&ok);
QString(buf).mid(minutes_len_offset,minutes_len_length); if((!ok)||(start_seconds<0)) {
if(strlen(buf)>=seconds_len_size) { // Get Length Seconds start_time_ok=false;
seconds_len_buf= }
QString(buf).mid(seconds_len_offset,seconds_len_length);
cartlen=3600000*hours_len_buf.toInt()+ //
60000*minutes_len_buf.toInt()+ // Length
1000*seconds_len_buf.toInt(); //
if(strlen(buf)>=data_size) { // Get Ext Data hours_len_buf=str_buf.mid(hours_len_offset,hours_len_length);
for(int i=data_offset;i<(data_offset+data_length);i++) { minutes_len_buf=str_buf.mid(minutes_len_offset,minutes_len_length);
data_buf[i-data_offset]=buf[i]; seconds_len_buf=str_buf.mid(seconds_len_offset,seconds_len_length);
} cartlen=3600000*hours_len_buf.toInt()+60000*minutes_len_buf.toInt()+
data_buf[data_length]=0; 1000*seconds_len_buf.toInt();
if(strlen(buf)>=eventid_size) { // Get Ext Event ID
for(int i=eventid_offset; //
i<(eventid_offset+eventid_length);i++) { // External Data
eventid_buf[i-eventid_offset]=buf[i]; //
} data_buf=str_buf.mid(data_offset,data_length);
eventid_buf[eventid_length]=0; eventid_buf=str_buf.mid(eventid_offset,eventid_length);
if(strlen(buf)>=annctype_size) { // Get Ext Annc Type annctype_buf=str_buf.mid(annctype_offset,annctype_length);
for(int i=annctype_offset;
i<(annctype_offset+annctype_length); //
i++) { // Title
annctype_buf[i-annctype_offset]=buf[i]; //
} title=str_buf.mid(title_offset,title_length).stripWhiteSpace();
annctype_buf[annctype_length]=0;
if(strlen(buf)>=title_size) { // Get Title //
title=QString(buf).mid(title_offset,title_length); // Process Line
cartnum=cartname.toUInt(&cart_ok); //
if(cart_ok|| cartnum=cartname.toUInt(&cart_ok);
((!label_cart.isEmpty())&& if(start_time_ok&&(cart_ok||
(cartname==label_cart))|| ((!label_cart.isEmpty())&&(cartname==label_cart))||
((!track_cart.isEmpty())&& ((!track_cart.isEmpty())&&(cartname==track_cart)))) {
(cartname==track_cart))) { sql=QString("insert into ")+
sql=QString("insert into ")+ "`"+dest_table+"` set "+
"`"+dest_table+"` set "+ QString().sprintf("ID=%d,",line_id++)+
QString().sprintf("ID=%d,",line_id++)+ QString().sprintf("START_HOUR=%d,",start_hour)+
QString().sprintf("START_HOUR=%d,",start_hour)+ QString().sprintf("START_SECS=%d,",
QString().sprintf("START_SECS=%d,", 60*start_minutes+start_seconds)+
60*start_minutes+start_seconds)+ QString().sprintf("CART_NUMBER=%u,",cartnum)+
QString().sprintf("CART_NUMBER=%u,",cartnum)+ "TITLE=\""+RDEscapeString(title)+"\","+
"TITLE=\""+RDEscapeString(title)+"\","+ QString().sprintf("LENGTH=%d,",cartlen)+
QString().sprintf("LENGTH=%d,",cartlen)+ "EXT_DATA=\""+data_buf+"\","+
"EXT_DATA=\""+data_buf+"\","+ "EXT_EVENT_ID=\""+eventid_buf+"\","+
"EXT_EVENT_ID=\""+eventid_buf+"\","+ "EXT_ANNC_TYPE=\""+annctype_buf+"\","+
"EXT_ANNC_TYPE=\""+annctype_buf+"\","+ "EXT_CART_NAME=\""+cartname+"\"";
"EXT_CART_NAME=\""+cartname+"\""; q=new RDSqlQuery(sql);
q=new RDSqlQuery(sql); delete q;
delete q; //
// // Insert Break
// Insert Break //
// if(insert_break) {
if(insert_break) { sql=QString("update ")+"`"+dest_table+"` set "+
sql=QString("update ")+"`"+dest_table+"` set "+ "INSERT_BREAK=\"Y\"";
"INSERT_BREAK=\"Y\""; if(break_first) {
if(break_first) { sql+=QString().sprintf(",INSERT_FIRST=%d",
sql+=QString().sprintf(",INSERT_FIRST=%d", RDEventLine::InsertBreak);
RDEventLine::InsertBreak);
}
if(link_time.isValid()&&(link_length>=0)) {
sql+=",LINK_START_TIME=\""+
link_time.toString("hh:mm:ss")+"\""+
QString().sprintf(",LINK_LENGTH=%d",
link_length);
}
sql+=QString().sprintf(" where ID=%d",line_id-1);
/*
if(break_first) {
sql=QString().
sprintf("update `%s` set INSERT_BREAK=\"Y\",\
INSERT_FIRST=%d where ID=%d",
(const char *)dest_table,
RDEventLine::InsertBreak,line_id-1);
}
else {
sql=QString().
sprintf("update `%s` set INSERT_BREAK=\"Y\" \
where ID=%d",
(const char *)dest_table,line_id-1);
}
*/
q=new RDSqlQuery(sql);
delete q;
}
//
// Insert Track
//
if(insert_track) {
if(track_first) {
sql=QString().
sprintf("update `%s` set INSERT_TRACK=\"Y\",\
TRACK_STRING=\"%s\",\
INSERT_FIRST=%d where ID=%d",
(const char *)dest_table,
(const char *)track_label,
RDEventLine::InsertTrack,line_id-1);
}
else {
sql=QString().
sprintf("update `%s` set INSERT_TRACK=\"Y\",\
TRACK_STRING=\"%s\" where ID=%d",
(const char *)dest_table,
(const char *)track_label,
line_id-1);
}
q=new RDSqlQuery(sql);
delete q;
}
insert_break=false;
break_first=false;
insert_track=false;
track_first=false;
insert_found=false;
line_used=true;
}
if(cartname==break_str) {
link_time=
QTime(start_hour,start_minutes,start_seconds);
link_length=cartlen;
}
else {
link_time=QTime();
link_length=-1;
}
}
}
}
}
}
}
}
}
} }
if(link_time.isValid()&&(link_length>=0)) {
sql+=",LINK_START_TIME=\""+
link_time.toString("hh:mm:ss")+"\""+
QString().sprintf(",LINK_LENGTH=%d",
link_length);
}
sql+=QString().sprintf(" where ID=%d",line_id-1);
q=new RDSqlQuery(sql);
delete q;
} }
//
// Insert Track
//
if(insert_track) {
if(track_first) {
sql=QString("update ")+
"`"+dest_table+"` set "+
"INSERT_TRACK=\"Y\","+
"TRACK_STRING=\""+RDEscapeString(track_label)+"\","+
QString().sprintf("INSERT_FIRST=%d ",RDEventLine::InsertTrack)+
QString().sprintf("where ID=%d",line_id-1);
}
else {
sql=QString("update ")+
"`"+dest_table+"` set "+
"INSERT_TRACK=\"Y\","+
"TRACK_STRING=\""+RDEscapeString(track_label)+"\" "+
QString().sprintf("where ID=%d",line_id-1);
}
q=new RDSqlQuery(sql);
delete q;
}
insert_break=false;
break_first=false;
insert_track=false;
track_first=false;
insert_found=false;
line_used=true;
}
if((cartname==break_str)&&start_time_ok) {
link_time=
QTime(start_hour,start_minutes,start_seconds);
link_length=cartlen;
}
else {
link_time=QTime();
link_length=-1;
} }
if(!line_used) { if(!line_used) {
// //
// Look for Break and Track Strings // Look for Break and Track Strings
// //
str_buf=str_buf.stripWhiteSpace();
if(!break_str.isEmpty()) { if(!break_str.isEmpty()) {
if(str_buf.contains(break_str)) { if(str_buf.contains(break_str)) {
insert_break=true; insert_break=true;