2018-01-30 Fred Gleason <fredg@paravelsystems.com>

* Added an 'RDApplication'class.
	* Converted rdlibrary(1) to use RDApplication.
This commit is contained in:
Fred Gleason
2018-01-30 03:57:04 -05:00
parent 4d061877fd
commit f692a3ac0d
42 changed files with 633 additions and 326 deletions

View File

@@ -2,7 +2,7 @@
//
// The Library Utility for Rivendell.
//
// (C) Copyright 2002-2010,2016 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2010,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
@@ -39,46 +39,37 @@
#include <qtooltip.h>
#include <curl/curl.h>
#include <dbversion.h>
#include <rd.h>
#include <rddb.h>
#include <rdconf.h>
#include <rduser.h>
#include <rdripc.h>
#include <rdmixer.h>
#include <rdadd_cart.h>
#include <rdprofile.h>
#include <rdapplication.h>
#include <rdaudio_port.h>
#include <rdcart_search_text.h>
#include <rdcheck_daemons.h>
#include <rdtextvalidator.h>
#include <rdcmd_switch.cpp>
#include <rdconf.h>
#include <rdescape_string.h>
#include <dbversion.h>
#include <rdmixer.h>
#include <rdprofile.h>
#include <rdtextvalidator.h>
#include <filter.h>
#include <edit_cart.h>
#include <rdlibrary.h>
#include <disk_ripper.h>
#include <cdripper.h>
#include <list_reports.h>
#include <globals.h>
#include <validate_cut.h>
#include <cart_tip.h>
#include "cart_tip.h"
#include "cdripper.h"
#include "disk_ripper.h"
#include "edit_cart.h"
#include "filter.h"
#include "globals.h"
#include "list_reports.h"
#include "rdlibrary.h"
#include "validate_cut.h"
//
// Global Resources
//
RDLibraryConf *rdlibrary_conf;
RDStation *rdstation_conf;
RDAudioPort *rdaudioport_conf;
RDRipc *rdripc;
RDCae *rdcae;
DiskGauge *disk_gauge;
RDCut *cut_clipboard=NULL;
RDConfig *lib_config;
RDUser *lib_user;
bool audio_changed;
RDSystem *lib_system=NULL;
//
// Prototypes
@@ -96,8 +87,8 @@ void SigHandler(int signo);
MainWidget::MainWidget(QWidget *parent)
:QWidget(parent)
{
unsigned schema=0;
bool skip_db_check=false;
QString err_msg;
profile_ripping=false;
lib_edit_pending=false;
lib_user_changed=false;
@@ -109,7 +100,6 @@ MainWidget::MainWidget(QWidget *parent)
new RDCmdSwitch(qApp->argc(),qApp->argv(),"rdlibrary",RDLIBRARY_USAGE);
for(unsigned i=0;i<cmd->keys();i++) {
if(cmd->key(i)=="--skip-db-check") {
skip_db_check=true;
cmd->setProcessed(i,true);
}
if(cmd->key(i)=="--profile-ripping") {
@@ -176,65 +166,37 @@ MainWidget::MainWidget(QWidget *parent)
//
RDInitializeDaemons();
//
// Load Local Configs
//
lib_config=new RDConfig();
lib_config->load();
lib_config->setModuleName("RDLibrary");
rda=new RDApplication("RDLibrary",this);
if(!rda->open(&err_msg)) {
QMessageBox::critical(this,"RDLibrary - "+tr("Error"),err_msg);
exit(1);
}
SetCaption("");
lib_import_path=RDGetHomeDir();
//
// Open Database
//
QString err(tr("rdlibrary : "));
QSqlDatabase *db=RDInitDb(&schema,&err);
if(!db) {
QMessageBox::warning(this,
tr("Can't Connect"),err);
exit(0);
}
if((RD_VERSION_DATABASE!=schema)&&(!skip_db_check)) {
fprintf(stderr,
"rdlibrary: database version mismatch, should be %u, is %u\n",
RD_VERSION_DATABASE,schema);
exit(256);
}
//
// Allocate Global Resources
//
rdlibrary_conf=new RDLibraryConf(lib_config->stationName(),0);
rdstation_conf=new RDStation(lib_config->stationName());
lib_filter_mode=rdstation_conf->filterMode();
rdaudioport_conf=new RDAudioPort(lib_config->stationName(),
rdlibrary_conf->inputCard());
rdripc=new RDRipc(rdstation_conf,lib_config,this);
connect(rdripc,SIGNAL(connected(bool)),this,SLOT(connectedData(bool)));
connect(rdripc,SIGNAL(userChanged()),this,SLOT(userData()));
rdripc->connectHost("localhost",RIPCD_TCP_PORT,lib_config->password());
lib_filter_mode=rda->station()->filterMode();
rdaudioport_conf=new RDAudioPort(rda->config()->stationName(),
rda->libraryConf()->inputCard());
connect(rda->ripc(),SIGNAL(connected(bool)),this,SLOT(connectedData(bool)));
connect(rda->ripc(),SIGNAL(userChanged()),this,SLOT(userData()));
rda->ripc()->
connectHost("localhost",RIPCD_TCP_PORT,rda->config()->password());
cut_clipboard=NULL;
lib_system=new RDSystem();
lib_user_timer=new QTimer(this);
connect(lib_user_timer,SIGNAL(timeout()),this,SLOT(userData()));
//
// CAE Connection
//
rdcae=new RDCae(rdstation_conf,lib_config,parent);
rdcae->connectHost();
rda->cae()->connectHost();
//
// Load Audio Assignments
//
RDSetMixerPorts(lib_config->stationName(),rdcae);
//
// User
//
lib_user=NULL;
RDSetMixerPorts(rda->config()->stationName(),rda->cae());
//
// Filter
@@ -305,7 +267,7 @@ MainWidget::MainWidget(QWidget *parent)
lib_allowdrag_label->setAlignment(AlignVCenter|AlignLeft);
connect(lib_allowdrag_box,SIGNAL(stateChanged(int)),
this,SLOT(dragsChangedData(int)));
if(!rdstation_conf->enableDragdrop()) {
if(!rda->station()->enableDragdrop()) {
lib_allowdrag_box->hide();
lib_allowdrag_label->hide();
}
@@ -455,8 +417,8 @@ MainWidget::MainWidget(QWidget *parent)
//
// Disk Gauge
//
disk_gauge=new DiskGauge(lib_system->sampleRate(),
rdlibrary_conf->defaultChannels(),this);
disk_gauge=new DiskGauge(rda->system()->sampleRate(),
rda->libraryConf()->defaultChannels(),this);
//
// Rip Button
@@ -490,7 +452,7 @@ MainWidget::MainWidget(QWidget *parent)
//
// Load Data
//
switch(rdlibrary_conf->limitSearch()) {
switch(rda->libraryConf()->limitSearch()) {
case RDLibraryConf::LimitNo:
lib_showmatches_box->setChecked(false);
break;
@@ -500,7 +462,7 @@ MainWidget::MainWidget(QWidget *parent)
break;
case RDLibraryConf::LimitPrevious:
lib_showmatches_box->setChecked(rdlibrary_conf->searchLimited());
lib_showmatches_box->setChecked(rda->libraryConf()->searchLimited());
break;
}
@@ -535,16 +497,13 @@ void MainWidget::userData()
return;
}
SetCaption(rdripc->user());
if(lib_user!=NULL) {
delete lib_user;
}
lib_user=new RDUser(rdripc->user());
SetCaption(rda->ripc()->user());
rda->user()->setName(rda->ripc()->user());
lib_group_box->clear();
lib_group_box->insertItem(tr("ALL"));
sql=QString("select GROUP_NAME from USER_PERMS where ")+
"USER_NAME=\""+RDEscapeString(lib_user->name())+"\" order by GROUP_NAME";
"USER_NAME=\""+RDEscapeString(rda->user()->name())+"\" order by GROUP_NAME";
q=new RDSqlQuery(sql);
while(q->next()) {
lib_group_box->insertItem(q->value(0).toString());
@@ -558,10 +517,10 @@ void MainWidget::userData()
lib_rip_button->setDisabled(true);
}
else {
lib_add_button->setEnabled(lib_user->createCarts());
lib_add_button->setEnabled(rda->user()->createCarts());
lib_edit_button->setEnabled(true);
lib_delete_button->setEnabled(lib_user->deleteCarts());
lib_rip_button->setEnabled(lib_user->editAudio());
lib_delete_button->setEnabled(rda->user()->deleteCarts());
lib_rip_button->setEnabled(rda->user()->editAudio());
}
lib_codes_box->clear();
@@ -627,7 +586,7 @@ void MainWidget::addData()
LockUser();
RDAddCart *add_cart=new RDAddCart(&lib_default_group,&cart_type,&cart_title,
lib_user->name(),lib_system,this);
rda->user()->name(),rda->system(),this);
if((cart_num=add_cart->exec())<0) {
delete add_cart;
UnlockUser();
@@ -645,7 +604,7 @@ void MainWidget::addData()
new EditCart(cart_num,&lib_import_path,true,profile_ripping,this);
if(cart->exec() <0) {
RDCart *rdcart=new RDCart(cart_num);
rdcart->remove(rdstation_conf,lib_user,lib_config);
rdcart->remove(rda->station(),rda->user(),rda->config());
delete rdcart;
}
else {
@@ -703,7 +662,7 @@ void MainWidget::editData()
delete it;
}
else { //multi edit
if(lib_user->modifyCarts()) {
if(rda->user()->modifyCarts()) {
EditCart *edit_cart=
new EditCart(0,&lib_import_path,false,profile_ripping,this,"",
lib_cart_list);
@@ -795,7 +754,7 @@ Do you still want to delete it?"),item->text(1).toUInt());
}
if(del_flag && item->text(21).isEmpty()) {
RDCart *rdcart=new RDCart(item->text(1).toUInt());
if(!rdcart->remove(rdstation_conf,lib_user,lib_config)) {
if(!rdcart->remove(rda->station(),rda->user(),rda->config())) {
QMessageBox::warning(this,tr("RDLibrary"),tr("Unable to delete audio!"));
return;
}
@@ -881,7 +840,7 @@ void MainWidget::cartClickedData(QListViewItem *item)
delete it;
if(del_count>0) {
lib_delete_button->setEnabled(lib_user->deleteCarts());
lib_delete_button->setEnabled(rda->user()->deleteCarts());
}
else {
lib_delete_button->setEnabled(false);
@@ -891,7 +850,7 @@ void MainWidget::cartClickedData(QListViewItem *item)
lib_edit_button->setEnabled(false);
}
else {
lib_edit_button->setEnabled(lib_user->modifyCarts());
lib_edit_button->setEnabled(rda->user()->modifyCarts());
}
}
else {
@@ -920,7 +879,7 @@ void MainWidget::macroChangedData(int state)
void MainWidget::searchLimitChangedData(int state)
{
rdlibrary_conf->setSearchLimited(state);
rda->libraryConf()->setSearchLimited(state);
filterChangedData("");
}
@@ -1058,7 +1017,7 @@ void MainWidget::RefreshList()
if(lib_group_box->currentText()==QString(tr("ALL"))) {
sql+=QString(" where ")+
RDAllCartSearchText(lib_filter_edit->text(),schedcode,
lib_user->name(),true)+" && "+type_filter;
rda->user()->name(),true)+" && "+type_filter;
}
else {
@@ -1357,7 +1316,7 @@ void MainWidget::SetCaption(QString user)
str1=QString("RDLibrary")+" v"+VERSION+" - "+tr("Host")+":";
str2=tr("User")+":";
setCaption(str1+" "+lib_config->stationName()+", "+str2+" "+user);
setCaption(str1+" "+rda->config()->stationName()+", "+str2+" "+user);
}