resolved conflict in ChangeLog

This commit is contained in:
Fred Gleason 2016-04-26 16:51:16 -04:00
commit 37fc03231c
6 changed files with 369 additions and 270 deletions

View File

@ -15093,3 +15093,8 @@
2015-04-26 Brian McGlynn <brian.mcglynn@geneseemedia.net>
* Added "Group By" statement in 'rdlibrary/rdlibrary.cpp' to allow a
full 100 results to be shown
2015-04-26 Brian McGlynn <brian.mcglynn@geneseemedia.net>
* Refactored RDLogEditor code to improve performance when
saving and updating logs. (from albanpeigner pull request #42)
* Created modification pointer in voicetracker for better performance
over WAN networks

View File

@ -133,6 +133,14 @@ int RDLogEvent::load(bool track_ptrs)
return log_line.size();
}
void RDLogEvent::saveModified(bool update_tracks)
{
for(unsigned i=0;i<log_line.size();i++) {
if(log_line[i]->hasBeenModified()) {
save(update_tracks, i);
}
}
}
void RDLogEvent::save(bool update_tracks,int line)
{
@ -149,8 +157,15 @@ void RDLogEvent::save(bool update_tracks,int line)
delete q;
}
RDCreateLogTable(log_name);
for(unsigned i=0;i<log_line.size();i++) {
SaveLine(i);
if (log_line.size() > 0) {
QString values = "";
for(unsigned i=0;i<log_line.size();i++) {
InsertLineValues(&values, i);
if (i<log_line.size()-1) {
values += ",";
}
}
InsertLines(values);
}
}
else {
@ -159,6 +174,8 @@ void RDLogEvent::save(bool update_tracks,int line)
q=new RDSqlQuery(sql);
delete q;
SaveLine(line);
// BPM - Clear the modified flag
log_line[line]->clearModified();
}
RDLog *log=new RDLog(log_name.left(log_name.length()-4));
if(log->nextId()<nextId()) {
@ -1098,6 +1115,7 @@ from `%s` left join CART on `%s`.CART_NUMBER=CART.NUMBER order by COUNT",
q->value(40).toInt());
*/
line.clearModified();
log_line.push_back(new RDLogLine(line));
}
delete q;
@ -1145,82 +1163,89 @@ from `%s` left join CART on `%s`.CART_NUMBER=CART.NUMBER order by COUNT",
}
void RDLogEvent::SaveLine(int line)
{
void RDLogEvent::InsertLines(QString values) {
QString sql;
RDSqlQuery *q;
sql=QString().sprintf("insert into `%s` set ID=%d,COUNT=%d,\
CART_NUMBER=%u,START_TIME=%d,TIME_TYPE=%d,\
TRANS_TYPE=%d,START_POINT=%d,END_POINT=%d,\
SEGUE_START_POINT=%d,SEGUE_END_POINT=%d,TYPE=%d,\
COMMENT=\"%s\",LABEL=\"%s\",GRACE_TIME=%d,\
SOURCE=%d,EXT_START_TIME=\"%s\",\
EXT_LENGTH=%d,EXT_DATA=\"%s\",EXT_EVENT_ID=\"%s\",\
EXT_ANNC_TYPE=\"%s\",EXT_CART_NAME=\"%s\",\
FADEUP_POINT=%d,FADEUP_GAIN=%d,FADEDOWN_POINT=%d,\
FADEDOWN_GAIN=%d,SEGUE_GAIN=%d,\
LINK_EVENT_NAME=\"%s\",LINK_START_TIME=%d,\
LINK_LENGTH=%d,LINK_ID=%d,LINK_EMBEDDED=\"%s\",\
ORIGIN_USER=\"%s\",ORIGIN_DATETIME=\"%s\",\
LINK_START_SLOP=%d,LINK_END_SLOP=%d,\
DUCK_UP_GAIN=%d,DUCK_DOWN_GAIN=%d,\
EVENT_LENGTH=%d",
(const char *)log_name,
log_line[line]->id(),
line,
log_line[line]->cartNumber(),
QTime().msecsTo(log_line[line]->
startTime(RDLogLine::Logged)),
(int)log_line[line]->timeType(),
(int)log_line[line]->transType(),
log_line[line]->startPoint(RDLogLine::LogPointer),
log_line[line]->endPoint(RDLogLine::LogPointer),
log_line[line]->segueStartPoint(RDLogLine::LogPointer),
log_line[line]->segueEndPoint(RDLogLine::LogPointer),
log_line[line]->type(),
(const char *)
RDEscapeString(log_line[line]->markerComment()),
(const char *)
RDEscapeString(log_line[line]->markerLabel()),
log_line[line]->graceTime(),
log_line[line]->source(),
(const char *)log_line[line]->extStartTime().
toString("hh:mm:ss"),
log_line[line]->extLength(),
(const char *)RDEscapeString(log_line[line]->extData()),
(const char *)
RDEscapeString(log_line[line]->extEventId()),
(const char *)
RDEscapeString(log_line[line]->extAnncType()),
(const char *)
RDEscapeString(log_line[line]->extCartName()),
log_line[line]->fadeupPoint(RDLogLine::LogPointer),
log_line[line]->fadeupGain(),
log_line[line]->fadedownPoint(RDLogLine::LogPointer),
log_line[line]->fadedownGain(),
log_line[line]->segueGain(),
(const char *)
RDEscapeString(log_line[line]->linkEventName()),
QTime().msecsTo(log_line[line]->linkStartTime()),
log_line[line]->linkLength(),
log_line[line]->linkId(),
(const char *)RDYesNo(log_line[line]->linkEmbedded()),
(const char *)
RDEscapeString(log_line[line]->originUser()),
(const char *)log_line[line]->originDateTime().
toString("yyyy-MM-dd hh:mm:ss"),
log_line[line]->linkStartSlop(),
log_line[line]->linkEndSlop(),
log_line[line]->duckUpGain(),
log_line[line]->duckDownGain(),
log_line[line]->eventLength());
// printf("SQL: %s\n",(const char *)sql);
sql = QString().sprintf("insert into `%s` (ID,COUNT,CART_NUMBER,START_TIME,TIME_TYPE,\
TRANS_TYPE,START_POINT,END_POINT,SEGUE_START_POINT,SEGUE_END_POINT,TYPE, \
COMMENT,LABEL,GRACE_TIME,SOURCE,EXT_START_TIME, \
EXT_LENGTH,EXT_DATA,EXT_EVENT_ID,EXT_ANNC_TYPE,EXT_CART_NAME, \
FADEUP_POINT,FADEUP_GAIN,FADEDOWN_POINT,FADEDOWN_GAIN,SEGUE_GAIN, \
LINK_EVENT_NAME,LINK_START_TIME,LINK_LENGTH,LINK_ID,LINK_EMBEDDED, \
ORIGIN_USER,ORIGIN_DATETIME,LINK_START_SLOP,LINK_END_SLOP, \
DUCK_UP_GAIN,DUCK_DOWN_GAIN,EVENT_LENGTH) values %s",
(const char *)log_name,
(const char *)values);
q=new RDSqlQuery(sql);
delete q;
}
void RDLogEvent::InsertLineValues(QString *query, int line)
{
// one line to save query space
QString sql=QString().sprintf("(%d,%d,%u,%d,%d,%d,%d,%d,%d,%d,%d,\"%s\",\"%s\",%d,%d,\"%s\",%d,\"%s\",\"%s\",\"%s\",\"%s\",%d,%d,%d,%d,%d,\"%s\",%d,%d,%d,\"%s\",\"%s\",\"%s\",%d,%d,%d,%d,%d)",
log_line[line]->id(),
line,
log_line[line]->cartNumber(),
QTime().msecsTo(log_line[line]->
startTime(RDLogLine::Logged)),
(int)log_line[line]->timeType(),
(int)log_line[line]->transType(),
log_line[line]->startPoint(RDLogLine::LogPointer),
log_line[line]->endPoint(RDLogLine::LogPointer),
log_line[line]->segueStartPoint(RDLogLine::LogPointer),
log_line[line]->segueEndPoint(RDLogLine::LogPointer),
log_line[line]->type(),
(const char *)
RDEscapeString(log_line[line]->markerComment()),
(const char *)
RDEscapeString(log_line[line]->markerLabel()),
log_line[line]->graceTime(),
log_line[line]->source(),
(const char *)log_line[line]->extStartTime().
toString("hh:mm:ss"),
log_line[line]->extLength(),
(const char *)RDEscapeString(log_line[line]->extData()),
(const char *)
RDEscapeString(log_line[line]->extEventId()),
(const char *)
RDEscapeString(log_line[line]->extAnncType()),
(const char *)
RDEscapeString(log_line[line]->extCartName()),
log_line[line]->fadeupPoint(RDLogLine::LogPointer),
log_line[line]->fadeupGain(),
log_line[line]->fadedownPoint(RDLogLine::LogPointer),
log_line[line]->fadedownGain(),
log_line[line]->segueGain(),
(const char *)
RDEscapeString(log_line[line]->linkEventName()),
QTime().msecsTo(log_line[line]->linkStartTime()),
log_line[line]->linkLength(),
log_line[line]->linkId(),
(const char *)RDYesNo(log_line[line]->linkEmbedded()),
(const char *)
RDEscapeString(log_line[line]->originUser()),
(const char *)log_line[line]->originDateTime().
toString("yyyy-MM-dd hh:mm:ss"),
log_line[line]->linkStartSlop(),
log_line[line]->linkEndSlop(),
log_line[line]->duckUpGain(),
log_line[line]->duckDownGain(),
log_line[line]->eventLength());
*query += sql;
}
void RDLogEvent::SaveLine(int line)
{
QString values = "";
InsertLineValues(&values, line);
InsertLines(values);
}
void RDLogEvent::LoadNowNext(unsigned from_line)
{
std::vector<QString> groups;

View File

@ -45,6 +45,7 @@ class RDLogEvent
void setLogName(QString logname);
QString serviceName() const;
int load(bool track_ptrs=false);
void saveModified(bool update_tracks=true);
void save(bool update_tracks=true,int line=-1);
int append(const QString &logname,bool track_ptrs=false);
int validate(QString *report,const QDate &date);
@ -75,6 +76,8 @@ class RDLogEvent
private:
int LoadLines(const QString &log_table,int id_offset,bool track_ptrs);
void SaveLine(int line);
void InsertLines(QString values);
void InsertLineValues(QString *query, int line);
void LoadNowNext(unsigned from_line);
QString log_name;
QString log_service_name;

View File

@ -2,9 +2,7 @@
//
// A container class for a Rivendell Log Line.
//
// (C) Copyright 2002-2004 Fred Gleason <fredg@paravelsystems.com>
//
// $Id: rdlog_line.cpp,v 1.113.4.13.2.2 2014/05/22 16:12:54 cvs Exp $
// (C) Copyright 2002-2016 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
@ -26,13 +24,14 @@
#include <qobject.h>
#include <rddb.h>
#include <rdconf.h>
#include <rd.h>
#include <rdlog_line.h>
#include <rdcut.h>
#include <rdmacro_event.h>
#include <rdweb.h>
#include "rddb.h"
#include "rdconf.h"
#include "rd.h"
#include "rdlog_line.h"
#include "rdcut.h"
#include "rdmacro_event.h"
#include "rdweb.h"
#include "rdescape_string.h"
RDLogLine::RDLogLine()
{
@ -68,9 +67,19 @@ RDLogLine::RDLogLine(unsigned cartnum)
delete q;
}
void RDLogLine::clearModified(void)
{
modified = false;
}
bool RDLogLine::hasBeenModified(void)
{
return modified;
}
void RDLogLine::clear()
{
clearModified();
log_id=-1;
log_status=RDLogLine::Scheduled;
log_state=RDLogLine::Ok;
@ -216,6 +225,7 @@ int RDLogLine::id() const
void RDLogLine::setId(int id)
{
log_id=id;
modified=true;
}
@ -321,6 +331,7 @@ RDLogLine::Source RDLogLine::source() const
void RDLogLine::setSource(RDLogLine::Source src)
{
log_source=src;
modified=true;
}
@ -333,6 +344,7 @@ unsigned RDLogLine::cartNumber() const
void RDLogLine::setCartNumber(unsigned cart)
{
log_cart_number=cart;
modified=true;
}
@ -360,6 +372,7 @@ int RDLogLine::graceTime() const
void RDLogLine::setGraceTime(int time)
{
log_grace_time=time;
modified=true;
}
@ -384,6 +397,7 @@ QString RDLogLine::originUser() const
void RDLogLine::setOriginUser(const QString &username)
{
log_origin_user=username;
modified=true;
}
@ -396,6 +410,7 @@ QDateTime RDLogLine::originDateTime() const
void RDLogLine::setOriginDateTime(const QDateTime &datetime)
{
log_origin_datetime=datetime;
modified=true;
}
@ -426,6 +441,7 @@ int RDLogLine::startPoint(PointerSource ptr) const
void RDLogLine::setStartPoint(int point,PointerSource ptr)
{
log_start_point[ptr]=point;
modified=true;
}
@ -444,6 +460,7 @@ int RDLogLine::endPoint(PointerSource ptr) const
void RDLogLine::setEndPoint(int point,PointerSource ptr)
{
log_end_point[ptr]=point;
modified=true;
}
@ -468,6 +485,7 @@ int RDLogLine::segueStartPoint(PointerSource ptr) const
void RDLogLine::setSegueStartPoint(int point,PointerSource ptr)
{
log_segue_start_point[ptr]=point;
modified=true;
}
@ -492,6 +510,7 @@ int RDLogLine::segueEndPoint(PointerSource ptr) const
void RDLogLine::setSegueEndPoint(int point,PointerSource ptr)
{
log_segue_end_point[ptr]=point;
modified=true;
}
@ -509,6 +528,7 @@ int RDLogLine::segueGain() const
void RDLogLine::setSegueGain(int gain)
{
log_segue_gain=gain;
modified=true;
}
@ -533,6 +553,7 @@ int RDLogLine::fadeupPoint(RDLogLine::PointerSource ptr) const
void RDLogLine::setFadeupPoint(int point,RDLogLine::PointerSource ptr)
{
log_fadeup_point[ptr]=point;
modified=true;
}
@ -545,6 +566,7 @@ int RDLogLine::fadeupGain() const
void RDLogLine::setFadeupGain(int gain)
{
log_fadeup_gain=gain;
modified=true;
}
@ -569,6 +591,7 @@ int RDLogLine::fadedownPoint(RDLogLine::PointerSource ptr) const
void RDLogLine::setFadedownPoint(int point,RDLogLine::PointerSource ptr)
{
log_fadedown_point[ptr]=point;
modified=true;
}
@ -581,6 +604,7 @@ int RDLogLine::fadedownGain() const
void RDLogLine::setFadedownGain(int gain)
{
log_fadedown_gain=gain;
modified=true;
}
@ -593,6 +617,7 @@ int RDLogLine::duckUpGain() const
void RDLogLine::setDuckUpGain(int gain)
{
log_duck_up_gain=gain;
modified=true;
}
int RDLogLine::duckDownGain() const
@ -604,6 +629,7 @@ int RDLogLine::duckDownGain() const
void RDLogLine::setDuckDownGain(int gain)
{
log_duck_down_gain=gain;
modified=true;
}
@ -676,6 +702,7 @@ RDCart::Type RDLogLine::cartType() const
void RDLogLine::setCartType(RDCart::Type type)
{
log_cart_type=type;
modified=true;
}
@ -1072,6 +1099,7 @@ QString RDLogLine::markerComment() const
void RDLogLine::setMarkerComment(const QString &str)
{
log_marker_comment=str;
modified=true;
}
@ -1084,6 +1112,7 @@ QString RDLogLine::markerLabel() const
void RDLogLine::setMarkerLabel(const QString &str)
{
log_marker_label=str;
modified=true;
}
@ -1144,6 +1173,7 @@ QTime RDLogLine::extStartTime() const
void RDLogLine::setExtStartTime(QTime time)
{
log_ext_start_time=time;
modified=true;
}
@ -1156,6 +1186,7 @@ int RDLogLine::extLength() const
void RDLogLine::setExtLength(int length)
{
log_ext_length=length;
modified=true;
}
@ -1168,6 +1199,7 @@ QString RDLogLine::extCartName() const
void RDLogLine::setExtCartName(const QString &name)
{
log_ext_cart_name=name;
modified=true;
}
@ -1180,6 +1212,7 @@ QString RDLogLine::extData() const
void RDLogLine::setExtData(const QString &data)
{
log_ext_data=data;
modified=true;
}
@ -1192,6 +1225,7 @@ QString RDLogLine::extEventId() const
void RDLogLine::setExtEventId(const QString &id)
{
log_ext_event_id=id;
modified=true;
}
@ -1204,6 +1238,7 @@ QString RDLogLine::extAnncType() const
void RDLogLine::setExtAnncType(const QString &type)
{
log_ext_annc_type=type;
modified=true;
}
@ -1428,6 +1463,7 @@ QString RDLogLine::linkEventName() const
void RDLogLine::setLinkEventName(const QString &name)
{
log_link_event_name=name;
modified=true;
}
@ -1440,6 +1476,7 @@ QTime RDLogLine::linkStartTime() const
void RDLogLine::setLinkStartTime(const QTime &time)
{
log_link_start_time=time;
modified=true;
}
@ -1452,6 +1489,7 @@ int RDLogLine::linkLength() const
void RDLogLine::setLinkLength(int msecs)
{
log_link_length=msecs;
modified=true;
}
@ -1464,6 +1502,7 @@ int RDLogLine::linkStartSlop() const
void RDLogLine::setLinkStartSlop(int msecs)
{
log_link_start_slop=msecs;
modified=true;
}
@ -1488,6 +1527,7 @@ int RDLogLine::linkId() const
void RDLogLine::setLinkId(int id)
{
log_link_id=id;
modified=true;
}
@ -1500,6 +1540,7 @@ bool RDLogLine::linkEmbedded() const
void RDLogLine::setLinkEmbedded(bool state)
{
log_link_embedded=state;
modified=true;
}
@ -1547,208 +1588,224 @@ RDLogLine::State RDLogLine::setEvent(int mach,RDLogLine::TransType next_type,
double time_ratio=1.0;
switch(log_type) {
case RDLogLine::Cart:
cart=new RDCart(log_cart_number);
if(!cart->exists()) {
delete cart;
case RDLogLine::Cart:
cart=new RDCart(log_cart_number);
if(!cart->exists()) {
delete cart;
#ifndef WIN32
syslog(LOG_USER|LOG_WARNING,"RDLogLine::setEvent(): no such cart, CART=%06u",log_cart_number);
syslog(LOG_USER|LOG_WARNING,"RDLogLine::setEvent(): no such cart, CART=%06u",log_cart_number);
#endif // WIN32
log_state=RDLogLine::NoCart;
return RDLogLine::NoCart;
}
cart->selectCut(&log_cut_name);
if(log_cut_name.isEmpty()) {
delete cart;
log_state=RDLogLine::NoCart;
return RDLogLine::NoCart;
}
cart->selectCut(&log_cut_name);
if(log_cut_name.isEmpty()) {
delete cart;
#ifndef WIN32
// syslog(LOG_USER|LOG_WARNING,"RDLogLine::setEvent(): RDCut::selectCut() failed, CART=%06u",log_cart_number);
#endif // WIN32
log_state=RDLogLine::NoCut;
return RDLogLine::NoCut;
}
log_cut_number=log_cut_name.right(3).toInt();
sql=QString().sprintf("select LENGTH,START_POINT,END_POINT,\
SEGUE_START_POINT,SEGUE_END_POINT,\
SEGUE_GAIN,\
TALK_START_POINT,TALK_END_POINT,\
HOOK_START_POINT,HOOK_END_POINT,\
OUTCUE,ISRC,ISCI,DESCRIPTION from CUTS\
where CUT_NAME=\"%s\"",
(const char *)log_cut_name);
q=new RDSqlQuery(sql);
if(!q->first()) {
delete q;
delete cart;
log_state=RDLogLine::NoCut;
return RDLogLine::NoCut;
}
log_cut_number=log_cut_name.right(3).toInt();
sql=QString("select ")+
"LENGTH,"+ // 00
"START_POINT,"+ // 01
"END_POINT,"+ // 02
"SEGUE_START_POINT,"+ // 03
"SEGUE_END_POINT,"+ // 04
"SEGUE_GAIN,"+ // 05
"TALK_START_POINT,"+ // 06
"TALK_END_POINT,"+ // 07
"HOOK_START_POINT,"+ // 08
"HOOK_END_POINT,"+ // 09
"OUTCUE,"+ // 10
"ISRC,"+ // 11
"ISCI,"+ // 12
"DESCRIPTION "+ // 13
"from CUTS where CUT_NAME=\""+RDEscapeString(log_cut_name)+"\"";
q=new RDSqlQuery(sql);
if(!q->first()) {
delete q;
delete cart;
#ifndef WIN32
syslog(LOG_USER|LOG_WARNING,"RDLogLine::setEvent(): no cut record found, SQL=%s",(const char *)sql);
syslog(LOG_USER|LOG_WARNING,"RDLogLine::setEvent(): no cut record found, SQL=%s",(const char *)sql);
#endif // WIN32
log_state=RDLogLine::NoCut;
return RDLogLine::NoCut;
}
if(q->value(0).toInt()==0) {
delete q;
delete cart;
log_state=RDLogLine::NoCut;
return RDLogLine::NoCut;
}
if(q->value(0).toInt()==0) {
delete q;
delete cart;
#ifndef WIN32
syslog(LOG_USER|LOG_WARNING,"RDLogLine::setEvent(): zero length cut audio, SQL=%s",(const char *)sql);
syslog(LOG_USER|LOG_WARNING,"RDLogLine::setEvent(): zero length cut audio, SQL=%s",(const char *)sql);
#endif // WIN32
log_state=RDLogLine::NoCut;
return RDLogLine::NoCut;
}
if(timescale) {
if(len>0) {
log_effective_length=len;
log_forced_length=len;
}
else {
if(log_hook_mode&&
(q->value(8).toInt()>=0)&&(q->value(9).toInt()>=0)) {
log_effective_length=q->value(9).toInt()-q->value(8).toInt();
log_forced_length=log_effective_length;
time_ratio=1.0;
timescale=false;
}
else {
log_effective_length=cart->forcedLength();
time_ratio=(double)log_forced_length/
(q->value(2).toDouble()-q->value(1).toDouble());
if(((1.0/time_ratio)<RD_TIMESCALE_MIN)||
((1.0/time_ratio)>RD_TIMESCALE_MAX)) {
timescale=false;
}
}
}
}
if(timescale) {
log_start_point[0]=(int)(q->value(1).toDouble()*time_ratio);
log_end_point[0]=(int)(q->value(2).toDouble()*time_ratio);
if(q->value(3).toInt()>=0) {
log_segue_start_point[0]=(int)(q->value(3).toDouble()*time_ratio);
log_segue_end_point[0]=(int)(q->value(4).toDouble()*time_ratio);
}
else {
log_segue_start_point[0]=-1;
log_segue_end_point[0]=-1;
}
if(log_talk_start>=0) {
log_talk_start=(int)((double)log_talk_start*time_ratio);
log_talk_end=(int)(q->value(7).toDouble()*time_ratio);
}
else {
log_talk_start=-1;
log_talk_end=-1;
}
log_talk_length=log_talk_end-log_talk_start;
}
else {
if(log_hook_mode&&
(q->value(8).toInt()>=0)&&(q->value(9).toInt()>=0)) {
log_start_point[0]=q->value(8).toInt();
log_end_point[0]=q->value(9).toInt();
log_segue_start_point[0]=-1;
log_segue_end_point[0]=-1;
log_talk_start=-1;
log_talk_end=-1;
}
else {
log_start_point[0]=q->value(1).toInt();
log_end_point[0]=q->value(2).toInt();
if(log_start_point[RDLogLine::LogPointer]>=0 ||
log_end_point[RDLogLine::LogPointer]>=0) {
log_effective_length=log_end_point[RDLogLine::LogPointer]-
log_start_point[RDLogLine::LogPointer];
}
else {
log_effective_length=q->value(0).toUInt();
}
log_segue_start_point[0]=q->value(3).toInt();
log_segue_end_point[0]=q->value(4).toInt();
log_talk_start=q->value(6).toInt();
log_talk_end=q->value(7).toInt();
}
log_hook_start=q->value(8).toInt();
log_hook_end=q->value(9).toInt();
if(log_talk_end>log_end_point[RDLogLine::LogPointer] &&
log_end_point[RDLogLine::LogPointer]>=0) {
log_talk_end=log_end_point[RDLogLine::LogPointer];
}
if(log_talk_end<log_start_point[RDLogLine::LogPointer]) {
log_talk_end=0;
log_talk_start=0;
}
else {
if(log_talk_start<log_start_point[RDLogLine::LogPointer]) {
log_talk_start=0;
log_talk_end-=log_start_point[RDLogLine::LogPointer];
}
if(log_talk_start>log_end_point[RDLogLine::LogPointer] &&
log_end_point[RDLogLine::LogPointer]>=0) {
log_talk_start=0;
log_talk_end=0;
}
}
log_talk_length=log_talk_end-log_talk_start;
}
if(segueStartPoint(RDLogLine::AutoPointer)<0) {
log_average_segue_length=cart->averageSegueLength();
}
else {
log_average_segue_length=segueStartPoint(RDLogLine::AutoPointer)-
startPoint(RDLogLine::AutoPointer);
}
log_outcue=q->value(10).toString();
log_isrc=q->value(11).toString();
log_isci=q->value(12).toString();
log_description=q->value(13).toString();
log_segue_gain_cut=q->value(5).toInt();
delete q;
delete cart;
break;
case RDLogLine::Macro:
cart=new RDCart(log_cart_number);
log_effective_length=cart->forcedLength();
log_average_segue_length=log_effective_length;
log_forced_stop=false;
rml_event=new RDMacroEvent();
rml_event->load(cart->number());
for(int i=0;i<rml_event->size();i++) {
if(rml_event->command(i)->command()==RDMacro::LL) {
if(rml_event->command(i)->arg(0).toInt()==mach) {
log_forced_stop=true;
}
}
}
log_start_point[0]=-1;
log_end_point[0]=-1;
log_state=RDLogLine::NoCut;
return RDLogLine::NoCut;
}
if(timescale) {
if(len>0) {
log_effective_length=len;
log_forced_length=len;
}
else {
if(log_hook_mode&&
(q->value(8).toInt()>=0)&&(q->value(9).toInt()>=0)) {
log_effective_length=q->value(9).toInt()-q->value(8).toInt();
log_forced_length=log_effective_length;
time_ratio=1.0;
timescale=false;
}
else {
log_effective_length=cart->forcedLength();
time_ratio=(double)log_forced_length/
(q->value(2).toDouble()-q->value(1).toDouble());
/*
* FIXME: timescale limits need to be applied here
*
if(((1.0/time_ratio)<(1.0-log_timescale_limit))||
((1.0/time_ratio)>(1.0+log_timescale_limit))) {
timescale=false;
}
*/
}
}
}
if(timescale) {
log_start_point[0]=(int)(q->value(1).toDouble()*time_ratio);
log_end_point[0]=(int)(q->value(2).toDouble()*time_ratio);
if(q->value(3).toInt()>=0) {
log_segue_start_point[0]=(int)(q->value(3).toDouble()*time_ratio);
log_segue_end_point[0]=(int)(q->value(4).toDouble()*time_ratio);
}
else {
log_segue_start_point[0]=-1;
log_segue_end_point[0]=-1;
log_talk_length=0;
}
if(log_talk_start>=0) {
log_talk_start=(int)((double)log_talk_start*time_ratio);
log_talk_end=(int)(q->value(7).toDouble()*time_ratio);
}
else {
log_talk_start=-1;
log_talk_end=-1;
log_segue_gain_cut=0;
delete rml_event;
delete cart;
break;
case RDLogLine::Marker:
case RDLogLine::Track:
log_cut_number=0;
log_cut_name="";
log_effective_length=0;
log_average_segue_length=0;
log_forced_stop=false;
log_start_point[0]=-1;
log_end_point[0]=-1;
}
log_talk_length=log_talk_end-log_talk_start;
}
else {
if(log_hook_mode&&
(q->value(8).toInt()>=0)&&(q->value(9).toInt()>=0)) {
log_start_point[0]=q->value(8).toInt();
log_end_point[0]=q->value(9).toInt();
log_segue_start_point[0]=-1;
log_segue_end_point[0]=-1;
log_talk_length=0;
log_talk_start=-1;
log_talk_end=-1;
log_segue_gain_cut=0;
break;
}
else {
log_start_point[0]=q->value(1).toInt();
log_end_point[0]=q->value(2).toInt();
if(log_start_point[RDLogLine::LogPointer]>=0 ||
log_end_point[RDLogLine::LogPointer]>=0) {
log_effective_length=log_end_point[RDLogLine::LogPointer]-
log_start_point[RDLogLine::LogPointer];
}
else {
log_effective_length=q->value(0).toUInt();
}
log_segue_start_point[0]=q->value(3).toInt();
log_segue_end_point[0]=q->value(4).toInt();
log_talk_start=q->value(6).toInt();
log_talk_end=q->value(7).toInt();
}
log_hook_start=q->value(8).toInt();
log_hook_end=q->value(9).toInt();
if(log_talk_end>log_end_point[RDLogLine::LogPointer] &&
log_end_point[RDLogLine::LogPointer]>=0) {
log_talk_end=log_end_point[RDLogLine::LogPointer];
}
if(log_talk_end<log_start_point[RDLogLine::LogPointer]) {
log_talk_end=0;
log_talk_start=0;
}
else {
if(log_talk_start<log_start_point[RDLogLine::LogPointer]) {
log_talk_start=0;
log_talk_end-=log_start_point[RDLogLine::LogPointer];
}
if(log_talk_start>log_end_point[RDLogLine::LogPointer] &&
log_end_point[RDLogLine::LogPointer]>=0) {
log_talk_start=0;
log_talk_end=0;
}
}
log_talk_length=log_talk_end-log_talk_start;
}
if(segueStartPoint(RDLogLine::AutoPointer)<0) {
log_average_segue_length=cart->averageSegueLength();
}
else {
log_average_segue_length=segueStartPoint(RDLogLine::AutoPointer)-
startPoint(RDLogLine::AutoPointer);
}
log_outcue=q->value(10).toString();
log_isrc=q->value(11).toString();
log_isci=q->value(12).toString();
log_description=q->value(13).toString();
log_segue_gain_cut=q->value(5).toInt();
delete q;
delete cart;
break;
default:
break;
case RDLogLine::Macro:
cart=new RDCart(log_cart_number);
log_effective_length=cart->forcedLength();
log_average_segue_length=log_effective_length;
log_forced_stop=false;
rml_event=new RDMacroEvent();
rml_event->load(cart->number());
for(int i=0;i<rml_event->size();i++) {
if(rml_event->command(i)->command()==RDMacro::LL) {
if(rml_event->command(i)->arg(0).toInt()==mach) {
log_forced_stop=true;
}
}
}
log_start_point[0]=-1;
log_end_point[0]=-1;
log_segue_start_point[0]=-1;
log_segue_end_point[0]=-1;
log_talk_length=0;
log_talk_start=-1;
log_talk_end=-1;
log_segue_gain_cut=0;
delete rml_event;
delete cart;
break;
case RDLogLine::Chain:
case RDLogLine::CloseBracket:
case RDLogLine::Marker:
case RDLogLine::MusicLink:
case RDLogLine::OpenBracket:
case RDLogLine::Track:
case RDLogLine::TrafficLink:
case RDLogLine::UnknownType:
log_cut_number=0;
log_cut_name="";
log_effective_length=0;
log_average_segue_length=0;
log_forced_stop=false;
log_start_point[0]=-1;
log_end_point[0]=-1;
log_segue_start_point[0]=-1;
log_segue_end_point[0]=-1;
log_talk_length=0;
log_talk_start=-1;
log_talk_end=-1;
log_segue_gain_cut=0;
log_state=RDLogLine::Ok;
break;
}
return RDLogLine::Ok;
}
@ -2015,7 +2072,7 @@ QString RDLogLine::transText(RDLogLine::TransType trans)
return QObject::tr("STOP");
case RDLogLine::NoTrans:
return QObject::tr("UNKNOWN");
return QString("");
}
return QObject::tr("UNKNOWN");
}

View File

@ -2,9 +2,7 @@
//
// A container class for a Rivendell Log Line.
//
// (C) Copyright 2002-2004 Fred Gleason <fredg@paravelsystems.com>
//
// $Id: rdlog_line.h,v 1.85.8.10.2.1 2014/05/20 01:45:16 cvs Exp $
// (C) Copyright 2002-2016 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
@ -34,8 +32,10 @@
class RDLogLine
{
public:
bool hasBeenModified(void);
enum StartTimeType {Imported=0,Logged=1,Predicted=2,Actual=3,Initial=4};
enum TimeType {Relative=0,Hard=1};
enum TimeType {Relative=0,Hard=1,NoTime=255};
enum TransType {Play=0,Segue=1,Stop=2,NoTrans=255};
enum TransEdge {AllTrans=0,LeadingTrans=1,TrailingTrans=2};
enum Source {Manual=0,Traffic=1,Music=2,Template=3,Tracker=4};
@ -54,6 +54,7 @@ class RDLogLine
void clear();
void clearExternalData();
void clearTrackData(RDLogLine::TransEdge edge);
void clearModified(void);
int id() const;
void setId(int id);
RDLogLine::Status status() const;
@ -269,6 +270,7 @@ class RDLogLine
void setHoldover(bool);
private:
bool modified;
int log_id;
RDLogLine::Status log_status;
RDLogLine::State log_state;

View File

@ -2313,7 +2313,14 @@ void VoiceTracker::SaveTrack(int line)
if((line>0)&&(track_log_event->logLine(line-1)->type()==RDLogLine::Track)) {
line--;
}
track_log_event->save();
if(track_size_altered) {
track_log_event->save();
}
else {
track_log_event->saveModified();
}
track_log->
setModifiedDatetime(QDateTime(QDate::currentDate(),QTime::currentTime()));
track_changed=false;