diff --git a/ChangeLog b/ChangeLog index 3f0a4a0c..41cffce7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16091,3 +16091,8 @@ * Added a 'log_unlink_test' harness. * Fixed a bug that caused a log's link status flags to fail to be updated when the log was unlinked. +2017-12-05 Fred Gleason <fredg@paravelsystems.com> + * Modified log linking to retain parent link events in linked logs. + * Fixed a bug where re-merging linked logs would generate an + 'Event not placed' exception for avails that were previously + unpopulated. diff --git a/lib/rdevent_line.cpp b/lib/rdevent_line.cpp index 86298e16..2083097c 100644 --- a/lib/rdevent_line.cpp +++ b/lib/rdevent_line.cpp @@ -2,7 +2,7 @@ // // Abstract a Rivendell Log Manager Event // -// (C) Copyright 2002-2006,2016 Fred Gleason <fredg@paravelsystems.com> +// (C) Copyright 2002-2006,2016-2017 Fred Gleason <fredg@paravelsystems.com> // // 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 @@ -915,6 +915,17 @@ bool RDEventLine::linkLog(RDLogEvent *e,int next_id,const QString &svcname, int grace_time=link_logline->graceTime(); QTime time=link_logline->startTime(RDLogLine::Logged); + // + // Insert Parent Link + // + e->insert(e->size(),1); + logline=new RDLogLine(); + *logline=*link_logline; + logline->setId(e->nextId()); + *(e->logLine(e->size()-1))=*logline; + delete logline; + logline=NULL; + // // Calculate Event Time Boundaries // diff --git a/lib/rdsvc.cpp b/lib/rdsvc.cpp index 846eaf14..74e8dbd1 100644 --- a/lib/rdsvc.cpp +++ b/lib/rdsvc.cpp @@ -2,7 +2,7 @@ // // Abstract a Rivendell Service. // -// (C) Copyright 2002-2004,2016 Fred Gleason <fredg@paravelsystems.com> +// (C) Copyright 2002-2004,2016-2017 Fred Gleason <fredg@paravelsystems.com> // // 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 @@ -980,16 +980,13 @@ bool RDSvc::linkLog(RDSvc::ImportSource src,const QDate &date, void RDSvc::clearLogLinks(RDSvc::ImportSource src,const QString &logname) { std::vector<int> cleared_ids; - RDLogLine::Type event_type=RDLogLine::UnknownType; RDLogLine::Source event_source=RDLogLine::Manual; switch(src) { case RDSvc::Music: - event_type=RDLogLine::MusicLink; event_source=RDLogLine::Music; break; case RDSvc::Traffic: - event_type=RDLogLine::TrafficLink; event_source=RDLogLine::Traffic; break; } @@ -1000,30 +997,7 @@ void RDSvc::clearLogLinks(RDSvc::ImportSource src,const QString &logname) RDLogLine *logline=NULL; for(int i=0;i<src_event->size();i++) { logline=src_event->logLine(i); - if((logline->linkId()>=0)&&(logline->source()==event_source)) { - if(CheckId(&cleared_ids,logline->linkId())) { - dest_event->insert(dest_event->size(),1); - RDLogLine *lline=dest_event->logLine(dest_event->size()-1); - lline->setId(dest_event->nextId()); - lline->setStartTime(RDLogLine::Logged,logline->linkStartTime()); - lline->setType(event_type); - if(logline->linkEmbedded()) { - lline->setSource(RDLogLine::Music); - } - else { - lline->setSource(RDLogLine::Template); - } - lline->setTransType(logline->transType()); - lline->setLinkEventName(logline->linkEventName()); - lline->setLinkStartTime(logline->linkStartTime()); - lline->setLinkLength(logline->linkLength()); - lline->setLinkStartSlop(logline->linkStartSlop()); - lline->setLinkEndSlop(logline->linkEndSlop()); - lline->setLinkId(logline->linkId()); - lline->setLinkEmbedded(logline->linkEmbedded()); - } - } - else { + if((logline->linkId()<0)||(logline->source()!=event_source)) { dest_event->insert(dest_event->size(),1); *(dest_event->logLine(dest_event->size()-1))=*logline; dest_event->logLine(dest_event->size()-1)->setId(dest_event->nextId());