2018-04-14 Fred Gleason <fredg@paravelsystems.com>

* Moved the 'LogPlay' class in rdairplay(1) to 'RDLogPlay' in
	the core library.
	* Moved the 'RLMHost' class in rdairplay(1) to 'RDRLMHost' in
	the core library.
This commit is contained in:
Fred Gleason 2018-04-14 20:51:03 -04:00
parent b4fdca6f3e
commit c4fcd6486e
23 changed files with 440 additions and 510 deletions

View File

@ -16778,3 +16778,8 @@
on adapters lacking DMA bus-mastering support. on adapters lacking DMA bus-mastering support.
2018-04-14 Fred Gleason <fredg@paravelsystems.com> 2018-04-14 Fred Gleason <fredg@paravelsystems.com>
* Cleaned up spurious HPI error messages being sent to the syslog. * Cleaned up spurious HPI error messages being sent to the syslog.
2018-04-14 Fred Gleason <fredg@paravelsystems.com>
* Moved the 'LogPlay' class in rdairplay(1) to 'RDLogPlay' in
the core library.
* Moved the 'RLMHost' class in rdairplay(1) to 'RDRLMHost' in
the core library.

View File

@ -172,6 +172,7 @@ dist_librd_la_SOURCES = dbversion.h\
rdlogedit_conf.cpp rdlogedit_conf.h\ rdlogedit_conf.cpp rdlogedit_conf.h\
rdlogfilter.cpp rdlogfilter.h\ rdlogfilter.cpp rdlogfilter.h\
rdloglock.cpp rdloglock.h\ rdloglock.cpp rdloglock.h\
rdlogplay.cpp rdlogplay.h\
rdmacro.cpp rdmacro.h\ rdmacro.cpp rdmacro.h\
rdmacro_event.cpp rdmacro_event.h\ rdmacro_event.cpp rdmacro_event.h\
rdmarker_bar.cpp rdmarker_bar.h\ rdmarker_bar.cpp rdmarker_bar.h\
@ -205,6 +206,7 @@ dist_librd_la_SOURCES = dbversion.h\
rdreport.cpp rdreport.h\ rdreport.cpp rdreport.h\
rdringbuffer.cpp rdringbuffer.h\ rdringbuffer.cpp rdringbuffer.h\
rdripc.cpp rdripc.h\ rdripc.cpp rdripc.h\
rdrlmhost.cpp rdrlmhost.h\
rdschedcode.cpp rdschedcode.h\ rdschedcode.cpp rdschedcode.h\
rdschedcodes_dialog.cpp rdschedcodes_dialog.h\ rdschedcodes_dialog.cpp rdschedcodes_dialog.h\
rdsegmeter.cpp rdsegmeter.h\ rdsegmeter.cpp rdsegmeter.h\
@ -308,6 +310,7 @@ nodist_librd_la_SOURCES = moc_rdadd_cart.cpp\
moc_rdlivewire.cpp\ moc_rdlivewire.cpp\
moc_rdlogfilter.cpp\ moc_rdlogfilter.cpp\
moc_rdloglock.cpp\ moc_rdloglock.cpp\
moc_rdlogplay.cpp\
moc_rdmacro_event.cpp\ moc_rdmacro_event.cpp\
moc_rdmarker_bar.cpp\ moc_rdmarker_bar.cpp\
moc_rdmarker_edit.cpp\ moc_rdmarker_edit.cpp\
@ -319,7 +322,8 @@ nodist_librd_la_SOURCES = moc_rdadd_cart.cpp\
moc_rdplaymeter.cpp\ moc_rdplaymeter.cpp\
moc_rdpushbutton.cpp\ moc_rdpushbutton.cpp\
moc_rdripc.cpp\ moc_rdripc.cpp\
moc_rdschedcodes_dialog.cpp\ moc_rdrlmhost.cpp\
moc_rdschedcodes_dialog.cpp\
moc_rdsegmeter.cpp\ moc_rdsegmeter.cpp\
moc_rdsimpleplayer.cpp\ moc_rdsimpleplayer.cpp\
moc_rdrehash.cpp\ moc_rdrehash.cpp\

View File

@ -159,6 +159,7 @@ x11 {
SOURCES += rdimport_audio.cpp SOURCES += rdimport_audio.cpp
SOURCES += rdkernelgpio.cpp SOURCES += rdkernelgpio.cpp
SOURCES += rdlist_groups.cpp SOURCES += rdlist_groups.cpp
SOURCES += rdlogplay.cpp
SOURCES += rdmarker_button.cpp SOURCES += rdmarker_button.cpp
SOURCES += rdmarker_edit.cpp SOURCES += rdmarker_edit.cpp
SOURCES += rdmatrix.cpp SOURCES += rdmatrix.cpp
@ -169,6 +170,7 @@ x11 {
SOURCES += rdrecording.cpp SOURCES += rdrecording.cpp
SOURCES += rdrehash.cpp SOURCES += rdrehash.cpp
SOURCES += rdrenderer.cpp SOURCES += rdrenderer.cpp
SOURCES += rdrlmhost.cpp
SOURCES += rdsimpleplayer.cpp SOURCES += rdsimpleplayer.cpp
SOURCES += rdsound_panel.cpp SOURCES += rdsound_panel.cpp
SOURCES += rdstatus.cpp SOURCES += rdstatus.cpp
@ -301,6 +303,7 @@ x11 {
HEADERS += rdimport_audio.h HEADERS += rdimport_audio.h
HEADERS += rdkernelgpio.h HEADERS += rdkernelgpio.h
HEADERS += rdlist_groups.h HEADERS += rdlist_groups.h
HEADERS += rdlogplay.h
HEADERS += rdmarker_button.h HEADERS += rdmarker_button.h
HEADERS += rdmarker_edit.h HEADERS += rdmarker_edit.h
HEADERS += rdmatrix.h HEADERS += rdmatrix.h
@ -312,6 +315,7 @@ x11 {
HEADERS += rdrecording.h HEADERS += rdrecording.h
HEADERS += rdrehash.h HEADERS += rdrehash.h
HEADERS += rdrenderer.h HEADERS += rdrenderer.h
HEADERS += rdrlmhost.h
HEADERS += rdsimpleplayer.h HEADERS += rdsimpleplayer.h
HEADERS += rdsound_panel.h HEADERS += rdsound_panel.h
HEADERS += rdstatus.h HEADERS += rdstatus.h

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
// log_play.h // rdlogplay.h
// //
// Rivendell Log Playout Machine // Rivendell Log Playout Machine
// //
@ -18,8 +18,8 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
// //
#ifndef LOG_PLAY_H #ifndef RDLOGPLAY_H
#define LOG_PLAY_H #define RDLOGPLAY_H
#include <vector> #include <vector>
@ -37,10 +37,9 @@
#include <rdlog_event.h> #include <rdlog_event.h>
#include <rdmacro_event.h> #include <rdmacro_event.h>
#include <rdplay_deck.h> #include <rdplay_deck.h>
#include <rdrlmhost.h>
#include <rdsimpleplayer.h> #include <rdsimpleplayer.h>
#include <rlmhost.h>
// //
// Widget Settings // Widget Settings
// //
@ -56,12 +55,12 @@
//#define SHOW_SLOTS //#define SHOW_SLOTS
//#define SHOW_METER_SLOTS //#define SHOW_METER_SLOTS
class LogPlay : public QObject,public RDLogEvent class RDLogPlay : public QObject,public RDLogEvent
{ {
Q_OBJECT Q_OBJECT
public: public:
LogPlay(int id,QSocketDevice *nn_sock,QString logname, RDLogPlay(int id,RDEventPlayer *player,QSocketDevice *nn_sock,QString logname,
std::vector<RLMHost *> *rlm_hosts,QObject *parent=0); std::vector<RDRLMHost *> *rlm_hosts,QObject *parent=0);
QString serviceName() const; QString serviceName() const;
void setServiceName(const QString &svcname); void setServiceName(const QString &svcname);
QString defaultServiceName() const; QString defaultServiceName() const;
@ -194,6 +193,9 @@ class LogPlay : public QObject,public RDLogEvent
RDLogLine::TransType GetTransType(const QString &logname,int line); RDLogLine::TransType GetTransType(const QString &logname,int line);
bool ClearBlock(int start_line); bool ClearBlock(int start_line);
void SendNowNext(); void SendNowNext();
void LogTraffic(const QString &svcname,const QString &logname,
RDLogLine *logline,RDLogLine::PlaySource src,
RDAirPlayConf::TrafficAction action,bool onair_flag) const;
RDCae *play_cae; RDCae *play_cae;
RDAirPlayConf::OpMode play_op_mode; RDAirPlayConf::OpMode play_op_mode;
int play_slot_id[LOGPLAY_MAX_PLAYS]; int play_slot_id[LOGPLAY_MAX_PLAYS];
@ -240,7 +242,7 @@ class LogPlay : public QObject,public RDLogEvent
bool play_onair_flag; bool play_onair_flag;
int play_duck_volume_port1; int play_duck_volume_port1;
int play_duck_volume_port2; int play_duck_volume_port2;
std::vector<RLMHost *> *play_rlm_hosts; std::vector<RDRLMHost *> *play_rlm_hosts;
unsigned play_now_cartnum; unsigned play_now_cartnum;
unsigned play_next_cartnum; unsigned play_next_cartnum;
unsigned play_prevnow_cartnum; unsigned play_prevnow_cartnum;
@ -249,7 +251,8 @@ class LogPlay : public QObject,public RDLogEvent
int play_audition_line; int play_audition_line;
bool play_audition_head_played; bool play_audition_head_played;
int play_audition_preroll; int play_audition_preroll;
RDEventPlayer *play_event_player;
}; };
#endif #endif // RDLOGPLAY_H

View File

@ -1,4 +1,4 @@
// rlmhost.cpp // rdrlmhost.cpp
// //
// A container class for a Rivendell Loadable Module host. // A container class for a Rivendell Loadable Module host.
// //
@ -21,18 +21,20 @@
#include <dlfcn.h> #include <dlfcn.h>
#include <iostream> #include <iostream>
#include <rdapplication.h> #include <qsignalmapper.h>
#include <rdconf.h>
#include <rddatedecode.h>
#include <rdnownext.h>
#include <rdprofile.h>
#include <rdsvc.h>
#include "globals.h" #include "rdapplication.h"
#include "rlmhost.h" #include "rdconf.h"
#include "rddatedecode.h"
#include "rdnownext.h"
#include "rdprofile.h"
#include "rdrlmhost.h"
#include "rdsvc.h"
//#include "globals.h"
RLMHost::RLMHost(const QString &path,const QString &arg, RDRLMHost::RDRLMHost(const QString &path,const QString &arg,
QSocketDevice *udp_socket,QObject *parent) QSocketDevice *udp_socket,QObject *parent)
: QObject(parent) : QObject(parent)
{ {
@ -59,24 +61,24 @@ RLMHost::RLMHost(const QString &path,const QString &arg,
} }
RLMHost::~RLMHost() RDRLMHost::~RDRLMHost()
{ {
} }
QString RLMHost::pluginPath() const QString RDRLMHost::pluginPath() const
{ {
return plugin_path; return plugin_path;
} }
QString RLMHost::pluginArg() const QString RDRLMHost::pluginArg() const
{ {
return plugin_arg; return plugin_arg;
} }
void RLMHost::sendEvent(const QString &svcname,const QString &logname, void RDRLMHost::sendEvent(const QString &svcname,const QString &logname,
int lognum,RDLogLine **loglines,bool onair, int lognum,RDLogLine **loglines,bool onair,
RDAirPlayConf::OpMode mode) RDAirPlayConf::OpMode mode)
{ {
@ -112,8 +114,8 @@ void RLMHost::sendEvent(const QString &svcname,const QString &logname,
log->log_mach=lognum; log->log_mach=lognum;
log->log_onair=onair; log->log_onair=onair;
log->log_mode=mode; log->log_mode=mode;
RLMHost::loadMetadata(loglines[0],now,now_dt); RDRLMHost::loadMetadata(loglines[0],now,now_dt);
RLMHost::loadMetadata(loglines[1],next); RDRLMHost::loadMetadata(loglines[1],next);
plugin_pad_data_sent_sym(this,svc,log,now,next); plugin_pad_data_sent_sym(this,svc,log,now,next);
delete next; delete next;
delete now; delete now;
@ -123,7 +125,7 @@ void RLMHost::sendEvent(const QString &svcname,const QString &logname,
} }
bool RLMHost::load() bool RDRLMHost::load()
{ {
QString basename=RDGetBasePart(plugin_path); QString basename=RDGetBasePart(plugin_path);
basename=basename.left(basename.findRev(".")); basename=basename.left(basename.findRev("."));
@ -146,7 +148,7 @@ bool RLMHost::load()
} }
void RLMHost::unload() void RDRLMHost::unload()
{ {
if(plugin_free_sym!=NULL) { if(plugin_free_sym!=NULL) {
plugin_free_sym(this); plugin_free_sym(this);
@ -154,7 +156,7 @@ void RLMHost::unload()
} }
void RLMHost::loadMetadata(const RDLogLine *logline,struct rlm_pad *pad, void RDRLMHost::loadMetadata(const RDLogLine *logline,struct rlm_pad *pad,
const QDateTime &start_datetime) const QDateTime &start_datetime)
{ {
QDateTime now(QDate::currentDate(),QTime::currentTime()); QDateTime now(QDate::currentDate(),QTime::currentTime());
@ -284,7 +286,7 @@ void RLMHost::loadMetadata(const RDLogLine *logline,struct rlm_pad *pad,
} }
void RLMHost::saveMetadata(const struct rlm_pad *pad,RDLogLine *logline) void RDRLMHost::saveMetadata(const struct rlm_pad *pad,RDLogLine *logline)
{ {
if(logline==NULL) { if(logline==NULL) {
return; return;
@ -325,7 +327,7 @@ void RLMHost::saveMetadata(const struct rlm_pad *pad,RDLogLine *logline)
} }
void RLMHost::timerData(int timernum) void RDRLMHost::timerData(int timernum)
{ {
if(plugin_timer_expired_sym!=NULL) { if(plugin_timer_expired_sym!=NULL) {
plugin_timer_expired_sym(this,timernum); plugin_timer_expired_sym(this,timernum);
@ -333,7 +335,7 @@ void RLMHost::timerData(int timernum)
} }
void RLMHost::ttyReceiveReadyData(int fd) void RDRLMHost::ttyReceiveReadyData(int fd)
{ {
char data[1024]; char data[1024];
int n; int n;
@ -358,7 +360,7 @@ void RLMHost::ttyReceiveReadyData(int fd)
void RLMSendUdp(void *ptr,const char *ipaddr,uint16_t port, void RLMSendUdp(void *ptr,const char *ipaddr,uint16_t port,
const char *data,int len) const char *data,int len)
{ {
RLMHost *host=(RLMHost *)ptr; RDRLMHost *host=(RDRLMHost *)ptr;
QHostAddress addr; QHostAddress addr;
addr.setAddress(ipaddr); addr.setAddress(ipaddr);
if(!addr.isNull()) { if(!addr.isNull()) {
@ -370,7 +372,7 @@ void RLMSendUdp(void *ptr,const char *ipaddr,uint16_t port,
int RLMOpenSerial(void *ptr,const char *port,int speed,int parity, int RLMOpenSerial(void *ptr,const char *port,int speed,int parity,
int word_length) int word_length)
{ {
RLMHost *host=(RLMHost *)ptr; RDRLMHost *host=(RDRLMHost *)ptr;
host->plugin_tty_devices.push_back(new RDTTYDevice); host->plugin_tty_devices.push_back(new RDTTYDevice);
host->plugin_tty_devices.back()->setName(port); host->plugin_tty_devices.back()->setName(port);
host->plugin_tty_devices.back()->setSpeed(speed); host->plugin_tty_devices.back()->setSpeed(speed);
@ -391,7 +393,7 @@ int RLMOpenSerial(void *ptr,const char *port,int speed,int parity,
void RLMSendSerial(void *ptr,int handle,const char *data,int len) void RLMSendSerial(void *ptr,int handle,const char *data,int len)
{ {
RLMHost *host=(RLMHost *)ptr; RDRLMHost *host=(RDRLMHost *)ptr;
if((handle<0)||(handle>=(int)host->plugin_tty_devices.size())) { if((handle<0)||(handle>=(int)host->plugin_tty_devices.size())) {
return; return;
} }
@ -401,7 +403,7 @@ void RLMSendSerial(void *ptr,int handle,const char *data,int len)
void RLMCloseSerial(void *ptr,int handle) void RLMCloseSerial(void *ptr,int handle)
{ {
RLMHost *host=(RLMHost *)ptr; RDRLMHost *host=(RDRLMHost *)ptr;
// //
// FIXME: We really ought to take out the trash here! // FIXME: We really ought to take out the trash here!
@ -414,7 +416,7 @@ void RLMCloseSerial(void *ptr,int handle)
const char *RLMDateTime(void *ptr,int offset_msecs,const char *format) const char *RLMDateTime(void *ptr,int offset_msecs,const char *format)
{ {
RLMHost *host=(RLMHost *)ptr; RDRLMHost *host=(RDRLMHost *)ptr;
QDateTime datetime=QDateTime(QDate::currentDate(),QTime::currentTime(). QDateTime datetime=QDateTime(QDate::currentDate(),QTime::currentTime().
addMSecs(offset_msecs)); addMSecs(offset_msecs));
strncpy(host->plugin_value_string,datetime.toString(format),1024); strncpy(host->plugin_value_string,datetime.toString(format),1024);
@ -426,14 +428,14 @@ const char *RLMResolveNowNextEncoded(void *ptr,const struct rlm_pad *now,
const struct rlm_pad *next, const struct rlm_pad *next,
const char *format,int encoding) const char *format,int encoding)
{ {
RLMHost *host=(RLMHost *)ptr; RDRLMHost *host=(RDRLMHost *)ptr;
RDLogLine *loglines[2]; RDLogLine *loglines[2];
QString str=format; QString str=format;
loglines[0]=new RDLogLine(); loglines[0]=new RDLogLine();
loglines[1]=new RDLogLine(); loglines[1]=new RDLogLine();
RLMHost::saveMetadata(now,loglines[0]); RDRLMHost::saveMetadata(now,loglines[0]);
RLMHost::saveMetadata(next,loglines[1]); RDRLMHost::saveMetadata(next,loglines[1]);
RDResolveNowNext(&str,loglines,encoding); RDResolveNowNext(&str,loglines,encoding);
strncpy(host->plugin_value_string,str,1024); strncpy(host->plugin_value_string,str,1024);
delete loglines[1]; delete loglines[1];
@ -452,13 +454,13 @@ const char *RLMResolveNowNext(void *ptr,const struct rlm_pad *now,
void RLMLog(void *ptr,int prio,const char *msg) void RLMLog(void *ptr,int prio,const char *msg)
{ {
LogLine((RDConfig::LogPriority)prio,msg); rda->config()->log("log machine",(RDConfig::LogPriority)prio,msg);
} }
void RLMStartTimer(void *ptr,int timernum,int msecs,int mode) void RLMStartTimer(void *ptr,int timernum,int msecs,int mode)
{ {
RLMHost *host=(RLMHost *)ptr; RDRLMHost *host=(RDRLMHost *)ptr;
if((timernum<0)||(timernum>=RLM_MAX_TIMERS)) { if((timernum<0)||(timernum>=RLM_MAX_TIMERS)) {
return; return;
} }
@ -471,7 +473,7 @@ void RLMStartTimer(void *ptr,int timernum,int msecs,int mode)
void RLMStopTimer(void *ptr,int timernum) void RLMStopTimer(void *ptr,int timernum)
{ {
RLMHost *host=(RLMHost *)ptr; RDRLMHost *host=(RDRLMHost *)ptr;
if((timernum<0)||(timernum>=RLM_MAX_TIMERS)) { if((timernum<0)||(timernum>=RLM_MAX_TIMERS)) {
return; return;
} }
@ -518,7 +520,7 @@ const char *RLMGetStringValue(void *ptr,const char *filename,
const char *section,const char *label, const char *section,const char *label,
const char *default_value) const char *default_value)
{ {
RLMHost *host=(RLMHost *)ptr; RDRLMHost *host=(RDRLMHost *)ptr;
RDProfile *p=new RDProfile(); RDProfile *p=new RDProfile();
p->setSource(filename); p->setSource(filename);
strncpy(host->plugin_value_string, strncpy(host->plugin_value_string,

View File

@ -1,8 +1,8 @@
// rlmhost.h // rdrlmhost.h
// //
// A container class for a Rivendell Loadable Module host. // A container class for a Rivendell Loadable Module host.
// //
// (C) Copyright 2008,2016-2017 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2008,2016-2018 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License version 2 as
@ -18,8 +18,8 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
// //
#ifndef RLMHOST_H #ifndef RDRLMHOST_H
#define RLMHOST_H #define RDRLMHOST_H
#include <vector> #include <vector>
@ -35,13 +35,13 @@
#include "../rlm/rlm.h" #include "../rlm/rlm.h"
class RLMHost : public QObject class RDRLMHost : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
RLMHost(const QString &path,const QString &arg,QSocketDevice *udp_socket, RDRLMHost(const QString &path,const QString &arg,QSocketDevice *udp_socket,
QObject *parent=0); QObject *parent=0);
~RLMHost(); ~RDRLMHost();
QString pluginPath() const; QString pluginPath() const;
QString pluginArg() const; QString pluginArg() const;
void sendEvent(const QString &svcname,const QString &logname, void sendEvent(const QString &svcname,const QString &logname,
@ -102,4 +102,4 @@ class RLMHost : public QObject
}; };
#endif // RLMHOST_H #endif // RDRLMHOST_H

View File

@ -50,15 +50,11 @@ dist_rdairplay_SOURCES = button_log.cpp button_log.h\
list_log.cpp list_log.h\ list_log.cpp list_log.h\
list_logs.cpp list_logs.h\ list_logs.cpp list_logs.h\
local_macros.cpp colors.h\ local_macros.cpp colors.h\
log_play.cpp log_play.h\
log_traffic.cpp log_traffic.h\
loglinebox.cpp loglinebox.h\ loglinebox.cpp loglinebox.h\
mode_display.cpp mode_display.h\ mode_display.cpp mode_display.h\
nownext.cpp\
pie_counter.cpp pie_counter.h\ pie_counter.cpp pie_counter.h\
post_counter.cpp post_counter.h\ post_counter.cpp post_counter.h\
rdairplay.cpp rdairplay.h\ rdairplay.cpp rdairplay.h\
rlmhost.cpp rlmhost.h\
start_button.cpp start_button.h\ start_button.cpp start_button.h\
stop_counter.cpp stop_counter.h\ stop_counter.cpp stop_counter.h\
wall_clock.cpp wall_clock.h wall_clock.cpp wall_clock.h
@ -70,13 +66,11 @@ nodist_rdairplay_SOURCES = moc_button_log.cpp\
moc_lib_listview.cpp\ moc_lib_listview.cpp\
moc_list_log.cpp\ moc_list_log.cpp\
moc_list_logs.cpp\ moc_list_logs.cpp\
moc_log_play.cpp\
moc_loglinebox.cpp\ moc_loglinebox.cpp\
moc_mode_display.cpp\ moc_mode_display.cpp\
moc_pie_counter.cpp\ moc_pie_counter.cpp\
moc_post_counter.cpp\ moc_post_counter.cpp\
moc_rdairplay.cpp\ moc_rdairplay.cpp\
moc_rlmhost.cpp\
moc_start_button.cpp\ moc_start_button.cpp\
moc_stop_counter.cpp\ moc_stop_counter.cpp\
moc_wall_clock.cpp moc_wall_clock.cpp

View File

@ -29,7 +29,7 @@
#include "colors.h" #include "colors.h"
#include "globals.h" #include "globals.h"
ButtonLog::ButtonLog(LogPlay *log,RDCae *cae,int id,RDAirPlayConf *conf, ButtonLog::ButtonLog(RDLogPlay *log,RDCae *cae,int id,RDAirPlayConf *conf,
bool allow_pause,QWidget *parent) bool allow_pause,QWidget *parent)
: QWidget(parent) : QWidget(parent)
{ {

View File

@ -3,7 +3,7 @@
// //
// The button play widget for RDAirPlay. // The button play widget for RDAirPlay.
// //
// (C) Copyright 2002-2004,2016 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2004,2016-2018 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License version 2 as
@ -32,12 +32,12 @@
#include <rdairplay_conf.h> #include <rdairplay_conf.h>
#include <rdairplay_conf.h> #include <rdairplay_conf.h>
#include <log_play.h> #include <rdlogplay.h>
#include <list_log.h>
#include <edit_event.h> #include "edit_event.h"
#include <start_button.h> #include "list_log.h"
#include <loglinebox.h> #include "loglinebox.h"
#include <edit_event.h> #include "start_button.h"
// //
// Widget Settings // Widget Settings
@ -50,7 +50,7 @@ class ButtonLog : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
ButtonLog(LogPlay *log,RDCae *cae,int id,RDAirPlayConf *conf, ButtonLog(RDLogPlay *log,RDCae *cae,int id,RDAirPlayConf *conf,
bool allow_pause=false,QWidget *parent=0); bool allow_pause=false,QWidget *parent=0);
QSize sizeHint() const; QSize sizeHint() const;
QSizePolicy sizePolicy() const; QSizePolicy sizePolicy() const;
@ -82,7 +82,7 @@ class ButtonLog : public QWidget
private: private:
void UpdateEvents(); void UpdateEvents();
void UpdateButtons(); void UpdateButtons();
LogPlay *log_log; RDLogPlay *log_log;
int log_id; int log_id;
int *log_cart; int *log_cart;
RDAirPlayConf::OpMode log_op_mode; RDAirPlayConf::OpMode log_op_mode;

View File

@ -29,7 +29,7 @@
#include "edit_event.h" #include "edit_event.h"
#include "globals.h" #include "globals.h"
EditEvent::EditEvent(LogPlay *log,RDCae *cae,QWidget *parent) EditEvent::EditEvent(RDLogPlay *log,RDCae *cae,QWidget *parent)
: QDialog(parent,"",true) : QDialog(parent,"",true)
{ {
edit_log=log; edit_log=log;

View File

@ -2,7 +2,7 @@
// //
// Event Editor for RDAirPlay // Event Editor for RDAirPlay
// //
// (C) Copyright 2002-2004,2016 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2004,2016-2018 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License version 2 as
@ -32,22 +32,21 @@
#include <qtextedit.h> #include <qtextedit.h>
#include <qtimer.h> #include <qtimer.h>
#include <rdtransportbutton.h>
#include <rdslider.h>
#include <rdcae.h> #include <rdcae.h>
#include <rdplay_deck.h>
#include <rdmarker_edit.h>
#include <rdpushbutton.h>
#include <rdtimeedit.h>
#include <rdcueedit.h> #include <rdcueedit.h>
#include <rdlogplay.h>
#include <log_play.h> #include <rdmarker_edit.h>
#include <rdplay_deck.h>
#include <rdpushbutton.h>
#include <rdslider.h>
#include <rdtimeedit.h>
#include <rdtransportbutton.h>
class EditEvent : public QDialog class EditEvent : public QDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
EditEvent(LogPlay *log,RDCae *cae,QWidget *parent=0); EditEvent(RDLogPlay *log,RDCae *cae,QWidget *parent=0);
~EditEvent(); ~EditEvent();
QSize sizeHint() const; QSize sizeHint() const;
QSizePolicy sizePolicy() const; QSizePolicy sizePolicy() const;
@ -67,7 +66,7 @@ class EditEvent : public QDialog
void closeEvent(QCloseEvent *e); void closeEvent(QCloseEvent *e);
private: private:
LogPlay *edit_log; RDLogPlay *edit_log;
RDLogLine *edit_logline; RDLogLine *edit_logline;
int edit_line; int edit_line;
RDTimeEdit *edit_time_edit; RDTimeEdit *edit_time_edit;

View File

@ -2,7 +2,7 @@
// //
// Hour Selector widget for RDAirPlay // Hour Selector widget for RDAirPlay
// //
// (C) Copyright 2012,2016 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2012,2016-2018 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License version 2 as

View File

@ -2,7 +2,7 @@
// //
// Hour Selector widget for RDAirPlay // Hour Selector widget for RDAirPlay
// //
// (C) Copyright 2012,2016 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2012,2016-2018 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License version 2 as
@ -28,8 +28,7 @@
#include <rdairplay_conf.h> #include <rdairplay_conf.h>
#include <rdlistview.h> #include <rdlistview.h>
#include <rdlistviewitem.h> #include <rdlistviewitem.h>
#include <rdlogplay.h>
#include <log_play.h>
class HourSelector : public QWidget class HourSelector : public QWidget
{ {

View File

@ -46,7 +46,7 @@
#include "../icons/music.xpm" #include "../icons/music.xpm"
ListLog::ListLog(LogPlay *log,RDCae *cae,int id,bool allow_pause, ListLog::ListLog(RDLogPlay *log,RDCae *cae,int id,bool allow_pause,
QWidget *parent) QWidget *parent)
: QWidget(parent) : QWidget(parent)
{ {

View File

@ -2,7 +2,7 @@
// //
// The full log list widget for RDAirPlay. // The full log list widget for RDAirPlay.
// //
// (C) Copyright 2002-2003,2016 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2003,2016-2018 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License version 2 as
@ -27,15 +27,15 @@
#include <qpixmap.h> #include <qpixmap.h>
#include <qpushbutton.h> #include <qpushbutton.h>
#include <rdairplay_conf.h>
#include <rdlistview.h> #include <rdlistview.h>
#include <rdlistviewitem.h> #include <rdlistviewitem.h>
#include <rdairplay_conf.h> #include <rdlogplay.h>
#include <lib_listview.h> #include "edit_event.h"
#include <list_logs.h> #include "hourselector.h"
#include <log_play.h> #include "lib_listview.h"
#include <edit_event.h> #include "list_logs.h"
#include <hourselector.h>
#define END_MARKER_ID -2 #define END_MARKER_ID -2
@ -43,7 +43,7 @@ class ListLog : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
ListLog(LogPlay *log,RDCae *cae,int id,bool allow_pause=false, ListLog(RDLogPlay *log,RDCae *cae,int id,bool allow_pause=false,
QWidget *parent=0); QWidget *parent=0);
QSize sizeHint() const; QSize sizeHint() const;
QSizePolicy sizePolicy() const; QSizePolicy sizePolicy() const;
@ -111,7 +111,7 @@ class ListLog : public QWidget
int PredictedStartHour(RDListViewItem *item); int PredictedStartHour(RDListViewItem *item);
HourSelector *list_hour_selector; HourSelector *list_hour_selector;
LibListView *list_log_list; LibListView *list_log_list;
LogPlay *list_log; RDLogPlay *list_log;
ListLogs *list_logs_dialog; ListLogs *list_logs_dialog;
RDAirPlayConf::ActionMode list_action_mode; RDAirPlayConf::ActionMode list_action_mode;
ListLog::PlayButtonMode list_playbutton_mode; ListLog::PlayButtonMode list_playbutton_mode;

View File

@ -29,7 +29,7 @@
#include "globals.h" #include "globals.h"
#include "list_logs.h" #include "list_logs.h"
ListLogs::ListLogs(LogPlay *log,QWidget *parent) ListLogs::ListLogs(RDLogPlay *log,QWidget *parent)
: QDialog(parent,"",true) : QDialog(parent,"",true)
{ {
// //

View File

@ -2,7 +2,7 @@
// //
// Select a Rivendell Log // Select a Rivendell Log
// //
// (C) Copyright 2002-2004,2016 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2004,2016-2018 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License version 2 as
@ -28,8 +28,7 @@
#include <rdlogfilter.h> #include <rdlogfilter.h>
#include <rdloglock.h> #include <rdloglock.h>
#include <rdlogplay.h>
#include <log_play.h>
class ListLogs : public QDialog class ListLogs : public QDialog
{ {
@ -37,7 +36,7 @@ class ListLogs : public QDialog
public: public:
enum Operation {Load=0,Cancel=1,Save=2,SaveAs=3,Unload=4}; enum Operation {Load=0,Cancel=1,Save=2,SaveAs=3,Unload=4};
ListLogs(LogPlay *log,QWidget *parent=0); ListLogs(RDLogPlay *log,QWidget *parent=0);
QSize sizeHint() const; QSize sizeHint() const;
QSizePolicy sizePolicy() const; QSizePolicy sizePolicy() const;
@ -69,9 +68,9 @@ class ListLogs : public QDialog
QPushButton *list_save_button; QPushButton *list_save_button;
QPushButton *list_saveas_button; QPushButton *list_saveas_button;
QPushButton *list_cancel_button; QPushButton *list_cancel_button;
LogPlay *list_log; RDLogPlay *list_log;
RDLogLock **list_log_lock; RDLogLock **list_log_lock;
}; };
#endif #endif // LIST_LOGS_H

View File

@ -1,91 +0,0 @@
// log_traffic.cpp
//
// Add an entry to the reconciliation table.
//
// (C) Copyright 2002-2016-2018 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
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#include <rdapplication.h>
#include <rdconf.h>
#include <rddb.h>
#include <rdescape_string.h>
#include <rdsvc.h>
#include "globals.h"
#include "log_traffic.h"
void LogTraffic(const QString &svcname,const QString &logname,
RDLogLine *logline,RDLogLine::PlaySource src,
RDAirPlayConf::TrafficAction action,bool onair_flag)
{
QString sql;
RDSqlQuery *q;
QDateTime datetime=QDateTime(QDate::currentDate(),QTime::currentTime());
int length=logline->startTime(RDLogLine::Actual).msecsTo(datetime.time());
if(length<0) { // Event crossed midnight!
length+=86400000;
datetime.setDate(datetime.date().addDays(-1));
}
if((logline==NULL)||(svcname.isEmpty())) {
return;
}
QString eventDateTimeSQL = "NULL";
if(datetime.isValid() && logline->startTime(RDLogLine::Actual).isValid())
eventDateTimeSQL = RDCheckDateTime(QDateTime(datetime.date(),
logline->startTime(RDLogLine::Actual)), "yyyy-MM-dd hh:mm:ss");
sql=QString("insert into `")+RDSvc::svcTableName(svcname)+"` set "+
QString().sprintf("LENGTH=%d,",length)+
"LOG_NAME=\""+RDEscapeString(logname.utf8())+"\","+
QString().sprintf("LOG_ID=%d,",logline->id())+
QString().sprintf("CART_NUMBER=%u,",logline->cartNumber())+
"STATION_NAME=\""+RDEscapeString(rda->station()->name().utf8())+"\","+
"EVENT_DATETIME="+eventDateTimeSQL+","+
QString().sprintf("EVENT_TYPE=%d,",action)+
QString().sprintf("EVENT_SOURCE=%d,",logline->source())+
"EXT_START_TIME="+RDCheckDateTime(logline->extStartTime(),"hh:mm:ss")+","+
QString().sprintf("EXT_LENGTH=%d,",logline->extLength())+
"EXT_DATA=\""+RDEscapeString(logline->extData())+"\","+
"EXT_EVENT_ID=\""+RDEscapeString(logline->extEventId())+"\","+
"EXT_ANNC_TYPE=\""+RDEscapeString(logline->extAnncType())+"\","+
QString().sprintf("PLAY_SOURCE=%d,",src)+
QString().sprintf("CUT_NUMBER=%d,",logline->cutNumber())+
"EXT_CART_NAME=\""+RDEscapeString(logline->extCartName().utf8())+"\","+
"TITLE=\""+RDEscapeString(logline->title().utf8())+"\","+
"ARTIST=\""+RDEscapeString(logline->artist().utf8())+"\","+
"SCHEDULED_TIME="+RDCheckDateTime(logline->startTime(RDLogLine::Logged),
"hh:mm:ss")+","+
"ISRC=\""+RDEscapeString(logline->isrc().utf8())+"\","+
"PUBLISHER=\""+RDEscapeString(logline->publisher().utf8())+"\","+
"COMPOSER=\""+RDEscapeString(logline->composer().utf8())+"\","+
QString().sprintf("USAGE_CODE=%d,",logline->usageCode())+
QString().sprintf("START_SOURCE=%d,",logline->startSource())+
"ONAIR_FLAG=\""+RDYesNo(onair_flag)+"\","+
"ALBUM=\""+RDEscapeString(logline->album().utf8())+"\","+
"LABEL=\""+RDEscapeString(logline->label().utf8())+"\","+
"USER_DEFINED=\""+RDEscapeString(logline->userDefined().utf8())+"\","+
"CONDUCTOR=\""+RDEscapeString(logline->conductor().utf8())+"\","+
"SONG_ID=\""+RDEscapeString(logline->songId().utf8())+"\","+
"DESCRIPTION=\""+RDEscapeString(logline->description().utf8())+"\","+
"OUTCUE=\""+RDEscapeString(logline->outcue().utf8())+"\","+
"ISCI=\""+RDEscapeString(logline->isci().utf8())+"\"";
q=new RDSqlQuery(sql);
delete q;
}

View File

@ -1,32 +0,0 @@
// log_traffic.h
//
// Add an entry to the reconciliation table.
//
// (C) Copyright 2002-2004,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
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#ifndef LOG_TRAFFIC_H
#define LOG_TRAFFIC_H
#include <rdlog_line.h>
#include <rdairplay_conf.h>
void LogTraffic(const QString &svcname,const QString &logname,
RDLogLine *logline,RDLogLine::PlaySource src,
RDAirPlayConf::TrafficAction action,bool onair_flag);
#endif // LOG_TRAFFIC_H

View File

@ -1,140 +0,0 @@
// nownext.cpp
//
// Rivendell Now & Next Implementation
//
// (C) Copyright 2002-2008,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
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#include <rdescape_string.h>
#include <rdnownext.h>
#include <globals.h>
#include <log_play.h>
#include <rdairplay.h>
void LogPlay::SendNowNext()
{
QTime end_time;
QTime time;
int now_line=-1;
RDLogLine *logline[2];
RDLogLine *ll;
RDLogLine *default_now_logline=NULL;
RDLogLine *default_next_logline=NULL;
//
// Get NOW PLAYING Event
//
if(play_nownext_address.isNull()&&play_nownext_rml.isEmpty()&&
(play_rlm_hosts->size()==0)) {
return;
}
QString cmd=play_nownext_string;
int lines[TRANSPORT_QUANTITY];
int running=runningEvents(lines,false);
for(int i=0;i<running;i++) {
if((time=logLine(lines[i])->startTime(RDLogLine::Actual).
addMSecs(logLine(lines[i])->effectiveLength()))>end_time) {
end_time=time;
now_line=lines[i];
}
}
if((now_line>=0)&&(logLine(now_line)->nowNextEnabled())) {
logline[0]=logLine(now_line);
}
else {
if(play_now_cartnum==0) {
logline[0]=NULL;
}
else {
default_now_logline=new RDLogLine(play_now_cartnum);
logline[0]=default_now_logline;
}
}
//
// Get NEXT Event
//
logline[1]=NULL;
for(int i=nextLine();i<size();i++) {
if((ll=logLine(i))!=NULL) {
if((ll->status()==RDLogLine::Scheduled)&&
logLine(i)->nowNextEnabled()&&(!logLine(i)->asyncronous())) {
logline[1]=logLine(i);
i=size();
}
}
}
if((logline[1]==NULL)&&(play_next_cartnum!=0)) {
default_next_logline=new RDLogLine(play_next_cartnum);
logline[1]=default_next_logline;
}
//
// Process and Send It
//
unsigned nowcart=0;
unsigned nextcart=0;
if(logline[0]!=NULL) {
if(!logline[0]->asyncronous()) {
nowcart=logline[0]->cartNumber();
}
}
if(logline[1]!=NULL) {
nextcart=logline[1]->cartNumber();
}
if((nowcart==play_prevnow_cartnum)&&(nextcart==play_prevnext_cartnum)) {
return;
}
if(logline[0]==NULL) {
play_prevnow_cartnum=0;
}
else {
play_prevnow_cartnum=logline[0]->cartNumber();
}
if(logline[1]==NULL) {
play_prevnext_cartnum=0;
}
else {
play_prevnext_cartnum=logline[1]->cartNumber();
}
QString svcname=play_svc_name;
if(svcname.isEmpty()) {
svcname=play_defaultsvc_name;
}
for(unsigned i=0;i<play_rlm_hosts->size();i++) {
play_rlm_hosts->at(i)->
sendEvent(svcname,logName().left(logName().length()-4),play_id,logline,
play_onair_flag,play_op_mode);
}
RDResolveNowNext(&cmd,logline,0);
play_nownext_socket->
writeBlock(cmd,cmd.length(),play_nownext_address,play_nownext_port);
cmd=play_nownext_rml;
RDResolveNowNext(&cmd,logline,0);
rdevent_player->exec(cmd);
//
// Clean up
//
if(default_now_logline!=NULL) {
delete default_now_logline;
}
if(default_next_logline!=NULL) {
delete default_next_logline;
}
}

View File

@ -346,7 +346,8 @@ MainWidget::MainWidget(QWidget *parent)
connect(rename_mapper,SIGNAL(mapped(int)),this,SLOT(logRenamedData(int))); connect(rename_mapper,SIGNAL(mapped(int)),this,SLOT(logRenamedData(int)));
QString default_svcname=rda->airplayConf()->defaultSvc(); QString default_svcname=rda->airplayConf()->defaultSvc();
for(int i=0;i<RDAIRPLAY_LOG_QUANTITY;i++) { for(int i=0;i<RDAIRPLAY_LOG_QUANTITY;i++) {
air_log[i]=new LogPlay(i,air_nownext_socket,"",&air_plugin_hosts); air_log[i]=new RDLogPlay(i,rdevent_player,air_nownext_socket,"",
&air_plugin_hosts);
air_log[i]->setDefaultServiceName(default_svcname); air_log[i]->setDefaultServiceName(default_svcname);
air_log[i]->setNowCart(rda->airplayConf()->logNowCart(i)); air_log[i]->setNowCart(rda->airplayConf()->logNowCart(i));
air_log[i]->setNextCart(rda->airplayConf()->logNextCart(i)); air_log[i]->setNextCart(rda->airplayConf()->logNextCart(i));
@ -854,8 +855,8 @@ MainWidget::MainWidget(QWidget *parent)
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
while(q->next()) { while(q->next()) {
air_plugin_hosts. air_plugin_hosts.
push_back(new RLMHost(q->value(0).toString(),q->value(1).toString(), push_back(new RDRLMHost(q->value(0).toString(),q->value(1).toString(),
air_nownext_socket,this)); air_nownext_socket,this));
LogLine(RDConfig::LogInfo,QString(). LogLine(RDConfig::LogInfo,QString().
sprintf("Loading RLM \"%s\"", sprintf("Loading RLM \"%s\"",
(const char *)q->value(0).toString())); (const char *)q->value(0).toString()));

View File

@ -37,32 +37,32 @@
#include <qsplashscreen.h> #include <qsplashscreen.h>
#include <qfontmetrics.h> #include <qfontmetrics.h>
#include <rdpushbutton.h>
#include <rdstereometer.h>
#include <rdlabel.h>
#include <rdinstancelock.h>
#include <rduser.h>
#include <rdripc.h>
#include <rdplay_deck.h>
#include <rdmacro.h>
#include <rdconfig.h>
#include <rd.h> #include <rd.h>
#include <rdttydevice.h>
#include <rdemptycart.h> #include <rdemptycart.h>
#include <log_play.h>
#include <loglinebox.h>
#include <post_counter.h>
#include <pie_counter.h>
#include <stop_counter.h>
#include <mode_display.h>
#include <start_button.h>
#include <list_log.h>
#include <button_log.h>
#include <colors.h>
#include <rdsound_panel.h>
#include <rdhotkeylist.h> #include <rdhotkeylist.h>
#include <rdhotkeys.h> #include <rdhotkeys.h>
#include <rdinstancelock.h>
#include <rdlabel.h>
#include <rdlogplay.h>
#include <rdmacro.h>
#include <rdplay_deck.h>
#include <rdpushbutton.h>
#include <rdripc.h>
#include <rdrlmhost.h>
#include <rdsound_panel.h>
#include <rdstereometer.h>
#include <rdttydevice.h>
#include <rduser.h>
#include "button_log.h"
#include "colors.h"
#include "list_log.h"
#include "loglinebox.h"
#include "mode_display.h"
#include "post_counter.h"
#include "pie_counter.h"
#include "stop_counter.h"
#include "start_button.h"
// //
// Debug Settings // Debug Settings
@ -145,7 +145,7 @@ class MainWidget : public QWidget
bool AssertChannelLock(int dir,int achan); bool AssertChannelLock(int dir,int achan);
int AudioChannel(int card,int port) const; int AudioChannel(int card,int port) const;
RDAirPlayConf::Channel PanelChannel(int mport) const; RDAirPlayConf::Channel PanelChannel(int mport) const;
LogPlay *air_log[RDAIRPLAY_LOG_QUANTITY]; RDLogPlay *air_log[RDAIRPLAY_LOG_QUANTITY];
RDSoundPanel *air_panel; RDSoundPanel *air_panel;
PostCounter *air_post_counter; PostCounter *air_post_counter;
PieCounter *air_pie_counter; PieCounter *air_pie_counter;
@ -199,7 +199,7 @@ class MainWidget : public QWidget
QPixmap *air_refresh_pixmap; QPixmap *air_refresh_pixmap;
QString air_editor_cmd; QString air_editor_cmd;
QSocketDevice *air_nownext_socket; QSocketDevice *air_nownext_socket;
std::vector<RLMHost *> air_plugin_hosts; std::vector<RDRLMHost *> air_plugin_hosts;
QSplashScreen *air_splash_screen; QSplashScreen *air_splash_screen;
int keystrokecount; int keystrokecount;
bool AltKeyHit ; bool AltKeyHit ;