From b9f84fca3791f38694c47d5c36587ad9cc2995b6 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Thu, 8 Oct 2020 20:08:57 -0400 Subject: [PATCH] 2020-10-08 Fred Gleason * Added an 'IMPORTER_LINES.FILE_LINE' field to the database. * Added an 'IMPORTER_LINES.LINK_START_TIME' field to the database. * Added an 'IMPORTER_LINES.LINK_LENGTH' field to the database. * Incremented the database version to 341. * Reimplemented the 'RDSvc::linkLog()' and 'RDEventLine::linkLog()' methods to use the updated 'IMPORTER_LINES' table schema. * Added generation of an 'RDLogManager Error Report' when errors are detected when importing an external scheduler file in rdlogmanager(1). Signed-off-by: Fred Gleason --- ChangeLog | 10 ++ docs/tables/importer_lines.txt | 11 +- lib/dbversion.h | 2 +- lib/librd_cs.ts | 16 +++ lib/librd_de.ts | 16 +++ lib/librd_es.ts | 16 +++ lib/librd_fr.ts | 16 +++ lib/librd_nb.ts | 16 +++ lib/librd_nn.ts | 16 +++ lib/librd_pt_BR.ts | 16 +++ lib/rdevent_line.cpp | 198 +++++++++++------------------ lib/rdsvc.cpp | 183 ++++++++++++++++++++++++-- lib/rdsvc.h | 2 + rdadmin/rdadmin_cs.ts | 4 + rdadmin/rdadmin_de.ts | 4 + rdadmin/rdadmin_es.ts | 4 + rdadmin/rdadmin_fr.ts | 4 + rdadmin/rdadmin_nb.ts | 4 + rdadmin/rdadmin_nn.ts | 4 + rdadmin/rdadmin_pt_BR.ts | 4 + rdadmin/test_import.cpp | 6 +- rdlogmanager/generate_log.cpp | 25 ++-- rdlogmanager/rdlogmanager_cs.ts | 20 +-- rdlogmanager/rdlogmanager_de.ts | 20 +-- rdlogmanager/rdlogmanager_es.ts | 20 +-- rdlogmanager/rdlogmanager_fr.ts | 20 +-- rdlogmanager/rdlogmanager_nb.ts | 20 +-- rdlogmanager/rdlogmanager_nn.ts | 20 +-- rdlogmanager/rdlogmanager_pt_BR.ts | 20 +-- utils/rddbmgr/revertschema.cpp | 11 ++ utils/rddbmgr/schemamap.cpp | 2 +- utils/rddbmgr/updateschema.cpp | 24 ++++ 32 files changed, 547 insertions(+), 207 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8dd3af68..61c07ea9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20422,3 +20422,13 @@ * Incremented the database version to 340. * Added type icons to the 'Imported Events' list in the 'Test Import' dialog in rdadmin(1). +2020-10-08 Fred Gleason + * Added an 'IMPORTER_LINES.FILE_LINE' field to the database. + * Added an 'IMPORTER_LINES.LINK_START_TIME' field to the database. + * Added an 'IMPORTER_LINES.LINK_LENGTH' field to the database. + * Incremented the database version to 341. + * Reimplemented the 'RDSvc::linkLog()' and 'RDEventLine::linkLog()' + methods to use the updated 'IMPORTER_LINES' table schema. + * Added generation of an 'RDLogManager Error Report' when errors + are detected when importing an external scheduler file in + rdlogmanager(1). diff --git a/docs/tables/importer_lines.txt b/docs/tables/importer_lines.txt index bb8a737a..fcf507e5 100644 --- a/docs/tables/importer_lines.txt +++ b/docs/tables/importer_lines.txt @@ -7,16 +7,19 @@ FIELD NAME TYPE REMARKS ---------------------------------------------------------------- ID int(10) unsigned Primary key, auto increment STATION_NAME varchar(64) From STATIONS.NAME -PROCESS_ID int unsigned +PROCESS_ID int(10) unsigned +FILE_LINE int(10) unsigned LINE_ID int(10) unsigned TYPE int(10) unsigned RDLogLine::Type -START_HOUR int (11) signed +START_HOUR int(11) signed START_SECS int(11) signed -CART_NUMBER int (10) unsigned +CART_NUMBER int(10) unsigned TITLE varchar(191) -LENGTH int (11) signed +LENGTH int(11) signed EXT_DATA varchar(32) EXT_EVENT_ID varchar(32) EXT_ANNC_TYPE varchar(8) EXT_CART_NAME varchar(32) +LINK_START_TIME time +LINK_LENGTH int(11) EVENT_USED enum('N','Y') diff --git a/lib/dbversion.h b/lib/dbversion.h index 5828223d..e9633703 100644 --- a/lib/dbversion.h +++ b/lib/dbversion.h @@ -24,7 +24,7 @@ /* * Current Database Version */ -#define RD_VERSION_DATABASE 340 +#define RD_VERSION_DATABASE 341 #endif // DBVERSION_H diff --git a/lib/librd_cs.ts b/lib/librd_cs.ts index 23a3e2c7..ee491986 100644 --- a/lib/librd_cs.ts +++ b/lib/librd_cs.ts @@ -2958,5 +2958,21 @@ Zkuste to, prosím, znovu! Import failed + + Line + + + + invalid start time and/or length on inline traffic break. + + + + multiple inline traffic breaks not permitted within the same music event + + + + In event + + diff --git a/lib/librd_de.ts b/lib/librd_de.ts index 8a2200d5..e6538792 100644 --- a/lib/librd_de.ts +++ b/lib/librd_de.ts @@ -2953,5 +2953,21 @@ bitte erneut versuchen! Import failed + + Line + + + + invalid start time and/or length on inline traffic break. + + + + multiple inline traffic breaks not permitted within the same music event + + + + In event + + diff --git a/lib/librd_es.ts b/lib/librd_es.ts index 59cecc69..685c5785 100644 --- a/lib/librd_es.ts +++ b/lib/librd_es.ts @@ -2937,5 +2937,21 @@ please try again! Import failed + + Line + + + + invalid start time and/or length on inline traffic break. + + + + multiple inline traffic breaks not permitted within the same music event + + + + In event + + diff --git a/lib/librd_fr.ts b/lib/librd_fr.ts index 5c4004fa..8df3baaf 100644 --- a/lib/librd_fr.ts +++ b/lib/librd_fr.ts @@ -2323,5 +2323,21 @@ please try again! Import failed + + Line + + + + invalid start time and/or length on inline traffic break. + + + + multiple inline traffic breaks not permitted within the same music event + + + + In event + + diff --git a/lib/librd_nb.ts b/lib/librd_nb.ts index 2a1fc45f..406f76ed 100644 --- a/lib/librd_nb.ts +++ b/lib/librd_nb.ts @@ -2859,5 +2859,21 @@ prøv ein gong til! Import failed + + Line + + + + invalid start time and/or length on inline traffic break. + + + + multiple inline traffic breaks not permitted within the same music event + + + + In event + + diff --git a/lib/librd_nn.ts b/lib/librd_nn.ts index 2a1fc45f..406f76ed 100644 --- a/lib/librd_nn.ts +++ b/lib/librd_nn.ts @@ -2859,5 +2859,21 @@ prøv ein gong til! Import failed + + Line + + + + invalid start time and/or length on inline traffic break. + + + + multiple inline traffic breaks not permitted within the same music event + + + + In event + + diff --git a/lib/librd_pt_BR.ts b/lib/librd_pt_BR.ts index 3e892adf..a77f4081 100644 --- a/lib/librd_pt_BR.ts +++ b/lib/librd_pt_BR.ts @@ -2904,5 +2904,21 @@ por favor, tente novamente! Import failed + + Line + + + + invalid start time and/or length on inline traffic break. + + + + multiple inline traffic breaks not permitted within the same music event + + + + In event + + diff --git a/lib/rdevent_line.cpp b/lib/rdevent_line.cpp index bdca8059..0b582175 100644 --- a/lib/rdevent_line.cpp +++ b/lib/rdevent_line.cpp @@ -1003,13 +1003,10 @@ bool RDEventLine::linkLog(RDLogEvent *e,RDLog *log,const QString &svcname, "EXT_EVENT_ID,"+ // 04 "EXT_ANNC_TYPE,"+ // 05 "EXT_CART_NAME,"+ // 06 - "INSERT_BREAK,"+ // 07 - "INSERT_TRACK,"+ // 08 - "INSERT_FIRST,"+ // 09 - "TITLE,"+ // 10 - "TRACK_STRING,"+ // 11 - "LINK_START_TIME,"+ // 12 - "LINK_LENGTH "+ // 13 + "TITLE,"+ // 07 + "TYPE,"+ // 08 + "LINK_START_TIME,"+ // 09 + "LINK_LENGTH "+ // 10 "from IMPORTER_LINES where "+ "STATION_NAME=\""+RDEscapeString(event_station->name())+"\" && "+ QString().sprintf("PROCESS_ID=%u && ",getpid())+ @@ -1020,142 +1017,99 @@ bool RDEventLine::linkLog(RDLogEvent *e,RDLog *log,const QString &svcname, q=new RDSqlQuery(sql); while(q->next()) { int length=GetLength(q->value(0).toUInt(),q->value(2).toInt()); - if(q->value(9).toUInt()==RDEventLine::InsertBreak) { - if(q->value(7).toString()=="Y") { // Insert Break - if((!event_nested_event.isEmpty()&&(event_nested_event!=event_name))) { - e->insert(e->size(),1); - logline=e->logLine(e->size()-1); - logline->setId(e->nextId()); - logline->setStartTime(RDLogLine::Logged,time); - logline->setType(RDLogLine::TrafficLink); - logline->setSource(event_src); - logline->setTransType(trans_type); - logline->setEventLength(event_length); - logline->setLinkEventName(event_nested_event); - if(!q->value(13).isNull()) { - logline->setLinkStartTime(q->value(12).toTime()); - logline->setLinkLength(q->value(13).toInt()); - } - else { - logline->setLinkStartTime(link_logline->linkStartTime()); - logline->setLinkLength(link_logline->linkLength()); - } - logline->setLinkStartSlop(link_logline->linkStartSlop()); - logline->setLinkEndSlop(link_logline->linkEndSlop()); - logline->setLinkId(link_logline->linkId()); - logline->setLinkEmbedded(true); - } - } - if(q->value(8).toString()=="Y") { // Insert Track + + // + // Inline Traffic Break + // + if(q->value(8).toUInt()==RDLogLine::TrafficLink) { + if((!event_nested_event.isEmpty()&&(event_nested_event!=event_name))) { e->insert(e->size(),1); logline=e->logLine(e->size()-1); logline->setId(e->nextId()); logline->setStartTime(RDLogLine::Logged,time); - logline->setType(RDLogLine::Track); + logline->setType(RDLogLine::TrafficLink); logline->setSource(event_src); - logline->setTransType(RDLogLine::Segue); - logline->setMarkerComment(q->value(11).toString()); + logline->setTransType(trans_type); logline->setEventLength(event_length); - logline->setLinkEventName(event_name); - logline->setLinkStartTime(link_logline->linkStartTime()); - logline->setLinkLength(link_logline->linkLength()); + logline->setLinkEventName(event_nested_event); + logline->setLinkStartTime(q->value(9).toTime()); + logline->setLinkLength(q->value(10).toInt()); logline->setLinkStartSlop(link_logline->linkStartSlop()); logline->setLinkEndSlop(link_logline->linkEndSlop()); logline->setLinkId(link_logline->linkId()); logline->setLinkEmbedded(true); } } - else { - if(q->value(8).toString()=="Y") { // Insert Track - e->insert(e->size(),1); - logline=e->logLine(e->size()-1); - logline->setId(e->nextId()); - logline->setStartTime(RDLogLine::Logged,time); - logline->setType(RDLogLine::Track); - logline->setSource(event_src); - logline->setTransType(RDLogLine::Segue); - logline->setMarkerComment(q->value(11).toString()); - logline->setEventLength(event_length); - logline->setLinkEventName(event_name); - logline->setLinkStartTime(link_logline->linkStartTime()); - logline->setLinkLength(link_logline->linkLength()); - logline->setLinkStartSlop(link_logline->linkStartSlop()); - logline->setLinkEndSlop(link_logline->linkEndSlop()); - logline->setLinkId(link_logline->linkId()); - logline->setLinkEmbedded(true); - } - if(q->value(7).toString()=="Y") { // Insert Break - if((!event_nested_event.isEmpty()&&(event_nested_event!=event_name))) { - e->insert(e->size(),1); - logline=e->logLine(e->size()-1); - logline->setId(e->nextId()); - logline->setStartTime(RDLogLine::Logged,time); - logline->setType(RDLogLine::TrafficLink); - logline->setSource(event_src); - logline->setTransType(trans_type); - logline->setEventLength(event_length); - logline->setLinkEventName(event_nested_event); - if(!q->value(13).isNull()) { - logline->setLinkStartTime(q->value(12).toTime()); - logline->setLinkLength(q->value(13).toInt()); - } - else { - logline->setLinkStartTime(link_logline->linkStartTime()); - logline->setLinkLength(link_logline->linkLength()); - } - logline->setLinkStartSlop(link_logline->linkStartSlop()); - logline->setLinkEndSlop(link_logline->linkEndSlop()); - logline->setLinkId(link_logline->linkId()); - logline->setLinkEmbedded(true); - } - } - } // - // Insert imported event + // Voicetrack Marker // - e->insert(e->size(),1); - logline=e->logLine(e->size()-1); - logline->setId(e->nextId()); - logline->setSource(event_src); - logline-> - setStartTime(RDLogLine::Logged, - QTime(start_start_hour,0,0).addSecs(q->value(1).toInt())); - logline->setGraceTime(grace_time); - logline->setTimeType(time_type); - logline->setTransType(trans_type); - logline->setExtStartTime(QTime().addSecs(3600*start_start_hour+ - q->value(1).toInt())); - logline->setExtLength(q->value(2).toInt()); - logline->setExtData(q->value(3).toString().trimmed()); - logline->setExtEventId(q->value(4).toString().trimmed()); - logline->setExtAnncType(q->value(5).toString().trimmed()); - logline->setExtCartName(q->value(6).toString().trimmed()); - logline->setEventLength(event_length); - logline->setLinkEventName(event_name); - logline->setLinkStartTime(link_logline->linkStartTime()); - logline->setLinkLength(link_logline->linkLength()); - logline->setLinkStartSlop(link_logline->linkStartSlop()); - logline->setLinkEndSlop(link_logline->linkEndSlop()); - logline->setLinkId(link_logline->linkId()); - logline->setLinkEmbedded(link_logline->linkEmbedded()); - if((q->value(6).toString()==label_cart)&&(!label_cart.isEmpty())) { - logline->setType(RDLogLine::Marker); - logline->setMarkerComment(q->value(10).toString()); - logline->setCartNumber(0); + if(q->value(8).toUInt()==RDLogLine::Track) { + e->insert(e->size(),1); + logline=e->logLine(e->size()-1); + logline->setId(e->nextId()); + logline->setStartTime(RDLogLine::Logged,time); + logline->setType(RDLogLine::Track); + logline->setSource(event_src); + logline->setTransType(RDLogLine::Segue); + logline->setMarkerComment(q->value(7).toString()); + logline->setEventLength(event_length); + logline->setLinkEventName(event_name); + logline->setLinkStartTime(link_logline->linkStartTime()); + logline->setLinkLength(link_logline->linkLength()); + logline->setLinkStartSlop(link_logline->linkStartSlop()); + logline->setLinkEndSlop(link_logline->linkEndSlop()); + logline->setLinkId(link_logline->linkId()); + logline->setLinkEmbedded(true); } - else { - if((q->value(6).toString()==track_cart)&&(!track_cart.isEmpty())) { - logline->setType(RDLogLine::Track); - logline->setMarkerComment(q->value(10).toString()); + + // + // Cart + // + if(q->value(8).toUInt()==RDLogLine::Cart) { + e->insert(e->size(),1); + logline=e->logLine(e->size()-1); + logline->setId(e->nextId()); + logline->setSource(event_src); + logline-> + setStartTime(RDLogLine::Logged, + QTime(start_start_hour,0,0).addSecs(q->value(1).toInt())); + logline->setGraceTime(grace_time); + logline->setTimeType(time_type); + logline->setTransType(trans_type); + logline->setExtStartTime(QTime().addSecs(3600*start_start_hour+ + q->value(1).toInt())); + logline->setExtLength(q->value(2).toInt()); + logline->setExtData(q->value(3).toString().trimmed()); + logline->setExtEventId(q->value(4).toString().trimmed()); + logline->setExtAnncType(q->value(5).toString().trimmed()); + logline->setExtCartName(q->value(6).toString().trimmed()); + logline->setEventLength(event_length); + logline->setLinkEventName(event_name); + logline->setLinkStartTime(link_logline->linkStartTime()); + logline->setLinkLength(link_logline->linkLength()); + logline->setLinkStartSlop(link_logline->linkStartSlop()); + logline->setLinkEndSlop(link_logline->linkEndSlop()); + logline->setLinkId(link_logline->linkId()); + logline->setLinkEmbedded(link_logline->linkEmbedded()); + if((q->value(6).toString()==label_cart)&&(!label_cart.isEmpty())) { + logline->setType(RDLogLine::Marker); + logline->setMarkerComment(q->value(7).toString()); logline->setCartNumber(0); } else { - logline->setType(RDLogLine::Cart); - logline->setCartNumber(q->value(0).toUInt()); + if((q->value(6).toString()==track_cart)&&(!track_cart.isEmpty())) { + logline->setType(RDLogLine::Track); + logline->setMarkerComment(q->value(7).toString()); + logline->setCartNumber(0); + } + else { + logline->setType(RDLogLine::Cart); + logline->setCartNumber(q->value(0).toUInt()); + } } + time=time.addMSecs(length); } - time=time.addMSecs(length); // // Clear Leading Event Values diff --git a/lib/rdsvc.cpp b/lib/rdsvc.cpp index 571a701b..9f9f5944 100644 --- a/lib/rdsvc.cpp +++ b/lib/rdsvc.cpp @@ -569,6 +569,7 @@ bool RDSvc::import(ImportSource src,const QDate &date,const QString &break_str, QString track_label; QTime link_time; + int file_line=0; while(fgets(buf,RD_MAX_IMPORT_LINE_LENGTH,infile)!=NULL) { str_buf=QString::fromUtf8(buf); @@ -598,11 +599,26 @@ bool RDSvc::import(ImportSource src,const QDate &date,const QString &break_str, // // 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(); + cartlen=-1; + int len=0; + bool ok1=true; + bool ok2=true; + bool ok3=true; + if(hours_len_length>0) { + QString buf=str_buf.mid(hours_len_offset,hours_len_length); + len+=3600000*buf.toUInt(&ok1); + } + if(minutes_len_length>0) { + QString buf=str_buf.mid(minutes_len_offset,minutes_len_length); + len+=60000*buf.toInt(&ok2); + } + if(seconds_len_length>0) { + QString buf=str_buf.mid(seconds_len_offset,seconds_len_length); + len+=1000*buf.toUInt(&ok3); + } + if(ok1&&ok2&&ok3) { + cartlen=len; + } // // External Data @@ -627,13 +643,14 @@ bool RDSvc::import(ImportSource src,const QDate &date,const QString &break_str, sql=QString("insert into IMPORTER_LINES set ")+ "STATION_NAME=\""+RDEscapeString(svc_station->name())+"\","+ QString().sprintf("PROCESS_ID=%d,",getpid())+ + QString().sprintf("FILE_LINE=%u,",file_line)+ QString().sprintf("LINE_ID=%d,",line_id); if(start_time_ok) { sql+=QString().sprintf("START_HOUR=%d,",start_hour)+ QString().sprintf("START_SECS=%d,", 60*start_minutes+start_seconds); } - if(cartlen>0) { + if(cartlen>=0) { sql+=QString().sprintf("LENGTH=%d,",cartlen); } @@ -650,6 +667,7 @@ bool RDSvc::import(ImportSource src,const QDate &date,const QString &break_str, "TITLE=\""+RDEscapeString(title)+"\""; RDSqlQuery::apply(sql); line_id++; + file_line++; continue; } @@ -661,6 +679,7 @@ bool RDSvc::import(ImportSource src,const QDate &date,const QString &break_str, sql+=QString().sprintf("TYPE=%u",RDLogLine::TrafficLink); RDSqlQuery::apply(sql); line_id++; + file_line++; continue; } } @@ -673,8 +692,10 @@ bool RDSvc::import(ImportSource src,const QDate &date,const QString &break_str, "TITLE=\""+RDEscapeString(str_buf.simplified().trimmed())+"\""; RDSqlQuery::apply(sql); line_id++; + file_line++; continue; } + file_line++; } // @@ -800,6 +821,10 @@ bool RDSvc::linkLog(RDSvc::ImportSource src,const QDate &date, QString sql; RDSqlQuery *q; QString autofill_errors; + QTime prev_start_time; + RDLogEvent *src_event=NULL; + RDLogEvent *dest_event=NULL; + RDLogLine *logline=NULL; RDLogLock *log_lock=new RDLogLock(logname,user,svc_station,this); if(!TryLock(log_lock,err_msg)) { @@ -847,13 +872,21 @@ bool RDSvc::linkLog(RDSvc::ImportSource src,const QDate &date, return false; } + // + // Resolve embedded link parameters + // + if(src==RDSvc::Music) { + if(!ResolveInlineTrafficLinks(logname,err_msg)) { + return false; + } + } + // // Iterate Through the Log // - RDLogEvent *src_event=new RDLogEvent(logname); - RDLogEvent *dest_event=new RDLogEvent(logname); + src_event=new RDLogEvent(logname); + dest_event=new RDLogEvent(logname); src_event->load(); - RDLogLine *logline=NULL; for(int i=0;isize();i++) { logline=src_event->logLine(i); if(logline->type()==src_type) { @@ -904,7 +937,8 @@ bool RDSvc::linkLog(RDSvc::ImportSource src,const QDate &date, "IMPORTER_LINES.STATION_NAME=\""+ RDEscapeString(svc_station->name())+"\" && "+ QString().sprintf("IMPORTER_LINES.PROCESS_ID=%u && ",getpid())+ - "IMPORTER_LINES.EVENT_USED=\"N\""; + "IMPORTER_LINES.EVENT_USED=\"N\" "+ + "order by LINE_ID"; q=new RDSqlQuery(sql); while(q->next()) { event=true; @@ -945,7 +979,7 @@ bool RDSvc::linkLog(RDSvc::ImportSource src,const QDate &date, sql=QString("delete from IMPORTER_LINES where ")+ "STATION_NAME=\""+RDEscapeString(svc_station->name())+"\" && "+ QString().sprintf("PROCESS_ID=%u",getpid()); - // printf("Importer Table Cleanup SQL: %s\n",(const char *)sql); + // printf("Importer Table Cleanup SQL: %s\n",(const char *)sql); RDSqlQuery::apply(sql); delete log_lock; @@ -1582,3 +1616,130 @@ bool RDSvc::CheckId(std::vector *v,int value) v->push_back(value); return true; } + + +QString RDSvc::MakeErrorLine(int indent,unsigned lineno,const QString &msg) + const +{ + QString margin; + + for(int i=0;iload(); + ok=true; + for(int i=0;isize();i++) { + logline=evt->logLine(i); + if(logline->type()==RDLogLine::MusicLink) { + start=logline->linkStartTime(); + end=logline->linkStartTime().addSecs(logline->linkLength()); + sql=QString("select ")+ + "ID,"+ // 00 + "FILE_LINE "+ // 01 + "from IMPORTER_LINES where "+ + "IMPORTER_LINES.STATION_NAME=\""+ + RDEscapeString(svc_station->name())+"\" && "+ + QString().sprintf("IMPORTER_LINES.PROCESS_ID=%u && ",getpid())+ + QString().sprintf("TYPE=%u && ",RDLogLine::TrafficLink)+ + QString().sprintf("START_HOUR=%d && ",start.hour())+ + QString().sprintf("START_SECS>=%d && ", + 60*start.minute()+start.second())+ + QString().sprintf("START_SECS<%d",60*start.minute()+start.second()+logline->linkLength()/1000); + q=new RDSqlQuery(sql); + if(q->size()>1) { + *err_msg+=tr("In event")+" \""+logline->linkEventName()+"\"@"+ + logline->startTime(RDLogLine::Logged).toString("hh:mm:ss")+":\n"; + while(q->next()) { + *err_msg+=MakeErrorLine(4,q->value(1).toUInt(), + tr("multiple inline traffic breaks not permitted within the same music event")); + } + *err_msg+="\n"; + ok=false; + } + if(q->first()) { + sql=QString("update IMPORTER_LINES set ")+ + "LINK_START_TIME=\""+ + logline->linkStartTime().toString("hh:mm:ss")+"\","+ + QString().sprintf("LINK_LENGTH=%d where ",logline->linkLength())+ + QString().sprintf("ID=%u",q->value(0).toUInt()); + RDSqlQuery::apply(sql); + } + delete q; + } + } + delete evt; + evt=NULL; + + if(!ok) { + return false; + } + break; + + case RDSvc::SchedFile: + // + // Verify that all inline traffic events have explicit start times + // and length + // + sql=QString("select ")+ + "FILE_LINE "+ // 00 + "from IMPORTER_LINES where "+ + "IMPORTER_LINES.STATION_NAME=\""+ + RDEscapeString(svc_station->name())+"\" && "+ + QString().sprintf("IMPORTER_LINES.PROCESS_ID=%u && ",getpid())+ + QString().sprintf("TYPE=%u && ",RDLogLine::TrafficLink)+ + "(START_HOUR is null || START_SECS is null || LENGTH is null)"; + ok=true; + q=new RDSqlQuery(sql); + while(q->next()) { + *err_msg=MakeErrorLine(0,q->value(0).toUInt(), + tr("invalid start time and/or length on inline traffic break.")); + ok=false; + } + delete q; + if(!ok) { + return false; + } + + // + // Resolve link parameters + // + sql=QString("select ")+ + "ID,"+ // 00 + "START_HOUR,"+ // 01 + "START_SECS,"+ // 02 + "LENGTH "+ // 03 + "from IMPORTER_LINES where "+ + QString().sprintf("TYPE=%u",RDLogLine::TrafficLink); + q=new RDSqlQuery(sql); + while(q->next()) { + sql=QString("update IMPORTER_LINES set ")+ + "LINK_START_TIME=\""+QTime(q->value(1).toInt(),0,0). + addSecs(q->value(2).toInt()).toString("hh:mm:ss")+"\","+ + QString().sprintf("LINK_LENGTH=%d where ",q->value(3).toInt())+ + QString().sprintf("ID=%u",q->value(0).toUInt()); + RDSqlQuery::apply(sql); + } + delete q; + break; + } + + return true; +} diff --git a/lib/rdsvc.h b/lib/rdsvc.h index de69487f..89aa04f9 100644 --- a/lib/rdsvc.h +++ b/lib/rdsvc.h @@ -120,6 +120,8 @@ class RDSvc : public QObject void GetParserStrings(ImportSource src,QString *break_str,QString *track_str, QString *label_cart,QString *track_cart); bool CheckId(std::vector *v,int value); + QString MakeErrorLine(int indent,unsigned lineno,const QString &msg) const; + bool ResolveInlineTrafficLinks(const QString &logname,QString *err_msg) const; QString svc_name; RDStation *svc_station; RDConfig *svc_config; diff --git a/rdadmin/rdadmin_cs.ts b/rdadmin/rdadmin_cs.ts index b8618a78..e8daa329 100644 --- a/rdadmin/rdadmin_cs.ts +++ b/rdadmin/rdadmin_cs.ts @@ -6681,6 +6681,10 @@ Prověřte, prosím, svá nastavení a zkuste to znovu. [voice track] + + Line + + ViewAdapters diff --git a/rdadmin/rdadmin_de.ts b/rdadmin/rdadmin_de.ts index 300c865c..bd6b8053 100644 --- a/rdadmin/rdadmin_de.ts +++ b/rdadmin/rdadmin_de.ts @@ -6307,6 +6307,10 @@ Bitte überprüfen Sie ihre Einstellungen und versuchen sie es erneut.[voice track] + + Line + + ViewAdapters diff --git a/rdadmin/rdadmin_es.ts b/rdadmin/rdadmin_es.ts index 17e5d045..c527333f 100644 --- a/rdadmin/rdadmin_es.ts +++ b/rdadmin/rdadmin_es.ts @@ -6648,6 +6648,10 @@ Revise los parámetros e intente de nuevo. [voice track] + + Line + + ViewAdapters diff --git a/rdadmin/rdadmin_fr.ts b/rdadmin/rdadmin_fr.ts index e7cf3dd9..33df7f09 100644 --- a/rdadmin/rdadmin_fr.ts +++ b/rdadmin/rdadmin_fr.ts @@ -5127,6 +5127,10 @@ please check your settings and try again. [voice track] + + Line + + ViewAdapters diff --git a/rdadmin/rdadmin_nb.ts b/rdadmin/rdadmin_nb.ts index 43695413..005e84cf 100644 --- a/rdadmin/rdadmin_nb.ts +++ b/rdadmin/rdadmin_nb.ts @@ -6153,6 +6153,10 @@ Sjekk oppsettet ditt og prøv att. [voice track] + + Line + + ViewAdapters diff --git a/rdadmin/rdadmin_nn.ts b/rdadmin/rdadmin_nn.ts index 43695413..005e84cf 100644 --- a/rdadmin/rdadmin_nn.ts +++ b/rdadmin/rdadmin_nn.ts @@ -6153,6 +6153,10 @@ Sjekk oppsettet ditt og prøv att. [voice track] + + Line + + ViewAdapters diff --git a/rdadmin/rdadmin_pt_BR.ts b/rdadmin/rdadmin_pt_BR.ts index cb588369..8bf8a63b 100644 --- a/rdadmin/rdadmin_pt_BR.ts +++ b/rdadmin/rdadmin_pt_BR.ts @@ -6275,6 +6275,10 @@ por favor, cheque suas configurações e tente novamente [voice track] + + Line + + ViewAdapters diff --git a/rdadmin/test_import.cpp b/rdadmin/test_import.cpp index 6ccf5ba4..bfc35646 100644 --- a/rdadmin/test_import.cpp +++ b/rdadmin/test_import.cpp @@ -134,6 +134,8 @@ TestImport::TestImport(RDSvc *svc,RDSvc::ImportSource src,QWidget *parent) test_events_list->setColumnAlignment(6,Qt::AlignCenter); test_events_list->addColumn(tr("Annc Type")); test_events_list->setColumnAlignment(7,Qt::AlignCenter); + test_events_list->addColumn(tr("Line")); + test_events_list->setColumnAlignment(8,Qt::AlignRight); test_events_list->setColumnSortType(0,RDListView::LineSort); test_events_label=new QLabel(test_events_list,tr("Imported Events"),this); test_events_label->setGeometry(15,160,sizeHint().width()-30,18); @@ -204,7 +206,8 @@ void TestImport::importData() "EXT_EVENT_ID,"+ // 05 "EXT_ANNC_TYPE,"+ // 06 "TITLE,"+ // 07 - "TYPE "+ // 08 + "TYPE,"+ // 08 + "FILE_LINE "+ // 09 "from IMPORTER_LINES where "+ "STATION_NAME=\""+RDEscapeString(rda->station()->name())+"\" && "+ QString().sprintf("PROCESS_ID=%u ",getpid())+ @@ -223,6 +226,7 @@ void TestImport::importData() item->setText(5,q->value(4).toString().trimmed()); item->setText(6,q->value(5).toString().trimmed()); item->setText(7,q->value(6).toString().trimmed()); + item->setText(8,QString().sprintf("%u",1+q->value(9).toUInt())); switch((RDLogLine::Type)q->value(8).toUInt()) { case RDLogLine::Cart: item->setPixmap(0,*test_playout_map); diff --git a/rdlogmanager/generate_log.cpp b/rdlogmanager/generate_log.cpp index 26a977d1..9b3a1c7c 100644 --- a/rdlogmanager/generate_log.cpp +++ b/rdlogmanager/generate_log.cpp @@ -2,7 +2,7 @@ // // Generate a Rivendell Log // -// (C) Copyright 2002-2019 Fred Gleason +// (C) Copyright 2002-2020 Fred Gleason // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as @@ -427,14 +427,15 @@ void GenerateLog::musicData() connect(svc,SIGNAL(generationProgress(int)), gen_progress_dialog,SLOT(setValue(int))); QString report; - if(!svc->linkLog(RDSvc::Music,gen_date_edit->date(),logname,&report,rda->user(), - &err_msg)) { - - QMessageBox::warning(this,"RDLogManager - "+tr("Error"), - tr("Unable to link music log")+": "+err_msg); - delete log; - delete svc; - return; + if(!svc->linkLog(RDSvc::Music,gen_date_edit->date(),logname,&report, + rda->user(),&err_msg)) { + gen_progress_dialog->setValue(gen_progress_dialog->maximum()); + RDTextFile(tr("RDLogManager Error Report")+"\n\n"+ + tr("Music schedule import failed!")+"\n\n"+err_msg); + delete log; + delete svc; + UpdateControls(); + return; } SendNotification(RDNotification::ModifyAction,log->name()); delete log; @@ -489,10 +490,12 @@ void GenerateLog::trafficData() QString report; if(!svc->linkLog(RDSvc::Traffic,gen_date_edit->date(),logname,&report,rda->user(), &err_msg)) { - QMessageBox::warning(this,"RDLogManager - "+tr("Error"), - tr("Unable to link traffic log")+": "+err_msg); + gen_progress_dialog->setValue(gen_progress_dialog->maximum()); + RDTextFile(tr("RDLogManager Error Report")+"\n\n"+ + tr("Traffic schedule import failed!")+"\n\n"+err_msg); delete log; delete svc; + UpdateControls(); return; } SendNotification(RDNotification::ModifyAction,log->name()); diff --git a/rdlogmanager/rdlogmanager_cs.ts b/rdlogmanager/rdlogmanager_cs.ts index f2a5b68f..e629527f 100644 --- a/rdlogmanager/rdlogmanager_cs.ts +++ b/rdlogmanager/rdlogmanager_cs.ts @@ -1012,14 +1012,6 @@ Opětovné sloučení tato data smaže. Sloučit znovu? Unable to clear music links - - Unable to link music log - - - - Unable to link traffic log - - Generate Log @@ -1064,6 +1056,18 @@ Opětovné sloučení tato data smaže. Sloučit znovu? No broken rules or validation exceptions found. + + RDLogManager Error Report + + + + Music schedule import failed! + + + + Traffic schedule import failed! + + ImportListView diff --git a/rdlogmanager/rdlogmanager_de.ts b/rdlogmanager/rdlogmanager_de.ts index c65ecffc..83127a0f 100644 --- a/rdlogmanager/rdlogmanager_de.ts +++ b/rdlogmanager/rdlogmanager_de.ts @@ -1012,14 +1012,6 @@ Einbinden wird diese entfernen. Fortfahren? Unable to clear music links - - Unable to link music log - - - - Unable to link traffic log - - Generate Log @@ -1064,6 +1056,18 @@ Einbinden wird diese entfernen. Fortfahren? No broken rules or validation exceptions found. + + RDLogManager Error Report + + + + Music schedule import failed! + + + + Traffic schedule import failed! + + ImportListView diff --git a/rdlogmanager/rdlogmanager_es.ts b/rdlogmanager/rdlogmanager_es.ts index 10d6692c..de5aecd9 100644 --- a/rdlogmanager/rdlogmanager_es.ts +++ b/rdlogmanager/rdlogmanager_es.ts @@ -1014,14 +1014,6 @@ removerá estos datos. ¿Remezclar? Unable to clear music links - - Unable to link music log - - - - Unable to link traffic log - - Generate Log @@ -1066,6 +1058,18 @@ removerá estos datos. ¿Remezclar? No broken rules or validation exceptions found. + + RDLogManager Error Report + + + + Music schedule import failed! + + + + Traffic schedule import failed! + + ImportListView diff --git a/rdlogmanager/rdlogmanager_fr.ts b/rdlogmanager/rdlogmanager_fr.ts index 3d83b511..e7ff2ed5 100644 --- a/rdlogmanager/rdlogmanager_fr.ts +++ b/rdlogmanager/rdlogmanager_fr.ts @@ -820,14 +820,6 @@ Do you want to save? Unable to clear music links - - Unable to link music log - - - - Unable to link traffic log - - Generate Log @@ -876,6 +868,18 @@ Do you want to save? No broken rules or validation exceptions found. + + RDLogManager Error Report + + + + Music schedule import failed! + + + + Traffic schedule import failed! + + ImportListView diff --git a/rdlogmanager/rdlogmanager_nb.ts b/rdlogmanager/rdlogmanager_nb.ts index 2c26e3f3..1b71148d 100644 --- a/rdlogmanager/rdlogmanager_nb.ts +++ b/rdlogmanager/rdlogmanager_nb.ts @@ -1013,14 +1013,6 @@ Flettar du på nytt, vil du fjerna desse dataa. Flett på nytt? Unable to clear music links - - Unable to link music log - - - - Unable to link traffic log - - already exists. Recreating it @@ -1061,6 +1053,18 @@ Flettar du på nytt, vil du fjerna desse dataa. Flett på nytt? No broken rules or validation exceptions found. + + RDLogManager Error Report + + + + Music schedule import failed! + + + + Traffic schedule import failed! + + ImportListView diff --git a/rdlogmanager/rdlogmanager_nn.ts b/rdlogmanager/rdlogmanager_nn.ts index 2c26e3f3..1b71148d 100644 --- a/rdlogmanager/rdlogmanager_nn.ts +++ b/rdlogmanager/rdlogmanager_nn.ts @@ -1013,14 +1013,6 @@ Flettar du på nytt, vil du fjerna desse dataa. Flett på nytt? Unable to clear music links - - Unable to link music log - - - - Unable to link traffic log - - already exists. Recreating it @@ -1061,6 +1053,18 @@ Flettar du på nytt, vil du fjerna desse dataa. Flett på nytt? No broken rules or validation exceptions found. + + RDLogManager Error Report + + + + Music schedule import failed! + + + + Traffic schedule import failed! + + ImportListView diff --git a/rdlogmanager/rdlogmanager_pt_BR.ts b/rdlogmanager/rdlogmanager_pt_BR.ts index cc8e0da4..8f3c32f4 100644 --- a/rdlogmanager/rdlogmanager_pt_BR.ts +++ b/rdlogmanager/rdlogmanager_pt_BR.ts @@ -1014,14 +1014,6 @@ Re-agregar removerá estes dados. Re-agregar? Unable to clear music links - - Unable to link music log - - - - Unable to link traffic log - - Generate Log @@ -1066,6 +1058,18 @@ Re-agregar removerá estes dados. Re-agregar? No broken rules or validation exceptions found. + + RDLogManager Error Report + + + + Music schedule import failed! + + + + Traffic schedule import failed! + + ImportListView diff --git a/utils/rddbmgr/revertschema.cpp b/utils/rddbmgr/revertschema.cpp index 173c5ef1..97ea8fc5 100644 --- a/utils/rddbmgr/revertschema.cpp +++ b/utils/rddbmgr/revertschema.cpp @@ -40,6 +40,16 @@ bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg) // NEW SCHEMA REVERSIONS GO HERE... + // + // Revert 341 + // + if((cur_schema==341)&&(set_schemacur_schema)) { + sql=QString("delete from IMPORTER_LINES"); // Purge stale lines first + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + sql=QString("alter table IMPORTER_LINES ")+ + "add column FILE_LINE int unsigned not null after PROCESS_ID"; + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + sql=QString("alter table IMPORTER_LINES ")+ + "add column LINK_START_TIME time after EXT_CART_NAME"; + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + sql=QString("alter table IMPORTER_LINES ")+ + "add column LINK_LENGTH int after LINK_START_TIME"; + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + + WriteSchemaVersion(++cur_schema); + } + // NEW SCHEMA UPDATES GO HERE...