QString RDSvc::importFilename(ImportSource src,const QDate &date) const { QString src_str; switch(src) { case RDSvc::Traffic: src_str="TFC"; break; case RDSvc::Music: src_str="MUS"; break; } QString os_flag; #ifdef WIN32 os_flag="_WIN"; #endif QString sql=QString().sprintf("select %s%s_PATH from SERVICES \ where NAME=\"%s\"", (const char *)src_str, (const char *)os_flag, (const char *)svc_name); QString ret; RDSqlQuery *q=new RDSqlQuery(sql); if(q->first()) { ret=RDDateDecode(q->value(0).toString(),date); } delete q; return ret; }
void GenerateLog::trafficData() { RDSvc *svc=new RDSvc(gen_service_box->currentText(),this); QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date()); RDLog *log=new RDLog(logname); if((log->linkState(RDLog::SourceTraffic)==RDLog::LinkDone)) { QString str1=QString(tr("The log for")); QString str2=QString(tr("already contains merged traffic data. Remerging it\nwill remove this data. Remerge?")); if(QMessageBox::question(this,tr("Traffic Exists"), QString().sprintf("%s %s %s",(const char *)str1, (const char *)gen_date_edit->date().toString("MM/dd/yyyy"), (const char *)str2), QMessageBox::Yes,QMessageBox::No)!= QMessageBox::Yes) { delete log; delete svc; return; } svc->clearLogLinks(RDSvc::Traffic,gen_date_edit->date(),logname); } connect(svc,SIGNAL(generationProgress(int)), gen_progress_dialog,SLOT(setProgress(int))); QString report; svc->linkLog(RDSvc::Traffic,gen_date_edit->date(),logname,&report); delete log; delete svc; if(!report.isEmpty()) { RDTextFile(report); } UpdateControls(); }
void GenerateLog::musicData() { unsigned tracks=0; RDSvc *svc=new RDSvc(gen_service_box->currentText(),this); QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date()); RDLog *log=new RDLog(logname); if(((log->linkState(RDLog::SourceMusic)==RDLog::LinkDone)|| (log->linkState(RDLog::SourceTraffic)==RDLog::LinkDone))) { QString str1=QString(tr("The log for")); QString str2=QString(tr("already contains merged music and/or traffic data.\nRemerging it will remove this data. Remerge?")); if(QMessageBox::question(this,tr("Music Exists"), QString().sprintf("%s %s %s",(const char *)str1, (const char *)gen_date_edit->date().toString("MM/dd/yyyy"), (const char *)str2), QMessageBox::Yes,QMessageBox::No)!= QMessageBox::Yes) { delete log; delete svc; return; } if((tracks=log->completedTracks())>0) { str1=QString(tr("This will also delete the")); str2=QString(tr("voice tracks associated with this log.\nContinue?")); if(QMessageBox::warning(this,tr("Tracks Exist"), QString().sprintf("%s %u %s", (const char *)str1, tracks, (const char *)str2), QMessageBox::Yes,QMessageBox::No)!= QMessageBox::Yes) { delete log; delete svc; return; } } log->removeTracks(rda->station(),rda->user(),rda->config()); svc->clearLogLinks(RDSvc::Traffic,gen_date_edit->date(),logname); svc->clearLogLinks(RDSvc::Music,gen_date_edit->date(),logname); } connect(svc,SIGNAL(generationProgress(int)), gen_progress_dialog,SLOT(setProgress(int))); QString report; svc->linkLog(RDSvc::Music,gen_date_edit->date(),logname,&report); delete log; delete svc; if(!report.isEmpty()) { RDTextFile(report); } UpdateControls(); }
void GenerateLog::UpdateControls() { RDSvc *svc=new RDSvc(gen_service_box->currentText(),this); QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date()); RDLog *log=new RDLog(logname); if(log->exists()) { if(log->linkQuantity(RDLog::SourceMusic)>0) { gen_music_enabled=true; if(log->linkState(RDLog::SourceMusic)==RDLog::LinkDone) { gen_mus_merged_label->setPixmap(*gen_greenball_map); } else { gen_mus_merged_label->setPixmap(*gen_redball_map); } } else { gen_music_enabled=false; gen_mus_merged_label->setPixmap(*gen_whiteball_map); } if(log->linkQuantity(RDLog::SourceTraffic)>0) { gen_traffic_enabled=true; if(log->linkState(RDLog::SourceTraffic)==RDLog::LinkDone) { gen_tfc_merged_label->setPixmap(*gen_greenball_map); } else { gen_tfc_merged_label->setPixmap(*gen_redball_map); } } else { gen_traffic_enabled=false; gen_tfc_merged_label->setPixmap(*gen_whiteball_map); } } else { gen_music_button->setDisabled(true); gen_mus_merged_label->setPixmap(*gen_whiteball_map); gen_traffic_button->setDisabled(true); gen_tfc_merged_label->setPixmap(*gen_whiteball_map); gen_music_enabled=false; gen_traffic_enabled=false; } delete log; delete svc; fileScanData(); }
bool RDSvc::generateLog(const QDate &date,const QString &logname, const QString &nextname,QString *report) { QString sql; RDSqlQuery *q; RDClock clock; if((!date.isValid()||logname.isEmpty())) { return false; } emit generationProgress(0); // // Generate Log Structure // QDate purge_date; if(defaultLogShelflife()>=0) { purge_date=date.addDays(defaultLogShelflife()); } sql=QString().sprintf("select NAME from LOGS where NAME=\"%s\"", (const char *)RDEscapeString(logname)); q=new RDSqlQuery(sql); if(q->first()) { // Already Exists delete q; sql=QString().sprintf("update LOGS set SERVICE=\"%s\",\ DESCRIPTION=\"%s\",ORIGIN_USER=\"%s\",\ ORIGIN_DATETIME=now(),LINK_DATETIME=now(),\ MODIFIED_DATETIME=now(),START_DATE=null,\ END_DATE=null,NEXT_ID=0", (const char *)RDEscapeString(svc_name), (const char *)RDEscapeString(RDDateDecode(descriptionTemplate(),date)), "RDLogManager"); if(!purge_date.isValid()) { sql+=(",PURGE_DATE=\""+purge_date.toString("yyyy-MM-dd")+"\""); } sql+=(" where NAME=\""+RDEscapeString(logname)+"\""); q=new RDSqlQuery(sql); delete q; sql=QString("drop table `")+RDLog::tableName(logname)+"`"; q=new RDSqlQuery(sql); delete q; }
void GenerateLog::fileScanData() { RDSvc *svc=new RDSvc(gen_service_box->currentText(),this); QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date()); RDLog *log=new RDLog(logname); if(gen_music_enabled) { if(QFile::exists(svc-> importFilename(RDSvc::Music,gen_date_edit->date()))) { gen_music_button->setEnabled(true); gen_mus_avail_label->setPixmap(*gen_greenball_map); } else { gen_music_button->setDisabled(true); gen_mus_avail_label->setPixmap(*gen_redball_map); } } else { gen_mus_avail_label->setPixmap(*gen_whiteball_map); } if(gen_traffic_enabled) { if(QFile::exists(svc-> importFilename(RDSvc::Traffic,gen_date_edit->date()))) { gen_traffic_button-> setEnabled((!gen_music_enabled)|| (log->linkState(RDLog::SourceMusic)==RDLog::LinkDone)); gen_tfc_avail_label->setPixmap(*gen_greenball_map); } else { gen_traffic_button->setDisabled(true); gen_tfc_avail_label->setPixmap(*gen_redball_map); } } else { gen_tfc_avail_label->setPixmap(*gen_whiteball_map); } delete log; delete svc; }
bool RDReport::ExportMusicPlayout(const QDate &startdate,const QDate &enddate, const QString &mixtable) { QString sql; RDSqlQuery *q; FILE *f; QString cut; QString str; QString cart_fmt; QString cart_num; #ifdef WIN32 QString filename=RDDateDecode(exportPath(RDReport::Windows),startdate); #else QString filename=RDDateDecode(exportPath(RDReport::Linux),startdate); #endif QFile file(filename); if((f=fopen((const char *)filename,"w"))==NULL) { report_error_code=RDReport::ErrorCantOpen; return false; } if(useLeadingZeros()) { cart_fmt=QString().sprintf("%%0%uu",cartDigits()); } else { cart_fmt="%6u"; } sql=QString("select ")+ "`"+mixtable+"_SRT`.LENGTH,"+ // 00 "`"+mixtable+"_SRT`.CART_NUMBER,"+ // 01 "`"+mixtable+"%s_SRT`.EVENT_DATETIME,"+ // 02 "`"+mixtable+"_SRT`.EXT_EVENT_ID,"+ // 03 "`"+mixtable+"_SRT`.TITLE,"+ // 04 "`"+mixtable+"_SRT`.CUT_NUMBER,"+ // 05 "`"+mixtable+"_SRT`.ARTIST,"+ // 06 "`"+mixtable+"_SRT`.ALBUM,"+ // 07 "`"+mixtable+"_SRT`.LABEL "+ // 08 "from `"+mixtable+"_SRT` left join CART "+ "on `"+mixtable+"_SRT`.CART_NUMBER=CART.NUMBER "+ "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); // // Write File Header // if(startdate==enddate) { fprintf(f," Rivendell RDAirPlay Music Playout Report for %s\n", (const char *)startdate.toString("MM/dd/yyyy")); } else { fprintf(f," Rivendell RDAirPlay Music Playout Report for %s - %s\n", (const char *)startdate.toString("MM/dd/yyyy"), (const char *)enddate.toString("MM/dd/yyyy")); } str=QString().sprintf("%s -- %s\n",(const char *)name(), (const char *)description()); for(int i=0;i<(180-str.length())/2;i++) { fprintf(f," "); } fprintf(f,"%s\n",(const char *)str); fprintf(f,"--Time-- -Cart- Cut A-Len --Title----------------------- --Artist---------------------- --Album------------------ --Label-------------\n"); // // Write Data Rows // while(q->next()) { if(q->value(5).toInt()>0) { cut=QString().sprintf("%03d",q->value(5).toInt()); } else { if((RDAirPlayConf::TrafficAction)q->value(6).toInt()== RDAirPlayConf::TrafficMacro) { cut="rml"; } else { cut=" "; } } cart_num=QString().sprintf(cart_fmt,q->value(1).toUInt()); fprintf(f,"%8s %6s %3s %5s %-30s %-30s %-25s %-20s\n", (const char *)q->value(2).toDateTime().time().toString("hh:mm:ss"), (const char *)cart_num, (const char *)cut, (const char *)RDGetTimeLength(q->value(0).toInt(),true,false). right(5), (const char *)StringField(q->value(4).toString().left(30)), (const char *)StringField(q->value(6).toString().left(30)), (const char *)StringField(q->value(7).toString().left(25)), (const char *)StringField(q->value(8).toString().left(20))); } delete q; fclose(f); report_error_code=RDReport::ErrorOk; return true; }
bool RDReport::ExportRadioTraffic(const QDate &startdate,const QDate &enddate, const QString &mixtable) { QString sql; RDSqlQuery *q; FILE *f; QString air_fmt; #ifdef WIN32 QString filename=RDDateDecode(exportPath(RDReport::Windows),startdate); #else QString filename=RDDateDecode(exportPath(RDReport::Linux),startdate); #endif QFile file(filename); if((f=fopen((const char *)filename,"w"))==NULL) { report_error_code=RDReport::ErrorCantOpen; return false; } if(useLeadingZeros()) { air_fmt=QString().sprintf("%%0%uu ",cartDigits()); } else { air_fmt=QString().sprintf("%%%-uu ",cartDigits()); } sql=QString().sprintf("select `%s_SRT`.LENGTH,`%s_SRT`.CART_NUMBER,\ `%s_SRT`.EVENT_DATETIME,`%s_SRT`.EVENT_TYPE,\ `%s_SRT`.EXT_START_TIME,`%s_SRT`.EXT_LENGTH,\ `%s_SRT`.EXT_DATA,`%s_SRT`.EXT_EVENT_ID,\ `%s_SRT`.EXT_ANNC_TYPE,`%s_SRT`.TITLE,\ `%s_SRT`.EXT_CART_NAME from `%s_SRT` \ left join CART on\ `%s_SRT`.CART_NUMBER=CART.NUMBER\ order by EVENT_DATETIME", (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable); q=new RDSqlQuery(sql); // // Write Data Rows // while(q->next()) { fprintf(f,"%s ",(const char *)q->value(4).toTime().toString("hh:mm:ss")); fprintf(f,"%s ",(const char *)q->value(2).toDateTime(). toString("hh:mm:ss")); if(q->value(5).toInt()>0) { fprintf(f,"0%s ",(const char *)RDGetTimeLength(q->value(5).toInt(), true,false)); } else { fprintf(f,"00:00:00 "); } if(q->value(0).toInt()>0) { fprintf(f,"0%s ",(const char *)RDGetTimeLength(q->value(0).toInt(), true,false)); } else { fprintf(f,"00:00:00 "); } fprintf(f,air_fmt,q->value(1).toUInt()); fprintf(f,"%-34s ",(const char *)q->value(9).toString().left(34)); if(q->value(6).toString().isEmpty()) { fprintf(f," "); } else { fprintf(f,"%-32s",(const char *)q->value(6).toString().left(32). stripWhiteSpace()); } fprintf(f,"\r\n"); } delete q; fclose(f); report_error_code=RDReport::ErrorOk; return true; }
int RunLogOperation(int argc,char *argv[],const QString &svcname, int start_offset,bool protect_existing,bool gen_log, bool merge_mus,bool merge_tfc) { QString sql; RDSqlQuery *q; QString report; QString unused_report; QString svcname_table=svcname; svcname_table.replace(" ","_"); // // Some Basic Structures // #ifndef WIN32 rda->setUser(rda->station()->defaultName()); #endif // WIN32 RDSvc *svc=new RDSvc(svcname); if(!svc->exists()) { fprintf(stderr,"rdlogmanager: no such service\n"); return 256; } QDate start_date=QDate::currentDate().addDays(1+start_offset); QString logname=RDDateDecode(svc->nameTemplate(),start_date); RDLog *log=new RDLog(logname); // // Generate Log // if(gen_log) { if(protect_existing&&log->exists()) { fprintf(stderr,"log \"%s\" already exists\n", (const char *)log->name().utf8()); exit(256); } log->removeTracks(rda->station(),rda->user(),rda->config()); srand(QTime::currentTime().msec()); sql=RDCreateStackTableSql(svcname_table); q=new RDSqlQuery(sql); if(!q->isActive()) { fprintf(stderr,"SQL: %s\n",(const char *)sql); fprintf(stderr,"SQL Error: %s\n", (const char *)q->lastError().databaseText()); } delete q; if(!svc->generateLog(start_date, RDDateDecode(svc->nameTemplate(),start_date), RDDateDecode(svc->nameTemplate(),start_date.addDays(1)), &unused_report)) { fprintf(stderr,"rdlogmanager: unable to generate log\n"); return 256; } log->updateTracks(); // // Generate Exception Report // RDLogEvent *event= new RDLogEvent(QString().sprintf("%s_LOG",(const char *)logname)); event->load(); if((event->validate(&report,start_date)!=0)|| (!unused_report.isEmpty())) { printf("%s\n\n%s",(const char*)report,(const char*)unused_report); } delete event; } // // Merge Music // if(merge_mus) { if(!log->exists()) { fprintf(stderr,"rdlogmanager: log does not exist\n"); return 256; } if(protect_existing&& (log->linkState(RDLog::SourceMusic)==RDLog::LinkDone)) { fprintf(stderr,"rdlogmanager: music for log \"%s\" is already imported\n", (const char *)log->name().utf8()); return 256; } report=""; log->removeTracks(rda->station(),rda->user(),rda->config()); svc->clearLogLinks(RDSvc::Traffic,start_date,logname); svc->clearLogLinks(RDSvc::Music,start_date,logname); if(svc->linkLog(RDSvc::Music,start_date,logname,&report)) { printf("%s\n",(const char*)report); } else { fprintf(stderr, "rdlogmanager: unable to open music schedule file at \"%s\"\n", (const char *)svc->importFilename(RDSvc::Music,start_date)); exit(256); } } // // Merge Traffic // if(merge_tfc) { if(!log->exists()) { fprintf(stderr,"rdlogmanager: log does not exist\n"); return 256; } if(protect_existing&& (log->linkState(RDLog::SourceTraffic)==RDLog::LinkDone)) { fprintf(stderr, "rdlogmanager: traffic for log \"%s\" is already imported\n", (const char *)log->name().utf8()); return 256; } report=""; svc->clearLogLinks(RDSvc::Traffic,start_date,logname); if(svc->linkLog(RDSvc::Traffic,start_date,logname,&report)) { printf("%s\n",(const char*)report); } else { fprintf(stderr, "rdlogmanager: unable to open traffic schedule file at \"%s\"\n", (const char *)svc->importFilename(RDSvc::Traffic,start_date)); } } // // Clean Up // delete log; delete svc; return 0; }
bool RDSvc::import(ImportSource src,const QDate &date,const QString &break_str, const QString &track_str,const QString &dest_table) const { FILE *infile; QString src_str; char buf[RD_MAX_IMPORT_LINE_LENGTH]; QString str_buf; int start_hour; int start_minutes; int start_seconds; QString hours_len_buf; QString minutes_len_buf; QString seconds_len_buf; unsigned cartnum; QString cartname; QString title; QString data_buf; QString eventid_buf; QString annctype_buf; QString os_flag; int cartlen; QString sql; bool ok=false; // // Set Import Source // switch(src) { case RDSvc::Traffic: src_str="TFC"; break; case RDSvc::Music: src_str="MUS"; break; } // // Set OS Type // #ifdef WIN32 os_flag="_WIN"; #endif // // Load Parser Parameters // sql=QString().sprintf("select %s%s_PATH,\ %s_LABEL_CART,\ %s_TRACK_CART,\ %s%s_PREIMPORT_CMD \ from SERVICES where NAME=\"%s\"", (const char *)src_str, (const char *)os_flag, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)os_flag, (const char *)RDEscapeString(svc_name)); RDSqlQuery *q=new RDSqlQuery(sql); if(!q->first()) { delete q; return false; } QString infilename=q->value(0).toString(); QString label_cart=q->value(1).toString().stripWhiteSpace(); QString track_cart=q->value(2).toString().stripWhiteSpace(); QString preimport_cmd=q->value(3).toString(); delete q; // // Open Source File // if((infile=fopen(RDDateDecode(infilename,date),"r"))==NULL) { return false; } // // Run Preimport Command // if(!preimport_cmd.isEmpty()) { system(RDDateDecode(preimport_cmd,date)); } QString parser_table; QString parser_name; if(importTemplate(src).isEmpty()) { src_str+="_"; parser_table="SERVICES"; parser_name=svc_name; } else { src_str=""; parser_table="IMPORT_TEMPLATES"; parser_name=importTemplate(src); } sql=QString("select ")+ src_str+"CART_OFFSET,"+ // 00 src_str+"CART_LENGTH,"+ // 01 src_str+"DATA_OFFSET,"+ // 02 src_str+"DATA_LENGTH,"+ // 03 src_str+"EVENT_ID_OFFSET,"+ // 04 src_str+"EVENT_ID_LENGTH,"+ // 05 src_str+"ANNC_TYPE_OFFSET,"+ // 06 src_str+"ANNC_TYPE_LENGTH,"+ // 07 src_str+"TITLE_OFFSET,"+ // 08 src_str+"TITLE_LENGTH,"+ // 09 src_str+"HOURS_OFFSET,"+ // 10 src_str+"HOURS_LENGTH,"+ // 11 src_str+"MINUTES_OFFSET,"+ // 12 src_str+"MINUTES_LENGTH,"+ // 13 src_str+"SECONDS_OFFSET,"+ // 14 src_str+"SECONDS_LENGTH,"+ // 15 src_str+"LEN_HOURS_OFFSET,"+ // 16 src_str+"LEN_HOURS_LENGTH,"+ // 17 src_str+"LEN_MINUTES_OFFSET,"+ // 18 src_str+"LEN_MINUTES_LENGTH,"+ // 19 src_str+"LEN_SECONDS_OFFSET,"+ // 20 src_str+"LEN_SECONDS_LENGTH "+ // 21 "from "+parser_table+" where NAME=\""+RDEscapeString(parser_name)+"\""; q=new RDSqlQuery(sql); if(!q->first()) { delete q; return false; } int cart_offset=q->value(0).toInt(); int cart_length=q->value(1).toInt(); int data_offset=q->value(2).toInt(); int data_length=q->value(3).toInt(); int eventid_offset=q->value(4).toInt(); int eventid_length=q->value(5).toInt(); int annctype_offset=q->value(6).toInt(); int annctype_length=q->value(7).toInt(); int title_offset=q->value(8).toInt(); int title_length=q->value(9).toInt(); int hours_offset=q->value(10).toInt(); int hours_length=q->value(11).toInt(); int minutes_offset=q->value(12).toInt(); int minutes_length=q->value(13).toInt(); int seconds_offset=q->value(14).toInt(); int seconds_length=q->value(15).toInt(); int hours_len_offset=q->value(16).toInt(); int hours_len_length=q->value(17).toInt(); int minutes_len_offset=q->value(18).toInt(); int minutes_len_length=q->value(19).toInt(); int seconds_len_offset=q->value(20).toInt(); int seconds_len_length=q->value(21).toInt(); delete q; // // Setup Data Source and Destination // sql=QString().sprintf("drop table `%s`",(const char *)dest_table); QSqlQuery *qq; // Use QSqlQuery so we don't generate a qq=new QSqlQuery(sql); // spurious error message. delete qq; sql=QString("create table ")+ "`"+dest_table+"` ("+ "ID int primary key,"+ "START_HOUR int not null,"+ "START_SECS int not null,"+ "CART_NUMBER int unsigned,"+ "TITLE char(255),"+ "LENGTH int,"+ "INSERT_BREAK enum('N','Y') default 'N',"+ "INSERT_TRACK enum('N','Y') default 'N',"+ "INSERT_FIRST int unsigned default 0,"+ "TRACK_STRING char(255),"+ "EXT_DATA char(32),"+ "EXT_EVENT_ID char(32),"+ "EXT_ANNC_TYPE char(8),"+ "EXT_CART_NAME char(32),"+ "LINK_START_TIME time default NULL,"+ "LINK_LENGTH int default NULL,"+ "EVENT_USED enum('N','Y') default 'N',"+ "INDEX START_TIME_IDX (START_HOUR,START_SECS))"; q=new RDSqlQuery(sql); delete q; // // Parse and Save // int line_id=0; bool insert_found=false; bool cart_ok=false; bool start_time_ok=false; bool line_used=false; bool insert_break=false; bool insert_track=false; bool break_first=false; bool track_first=false; QString track_label; QTime link_time; int link_length=-1; while(fgets(buf,RD_MAX_IMPORT_LINE_LENGTH,infile)!=NULL) { line_used=false; str_buf=QString(buf); // // Cart Number // cartnum=0; cartname=str_buf.mid(cart_offset,cart_length).stripWhiteSpace(); // // Start Time // start_time_ok=true; start_hour=str_buf.mid(hours_offset,hours_length).toInt(&ok); if((!ok)||(start_hour<0)||(start_hour>23)) { start_time_ok=false; } start_minutes=str_buf.mid(minutes_offset,minutes_length).toInt(&ok); if((!ok)||(start_minutes<0)) { start_time_ok=false; } start_seconds=str_buf.mid(seconds_offset,seconds_length).toInt(&ok); if((!ok)||(start_seconds<0)||(start_seconds>59)) { start_time_ok=false; } // // Length // hours_len_buf=str_buf.mid(hours_len_offset,hours_len_length); minutes_len_buf=str_buf.mid(minutes_len_offset,minutes_len_length); seconds_len_buf=str_buf.mid(seconds_len_offset,seconds_len_length); cartlen=3600000*hours_len_buf.toInt()+60000*minutes_len_buf.toInt()+ 1000*seconds_len_buf.toInt(); // // External Data // data_buf=str_buf.mid(data_offset,data_length); eventid_buf=str_buf.mid(eventid_offset,eventid_length); annctype_buf=str_buf.mid(annctype_offset,annctype_length); // // Title // title=str_buf.mid(title_offset,title_length).stripWhiteSpace(); // // Process Line // cartnum=cartname.toUInt(&cart_ok); if(start_time_ok&&(cart_ok|| ((!label_cart.isEmpty())&&(cartname==label_cart))|| ((!track_cart.isEmpty())&&(cartname==track_cart)))) { sql=QString("insert into ")+ "`"+dest_table+"` set "+ QString().sprintf("ID=%d,",line_id++)+ QString().sprintf("START_HOUR=%d,",start_hour)+ QString().sprintf("START_SECS=%d,", 60*start_minutes+start_seconds)+ QString().sprintf("CART_NUMBER=%u,",cartnum)+ "TITLE=\""+RDEscapeString(title)+"\","+ QString().sprintf("LENGTH=%d,",cartlen)+ "EXT_DATA=\""+data_buf+"\","+ "EXT_EVENT_ID=\""+eventid_buf+"\","+ "EXT_ANNC_TYPE=\""+annctype_buf+"\","+ "EXT_CART_NAME=\""+cartname+"\""; q=new RDSqlQuery(sql); delete q; // // Insert Break // if(insert_break) { sql=QString("update ")+"`"+dest_table+"` set "+ "INSERT_BREAK=\"Y\""; if(break_first) { sql+=QString().sprintf(",INSERT_FIRST=%d", 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); 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) { // // Look for Break and Track Strings // if(!break_str.isEmpty()) { if(str_buf.contains(break_str)) { insert_break=true; if(!insert_found) { break_first=true; insert_found=true; } } } if(!track_str.isEmpty()) { if(str_buf.contains(track_str)) { insert_track=true; track_label=str_buf; if(!insert_found) { track_first=true; insert_found=true; } } } } } // // Cleanup // fclose(infile); return true; }
void TestImport::dateChangedData(const QDate &date) { test_filename_edit-> setText(RDDateDecode(test_svc->importPath(test_src,RDSvc::Linux),date)); }
void GenerateLog::createData() { QString report; QString unused_report; QString str1; QString str2; unsigned tracks=0; // // Generate Log // RDSvc *svc=new RDSvc(gen_service_box->currentText(),this); QString logname=RDDateDecode(svc->nameTemplate(),gen_date_edit->date()); RDLog *log=new RDLog(logname); if(log->exists()) { str1=QString(tr("The log for")); str2=QString(tr("already exists. Recreating it\nwill remove any merged Music or Traffic events.\n\nRecreate?")); if(QMessageBox::question(this,tr("Log Exists"), QString().sprintf("%s %s %s",(const char *)str1, (const char *)gen_date_edit->date().toString("MM/dd/yyyy"), (const char *)str2), QMessageBox::Yes,QMessageBox::No)!= QMessageBox::Yes) { delete log; delete svc; return; } if((tracks=log->completedTracks())>0) { str1=QString(tr("This will also delete the")); str2=QString(tr("voice tracks associated with this log.\nContinue?")); if(QMessageBox::warning(this,tr("Tracks Exist"), QString().sprintf("%s %u %s", (const char *)str1, tracks, (const char *)str2), QMessageBox::Yes,QMessageBox::No)!= QMessageBox::Yes) { delete log; delete svc; return; } } } log->removeTracks(rda->station(),rda->user(),rda->config()); // // Scheduler // QString sql; RDSqlQuery *q; srand(QTime::currentTime().msec()); sql=RDCreateStackTableSql(gen_service_box->currentText().replace(" ","_")); q=new RDSqlQuery(sql); if(!q->isActive()) { fprintf(stderr,"SQL: %s\n",(const char *)sql); fprintf(stderr,"SQL Error: %s\n", (const char *)q->lastError().databaseText()); delete q; } delete q; connect(svc,SIGNAL(generationProgress(int)), gen_progress_dialog,SLOT(setProgress(int))); svc->generateLog(gen_date_edit->date(), RDDateDecode(svc->nameTemplate(),gen_date_edit->date()), RDDateDecode(svc->nameTemplate(),gen_date_edit->date(). addDays(1)),&unused_report); log->updateTracks(); delete log; delete svc; // // Generate Exception Report // RDLogEvent *event= new RDLogEvent(QString().sprintf("%s_LOG",(const char *)logname)); event->load(); if((event->validate(&report,gen_date_edit->date())==0)&& unused_report.isEmpty()) { QMessageBox::information(this,tr("No Errors"),tr("No exceptions found.")); } else { RDTextFile(report+"\n\n"+unused_report); } delete event; UpdateControls(); }
bool RDSvc::import(ImportSource src,const QDate &date,const QString &break_str, const QString &track_str,const QString &dest_table) const { FILE *infile; QString src_str; char buf[RD_MAX_IMPORT_LINE_LENGTH]; QString str_buf; char var_buf[RD_MAX_IMPORT_LINE_LENGTH]; QString hours_buf; QString minutes_buf; QString seconds_buf; QString hours_len_buf; QString minutes_len_buf; QString seconds_len_buf; unsigned cartnum; QString cartname; QString title; char data_buf[RD_MAX_IMPORT_LINE_LENGTH]; char eventid_buf[RD_MAX_IMPORT_LINE_LENGTH]; char annctype_buf[RD_MAX_IMPORT_LINE_LENGTH]; QString os_flag; int cartlen; QString sql; // // Set Import Source // switch(src) { case RDSvc::Traffic: src_str="TFC"; break; case RDSvc::Music: src_str="MUS"; break; } // // Set OS Type // #ifdef WIN32 os_flag="_WIN"; #endif // // Load Parser Parameters // sql=QString().sprintf("select %s%s_PATH,\ %s_LABEL_CART,\ %s_TRACK_CART,\ %s%s_PREIMPORT_CMD \ from SERVICES where NAME=\"%s\"", (const char *)src_str, (const char *)os_flag, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)os_flag, (const char *)RDEscapeString(svc_name)); RDSqlQuery *q=new RDSqlQuery(sql); if(!q->first()) { delete q; return false; } QString infilename=q->value(0).toString(); QString label_cart=q->value(1).toString().stripWhiteSpace(); QString track_cart=q->value(2).toString().stripWhiteSpace(); QString preimport_cmd=q->value(3).toString(); delete q; // // Run Preimport Command // if(!preimport_cmd.isEmpty()) { system(RDDateDecode(preimport_cmd,date)); } QString parser_table; QString parser_name; if(importTemplate(src).isEmpty()) { src_str+="_"; parser_table="SERVICES"; parser_name=svc_name; } else { src_str=""; parser_table="IMPORT_TEMPLATES"; parser_name=importTemplate(src); } sql=QString().sprintf("select %sCART_OFFSET,%sCART_LENGTH,\ %sDATA_OFFSET,%sDATA_LENGTH, \ %sEVENT_ID_OFFSET,%sEVENT_ID_LENGTH, \ %sANNC_TYPE_OFFSET,%sANNC_TYPE_LENGTH, \ %sTITLE_OFFSET,%sTITLE_LENGTH,\ %sHOURS_OFFSET,%sHOURS_LENGTH,\ %sMINUTES_OFFSET,%sMINUTES_LENGTH,\ %sSECONDS_OFFSET,%sSECONDS_LENGTH,\ %sLEN_HOURS_OFFSET,%sLEN_HOURS_LENGTH,\ %sLEN_MINUTES_OFFSET,%sLEN_MINUTES_LENGTH,\ %sLEN_SECONDS_OFFSET,%sLEN_SECONDS_LENGTH \ from %s where NAME=\"%s\"", (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)src_str, (const char *)parser_table, (const char *)RDEscapeString(parser_name)); q=new RDSqlQuery(sql); if(!q->first()) { delete q; return false; } int cart_offset=q->value(0).toInt(); int cart_length=q->value(1).toInt(); unsigned cart_size=cart_offset+cart_length; int data_offset=q->value(2).toInt(); int data_length=q->value(3).toInt(); unsigned data_size=data_offset+data_length; int eventid_offset=q->value(4).toInt(); int eventid_length=q->value(5).toInt(); unsigned eventid_size=eventid_offset+eventid_length; int annctype_offset=q->value(6).toInt(); int annctype_length=q->value(7).toInt(); unsigned annctype_size=annctype_offset+annctype_length; int title_offset=q->value(8).toInt(); int title_length=q->value(9).toInt(); unsigned title_size=title_offset+title_length; int hours_offset=q->value(10).toInt(); int hours_length=q->value(11).toInt(); unsigned hours_size=hours_offset+hours_length; int minutes_offset=q->value(12).toInt(); int minutes_length=q->value(13).toInt(); unsigned minutes_size=minutes_offset+minutes_length; int seconds_offset=q->value(14).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_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_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_length=q->value(21).toInt(); unsigned seconds_len_size=seconds_len_offset+seconds_len_length; delete q; // // Setup Data Source and Destination // if((infile=fopen(RDDateDecode(infilename,date),"r"))==NULL) { return false; } sql=QString().sprintf("drop table `%s`",(const char *)dest_table); QSqlQuery *qq; // Use QSqlQuery so we don't generate a qq=new QSqlQuery(sql); // spurious error message. delete qq; sql=QString().sprintf("create table `%s` (\ ID int primary key,\ START_HOUR int not null,\ START_SECS int not null,\ CART_NUMBER int unsigned,\ TITLE char(255),\ LENGTH int,\ INSERT_BREAK enum('N','Y') default 'N',\ INSERT_TRACK enum('N','Y') default 'N',\ INSERT_FIRST int unsigned default 0,\ TRACK_STRING char(255),\ EXT_DATA char(32),\ EXT_EVENT_ID char(32),\ EXT_ANNC_TYPE char(8),\ EXT_CART_NAME char(32),\ EVENT_USED enum('N','Y') default 'N',\ INDEX START_TIME_IDX (START_HOUR,START_SECS))", (const char *)dest_table); q=new RDSqlQuery(sql); delete q; // // Parse and Save // int line_id=0; bool insert_found=false; bool cart_ok=false; bool line_used=false; bool insert_break=false; bool insert_track=false; bool break_first=false; bool track_first=false; QString track_label; while(fgets(buf,RD_MAX_IMPORT_LINE_LENGTH,infile)!=NULL) { line_used=false; str_buf=buf; cartnum=0; // Get Cart Number if(strlen(buf)>=cart_size) { for(int i=cart_offset;i<(cart_offset+cart_length);i++) { var_buf[i-cart_offset]=buf[i]; } var_buf[cart_length]=0; cartname=QString(var_buf).stripWhiteSpace(); if(strlen(buf)>=hours_size) { // Get Start Hours hours_buf=QString(buf).mid(hours_offset,hours_length); if(strlen(buf)>=minutes_size) { // Get Start Minutes minutes_buf=QString(buf).mid(minutes_offset,minutes_length); if(strlen(buf)>=seconds_size) { // Get Start Seconds seconds_buf=QString(buf).mid(seconds_offset,seconds_length); if(strlen(buf)>=hours_len_size) { // Get Length Hours hours_len_buf= QString(buf).mid(hours_len_offset,hours_len_length); if(strlen(buf)>=minutes_len_size) { // Get Length Minutes minutes_len_buf= QString(buf).mid(minutes_len_offset,minutes_len_length); if(strlen(buf)>=seconds_len_size) { // Get Length Seconds seconds_len_buf= QString(buf).mid(seconds_len_offset,seconds_len_length); cartlen=3600000*hours_len_buf.toInt()+ 60000*minutes_len_buf.toInt()+ 1000*seconds_len_buf.toInt(); if(strlen(buf)>=data_size) { // Get Ext Data for(int i=data_offset;i<(data_offset+data_length);i++) { data_buf[i-data_offset]=buf[i]; } data_buf[data_length]=0; if(strlen(buf)>=eventid_size) { // Get Ext Event ID for(int i=eventid_offset; i<(eventid_offset+eventid_length);i++) { eventid_buf[i-eventid_offset]=buf[i]; } eventid_buf[eventid_length]=0; if(strlen(buf)>=annctype_size) { // Get Ext Annc Type for(int i=annctype_offset; i<(annctype_offset+annctype_length); i++) { annctype_buf[i-annctype_offset]=buf[i]; } annctype_buf[annctype_length]=0; if(strlen(buf)>=title_size) { // Get Title title=QString(buf).mid(title_offset,title_length); cartnum=cartname.toUInt(&cart_ok); if(cart_ok|| ((!label_cart.isEmpty())&& (cartname==label_cart))|| ((!track_cart.isEmpty())&& (cartname==track_cart))) { sql=QString().sprintf("insert into `%s` \ set ID=%d,START_HOUR=%s,START_SECS=%d,\ CART_NUMBER=%u,TITLE=\"%s\",LENGTH=%d,\ EXT_DATA=\"%s\",EXT_EVENT_ID=\"%s\",\ EXT_ANNC_TYPE=\"%s\",EXT_CART_NAME=\"%s\"", (const char *)dest_table, line_id++, (const char *)hours_buf, 60*minutes_buf.toInt()+ seconds_buf.toInt(), cartnum, (const char *) RDEscapeString(title), cartlen, (const char *)data_buf, (const char *)eventid_buf, (const char *)annctype_buf, (const char *)cartname); q=new RDSqlQuery(sql); delete q; // // Insert Break // if(insert_break) { 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; } } } }