2022-04-01 Fred Gleason <fredg@paravelsystems.com>

* Fixed a bug in rdlogmanager(1) where attempting to generate
	a SoundExchange Statutory License report using the command-line
	option would cause a crash.
	* Added an '-h' option to rdlogmanager(1).

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2022-04-01 20:26:44 -04:00
parent 91345cb991
commit 3cc7806db1
8 changed files with 109 additions and 16 deletions

View File

@ -22970,3 +22970,8 @@
2022-03-29 Fred Gleason <fredg@paravelsystems.com>
* Fixed a bug in rdlogmanager(1) that caused startup to fail when
using the '-r' option when an X11 display context was not available.
2022-04-01 Fred Gleason <fredg@paravelsystems.com>
* Fixed a bug in rdlogmanager(1) where attempting to generate
a SoundExchange Statutory License report using the command-line
option would cause a crash.
* Added an '-h' option to rdlogmanager(1).

View File

@ -183,6 +183,21 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-h
<arg choice='req'><replaceable>hours</replaceable></arg>
</option>
</term>
<listitem>
<para>
Supply the Aggregate Tuning Hours value in hours. Currently only
required for the
<computeroutput>SoundExchange Statutory License</computeroutput>
report.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>

View File

@ -31,7 +31,8 @@
#include "rdreport.h"
bool RDReport::ExportSoundEx(const QString &filename,const QDate &startdate,
const QDate &enddate,const QString &mixtable)
const QDate &enddate,double ath,
const QString &mixtable)
{
QString sql;
RDSqlQuery *q;
@ -49,11 +50,12 @@ bool RDReport::ExportSoundEx(const QString &filename,const QDate &startdate,
//
// Get ATH Value
//
double ath=0.0;
RDGetAth *getath=new RDGetAth(&ath);
if(getath->exec()<0) {
report_error_code=RDReport::ErrorCanceled;
return false;
if(ath<0.0) {
RDGetAth *getath=new RDGetAth(&ath);
if(getath->exec()<0) {
report_error_code=RDReport::ErrorCanceled;
return false;
}
}
QFile *file=new QFile(filename);

View File

@ -298,6 +298,12 @@ void RDReport::setEndTime() const
}
bool RDReport::aggregateTuningHoursRequired() const
{
return RDReport::aggregateTuningHoursRequired(filter());
}
RDReport::ErrorCode RDReport::errorCode() const
{
return report_error_code;
@ -314,7 +320,7 @@ bool RDReport::outputExists(const QDate &startdate)
bool RDReport::generateReport(const QDate &startdate,const QDate &enddate,
RDStation *station,QString *out_path)
RDStation *station,QString *out_path,double ath)
{
QString sql;
RDSqlQuery *q;
@ -595,7 +601,7 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate,
break;
case RDReport::SoundExchange:
ret=ExportSoundEx(filename,startdate,enddate,mixname);
ret=ExportSoundEx(filename,startdate,enddate,ath,mixname);
break;
case RDReport::NprSoundExchange:
@ -834,6 +840,43 @@ bool RDReport::multipleMonthsAllowed(RDReport::ExportFilter filter)
}
bool RDReport::aggregateTuningHoursRequired(RDReport::ExportFilter filter)
{
bool ret=false;
switch(filter) {
case RDReport::CbsiDeltaFlex:
case RDReport::TextLog:
case RDReport::BmiEmr:
case RDReport::RadioTraffic:
case RDReport::RadioTraffic2:
case RDReport::VisualTraffic:
case RDReport::CounterPoint:
case RDReport::CounterPoint2:
case RDReport::MrMaster:
case RDReport::Music1:
case RDReport::MusicClassical:
case RDReport::MusicPlayout:
case RDReport::NaturalLog:
case RDReport::WideOrbit:
case RDReport::CutLog:
case RDReport::ResultsReport:
case RDReport::MusicSummary:
case RDReport::NprSoundExchange:
case RDReport::SpinCount:
case RDReport::Technical:
case RDReport::LastFilter:
ret=false;
break;
case RDReport::SoundExchange:
ret=true;
break;
}
return ret;
}
QString RDReport::errorText(RDReport::ErrorCode code)
{
QString ret;

View File

@ -84,14 +84,16 @@ class RDReport
QTime endTime(bool *is_null=NULL) const;
void setEndTime(const QTime &time) const;
void setEndTime() const;
bool aggregateTuningHoursRequired() const;
RDReport::ErrorCode errorCode() const;
bool outputExists(const QDate &startdate);
bool generateReport(const QDate &startdate,const QDate &enddate,
RDStation *station,QString *out_path);
RDStation *station,QString *out_path,double ath=-1.0);
static QString filterText(RDReport::ExportFilter filter);
static QString stationTypeText(RDReport::StationType type);
static bool multipleDaysAllowed(RDReport::ExportFilter filter);
static bool multipleMonthsAllowed(RDReport::ExportFilter filter);
static bool aggregateTuningHoursRequired(RDReport::ExportFilter filter);
static QString errorText(RDReport::ErrorCode code);
static QString leftJustify(const QString &str,int width);
static QString rightJustify(const QString &str,int width);
@ -108,7 +110,7 @@ class RDReport
const QDate &enddate,bool incl_hdr,bool incl_crs,
const QString &mixtable);
bool ExportSoundEx(const QString &filename,const QDate &startdate,
const QDate &enddate,const QString &mixtable);
const QDate &enddate,double ath,const QString &mixtable);
bool ExportNprSoundEx(const QString &filename,const QDate &startdate,
const QDate &enddate,const QString &mixtable);
bool ExportRadioTraffic(const QString &filename,const QDate &startdate,

View File

@ -31,7 +31,8 @@
#include <globals.h>
int RunReportOperation(int argc,char *argv[],const QString &rptname,
bool protect_existing,int start_offset,int end_offset)
bool protect_existing,int start_offset,int end_offset,
double aggregate_tuning_hours)
{
QString out_path;
QString err_msg;
@ -59,6 +60,14 @@ int RunReportOperation(int argc,char *argv[],const QString &rptname,
return RDApplication::ExitNoReport;
}
//
// Check for Aggregate Tuning Hours
//
if((aggregate_tuning_hours<0)&&(report->aggregateTuningHoursRequired())) {
fprintf(stderr,"rdlogmanager: -h option required\n");
return RDApplication::ExitInvalidOption;
}
//
// Generate Report
//
@ -71,7 +80,7 @@ int RunReportOperation(int argc,char *argv[],const QString &rptname,
}
if(!report->generateReport(yesterday.addDays(start_offset),
yesterday.addDays(end_offset),rda->station(),
&out_path)) {
&out_path,aggregate_tuning_hours)) {
fprintf(stderr,"rdlogmanager: report generation failed [%s]\n",
RDReport::errorText(report->errorCode()).toUtf8().constData());
return RDApplication::ExitReportFailed;

View File

@ -2,7 +2,7 @@
//
// The Log Generator Utility for Rivendell.
//
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2022 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
@ -288,6 +288,8 @@ int main(int argc,char *argv[])
QString cmd_report=NULL;
int cmd_start_offset=0;
int cmd_end_offset=0;
double cmd_hours=-1.0;
bool ok=false;
RDCmdSwitch *cmd=
new RDCmdSwitch(argc,argv,"rdlogmanager",RDLOGMANAGER_USAGE);
@ -366,6 +368,21 @@ int main(int argc,char *argv[])
}
cmd->setProcessed(i,true);
}
if (cmd->key(i)=="-h") {
if (i+1<cmd->keys()) {
i++;
cmd_hours=cmd->key(i).toDouble(&ok);
if((!ok)||(cmd_hours<0.0)) {
fprintf(stderr,"rdlogmanager: invalid argument to -h\n");
exit(RDApplication::ExitInvalidOption);
}
}
else {
fprintf(stderr,"rdlogmanager: missing argument to \"-h\"\n");
exit(RDApplication::ExitInvalidOption);
}
cmd->setProcessed(i,true);
}
if(!cmd->processed(i)) {
fprintf(stderr,"rdlogmanager: unknown command option \"%s\"\n",
cmd->key(i).toUtf8().constData());
@ -388,7 +405,7 @@ int main(int argc,char *argv[])
}
if(!cmd_report.isEmpty()) {
return RunReportOperation(argc,argv,cmd_report,cmd_protect_existing,
cmd_start_offset,cmd_end_offset);
cmd_start_offset,cmd_end_offset,cmd_hours);
}
return gui_main(argc,argv);
}

View File

@ -2,7 +2,7 @@
//
// The Log Manager Utility for Rivendell.
//
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2022 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
@ -38,7 +38,7 @@ extern int RunLogOperation(int argc,char *argv[],const QString &svcname,
bool merge_mus,bool merge_tfc);
extern int RunReportOperation(int argc,char *argv[],const QString &rptname,
bool protect_existing,int start_offset,
int end_offset);
int end_offset,double aggregate_tuning_hours);
class MainWidget : public RDMainWindow
{