Merge remote-tracking branch 'upstream/master'

This commit is contained in:
David Klann 2018-10-29 23:02:25 -05:00
commit 92838b6215
15 changed files with 164 additions and 43 deletions

View File

@ -17895,6 +17895,8 @@
2018-10-23 Fred Gleason <fredg@paravelsystems.com> 2018-10-23 Fred Gleason <fredg@paravelsystems.com>
* Fixed a bug in 'configure.ac' that caused detection of FLAC * Fixed a bug in 'configure.ac' that caused detection of FLAC
support to always fail. support to always fail.
<<<<<<< HEAD
<<<<<<< HEAD
2018-10-24 Fred Gleason <fredg@paravelsystems.com> 2018-10-24 Fred Gleason <fredg@paravelsystems.com>
* Consolidated the implementation of the 'RDProfile' class into * Consolidated the implementation of the 'RDProfile' class into
two files. two files.
@ -17924,3 +17926,33 @@
* Fixed a regression in rdairplay(1) that caused the application * Fixed a regression in rdairplay(1) that caused the application
to be closed even if an incorrect response was entered in the to be closed even if an incorrect response was entered in the
'Enter Password' dialog. 'Enter Password' dialog.
2018-10-28 Fred Gleason <fredg@paravelsystems.com>
* Fixed a regression that caused the bankground of blank Sound Panel
buttons to be black.
2018-10-28 Patrick Linstruth <patrick@deltecent.com>
* Fixed a regression in rdairplay(1) that caused the application
to be closed even if "No" was pressed in the 'Exit RDAirPlay?'
dialog.
2018-10-28 Patrick Linstruth <patrick@deltecent.com>
* Updated the Operations Guide to include illustration of the
'Play' and 'Stop' buttons on the main window of rdlibrary(1).
2018-10-28 Patrick Linstruth <patrick@deltecent.com>
* Fixed a regression in rdlogmanaer(1) that threw a segfault when
adding a Log Note to an Event.
2018-10-28 Patrick Linstruth <patrick@deltecent.com>
* Fix delete and voice track buttons in rdlogedit(1).
* Fix bug in RDSimplePlayer setCart() method.
2018-10-29 Patrick Linstruth <patrick@deltecent.com>
* Fixed regression where background colors are were not displayed
in the RDDatePicker calendar.
2018-10-29 Patrick Linstruth <patrick@deltecent.com>
* Updated the 'README' file with RDDbConfig utility.
2018-10-29 Fred Gleason <fredg@paravelsystems.com>
* Fixed a bug in the code to implement schema update/reversion 284
that did not properly add/drop the 'RDAIRPLAY.INSTANCE' field.
2018-10-29 Fred Gleason <fredg@paravelsystems.com>
* Backported a consistency check into schema update 291 in
rddbmgr(8) to remove rdlogmanager(1) events with duplicate start
times.
2018-10-29 Fred Gleason <fredg@paravelsystems.com>
* Incremented the package version to 3.0.0alpha01.

View File

@ -224,13 +224,13 @@ In the '[mySQL]' section of the '/etc/rd.conf' file, set the 'Database=',
'Loginname=' and 'Password=' parameters to the DB name, user and password 'Loginname=' and 'Password=' parameters to the DB name, user and password
that you created. Then, create an initial Rivendell database by doing: that you created. Then, create an initial Rivendell database by doing:
rddbmgr --create rddbmgr --create
If all goes well, this command should return with no output. If all goes well, this command should return with no output.
Finally, start up the Rivendell service by doing (as root): Finally, start up the Rivendell service by doing (as root):
systemctl start rivendell systemctl start rivendell
You should now be able to run the various Rivendell components from the You should now be able to run the various Rivendell components from the
Applications menu. Applications menu.

17
NEWS
View File

@ -1,9 +1,24 @@
The NEWS file for the Rivendell package. The NEWS file for the Rivendell package.
-------------------------------------------------------------------------------
v3.0.0alpha01 -- 10/29/2018
Second alpha release for v3.x.
Changes:
Cleaned up various regressions. See the ChangeLog for details.
Database Update:
This version of Rivendell uses database schema version 298, and will
automatically upgrade any earlier versions. To see the current schema
version prior to upgrade, see RDAdmin->SystemInfo.
Be sure to run 'rddbmgr --modify' (as root) immediately after upgrading
to allow any necessary changes to the database schema to be applied.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
v3.0.0alpha00 -- 10/19/2018 v3.0.0alpha00 -- 10/19/2018
Initial alpha release vor v3.x. Initial alpha release for v3.x.
Database Update: Database Update:
This version of Rivendell uses database schema version 297, and will This version of Rivendell uses database schema version 297, and will

View File

@ -1 +1 @@
3.0.0alpha00 3.0.0alpha01

7
README
View File

@ -57,12 +57,13 @@ A utility for posting and managing podcast episodes.
RDGpiMon RDGpiMon
A utility for monitoring GPI line status. A utility for monitoring GPI line status.
RDHPIInfo
A utility for configuring AudioScience audio adapters.
RDAlsaConfig RDAlsaConfig
A utility for configuring ALSA audio adapters. A utility for configuring ALSA audio adapters.
RDDbConfig
A utility for creating, backing up and restoring the Rivendell
database.
RDImport RDImport
A command-line utility for batch importing audio along with A command-line utility for batch importing audio along with
accompanying metadata. Do: accompanying metadata. Do:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 88 KiB

View File

@ -788,6 +788,35 @@
touching the <computeroutput>Edit</computeroutput> button. touching the <computeroutput>Edit</computeroutput> button.
</para> </para>
</sect2> </sect2>
<sect2 xml:id="sect.rdlibrary.viewing_and_selecting_cuts">
<title>Viewing and Selecting Cuts</title>
<para>
If a cart contains more than one cut, you can view all the cuts
contained by the cart by clicking the
<computeroutput>+</computeroutput> icon. The cuts can be
hidden by clicking the <computeroutput>-</computeroutput>
icon.
</para>
</sect2>
<sect2 xml:id="sect.rdlibrary.playing_carts_and_cuts">
<title>Playing Carts and Cuts</title>
<para>
A selected cart or cut can be played by either pressing the
play button (the one with the triangular symbol) or by
pressing the space bar. If a cart or cut is currently
playing, selecting another cart or cut with the mouse
or arrow keys will automatically play the newly selected
item. To stop a playing cart or cut, press the stop button
(square symbol) or press the space bar again.
</para>
</sect2>
<sect2 xml:id="sect.rdlibrary.runnings_macros">
<title>Running Macros</title>
<para>
A selected macro can be run by pressing the
<computeroutput>Run Macro</computeroutput> button.
</para>
</sect2>
</sect1> </sect1>
<sect1 xml:id="sect.rdlibrary.library_maintenance"> <sect1 xml:id="sect.rdlibrary.library_maintenance">
<title>Library Maintenance</title> <title>Library Maintenance</title>

View File

@ -82,12 +82,12 @@ RDDatePicker::RDDatePicker(int low_year,int high_year,QWidget *parent)
// Date Labels // Date Labels
// //
QPalette weekend_palette=palette(); QPalette weekend_palette=palette();
weekend_palette.setColor(QPalette::Active,QColorGroup::Background, weekend_palette.setColor(QPalette::Active,QPalette::Background,
palette().color(QPalette::Active, palette().color(QPalette::Active,
QColorGroup::Mid)); QPalette::Mid));
weekend_palette.setColor(QPalette::Inactive,QColorGroup::Background, weekend_palette.setColor(QPalette::Inactive,QPalette::Background,
palette().color(QPalette::Active, palette().color(QPalette::Active,
QColorGroup::Mid)); QPalette::Mid));
QLabel *label=new QLabel(tr("Mo"),this,"monday_label"); QLabel *label=new QLabel(tr("Mo"),this,"monday_label");
label->setGeometry(RDDATEPICKER_X_ORIGIN,30,30,30); label->setGeometry(RDDATEPICKER_X_ORIGIN,30,30,30);
@ -124,6 +124,7 @@ RDDatePicker::RDDatePicker(int low_year,int high_year,QWidget *parent)
label->setFont(header_font); label->setFont(header_font);
label->setAlignment(Qt::AlignCenter); label->setAlignment(Qt::AlignCenter);
label->setPalette(weekend_palette); label->setPalette(weekend_palette);
label->setAutoFillBackground(true);
label=new QLabel(tr("Su"),this,"sunday_label"); label=new QLabel(tr("Su"),this,"sunday_label");
label->setGeometry(RDDATEPICKER_X_ORIGIN+RDDATEPICKER_X_INTERVAL*6, label->setGeometry(RDDATEPICKER_X_ORIGIN+RDDATEPICKER_X_INTERVAL*6,
@ -131,6 +132,7 @@ RDDatePicker::RDDatePicker(int low_year,int high_year,QWidget *parent)
label->setFont(header_font); label->setFont(header_font);
label->setAlignment(Qt::AlignCenter); label->setAlignment(Qt::AlignCenter);
label->setPalette(weekend_palette); label->setPalette(weekend_palette);
label->setAutoFillBackground(true);
for(int i=0;i<6;i++) { for(int i=0;i<6;i++) {
@ -140,6 +142,7 @@ RDDatePicker::RDDatePicker(int low_year,int high_year,QWidget *parent)
setGeometry(RDDATEPICKER_X_ORIGIN+RDDATEPICKER_X_INTERVAL*j, setGeometry(RDDATEPICKER_X_ORIGIN+RDDATEPICKER_X_INTERVAL*j,
RDDATEPICKER_Y_ORIGIN+20+RDDATEPICKER_Y_INTERVAL*i,30,30); RDDATEPICKER_Y_ORIGIN+20+RDDATEPICKER_Y_INTERVAL*i,30,30);
pick_date_label[i][j]->setAlignment(Qt::AlignTop|Qt::AlignHCenter); pick_date_label[i][j]->setAlignment(Qt::AlignTop|Qt::AlignHCenter);
pick_date_label[i][j]->setAutoFillBackground(true);
} }
} }
PrintDays(); PrintDays();
@ -265,12 +268,12 @@ void RDDatePicker::PrintDays()
// Clear Days // Clear Days
// //
QPalette weekend_palette=palette(); QPalette weekend_palette=palette();
weekend_palette.setColor(QPalette::Active,QColorGroup::Background, weekend_palette.setColor(QPalette::Active,QPalette::Background,
palette().color(QPalette::Active, palette().color(QPalette::Active,
QColorGroup::Mid)); QPalette::Mid));
weekend_palette.setColor(QPalette::Inactive,QColorGroup::Background, weekend_palette.setColor(QPalette::Inactive,QPalette::Background,
palette().color(QPalette::Active, palette().color(QPalette::Active,
QColorGroup::Mid)); QPalette::Mid));
for(int i=0;i<6;i++) { for(int i=0;i<6;i++) {
for(int j=0;j<5;j++) { for(int j=0;j<5;j++) {
pick_date_label[i][j]->clear(); pick_date_label[i][j]->clear();
@ -324,26 +327,26 @@ void RDDatePicker::SelectDay(int day,int dow_offset,bool state)
int dow=slot-7*week; int dow=slot-7*week;
QPalette pal=palette(); QPalette pal=palette();
if(state) { if(state) {
pal.setColor(QPalette::Active,QColorGroup::Foreground, pal.setColor(QPalette::Active,QPalette::Foreground,
palette(). palette().
color(QPalette::Active,QColorGroup::HighlightedText)); color(QPalette::Active,QPalette::HighlightedText));
pal.setColor(QPalette::Active,QColorGroup::Background, pal.setColor(QPalette::Active,QPalette::Background,
palette().color(QPalette::Active,QColorGroup::Highlight)); palette().color(QPalette::Active,QPalette::Highlight));
pal.setColor(QPalette::Inactive,QColorGroup::Foreground, pal.setColor(QPalette::Inactive,QPalette::Foreground,
palette(). palette().
color(QPalette::Active,QColorGroup::HighlightedText)); color(QPalette::Active,QPalette::HighlightedText));
pal.setColor(QPalette::Inactive,QColorGroup::Background, pal.setColor(QPalette::Inactive,QPalette::Background,
palette().color(QPalette::Active,QColorGroup::Highlight)); palette().color(QPalette::Active,QPalette::Highlight));
} }
else { else {
pal.setColor(QPalette::Active,QColorGroup::Foreground, pal.setColor(QPalette::Active,QPalette::Foreground,
palette().color(QPalette::Active,QColorGroup::Text)); palette().color(QPalette::Active,QPalette::Text));
pal.setColor(QPalette::Active,QColorGroup::Background, pal.setColor(QPalette::Active,QPalette::Background,
palette().color(QPalette::Active,QColorGroup::Background)); palette().color(QPalette::Active,QPalette::Background));
pal.setColor(QPalette::Inactive,QColorGroup::Foreground, pal.setColor(QPalette::Inactive,QPalette::Foreground,
palette().color(QPalette::Active,QColorGroup::Text)); palette().color(QPalette::Active,QPalette::Text));
pal.setColor(QPalette::Inactive,QColorGroup::Background, pal.setColor(QPalette::Inactive,QPalette::Background,
palette().color(QPalette::Active,QColorGroup::Background)); palette().color(QPalette::Active,QPalette::Background));
} }
pick_date_label[week][dow]->setPalette(pal); pick_date_label[week][dow]->setPalette(pal);
} }

View File

@ -23,7 +23,6 @@
#include <qpixmap.h> #include <qpixmap.h>
#include <qpainter.h> #include <qpainter.h>
//Added by qt3to4:
#include <QDropEvent> #include <QDropEvent>
#include <QMouseEvent> #include <QMouseEvent>
#include <QKeyEvent> #include <QKeyEvent>
@ -52,8 +51,8 @@ void RDPanelButton::clear()
{ {
setText(""); setText("");
setOutputText(""); setOutputText("");
setDefaultColor(button_parent->backgroundColor()); button_color=Qt::lightGray;
setColor(button_parent->backgroundColor()); button_default_color=Qt::lightGray;
setCart(0); setCart(0);
button_deck=-1; button_deck=-1;
button_output=-1; button_output=-1;
@ -492,6 +491,7 @@ void RDPanelButton::WriteKeycap(int secs)
setPixmap(*pix); setPixmap(*pix);
delete p; delete p;
delete pix; delete pix;
update();
} }

View File

@ -84,6 +84,7 @@ bool RDSimplePlayer::isPlaying()
void RDSimplePlayer::setCart(unsigned cart) void RDSimplePlayer::setCart(unsigned cart)
{ {
play_cart=cart; play_cart=cart;
play_cut="";
} }

View File

@ -2141,6 +2141,7 @@ void MainWidget::closeEvent(QCloseEvent *e)
if(QMessageBox::question(this,"RDAirPlay",tr("Exit RDAirPlay?"), if(QMessageBox::question(this,"RDAirPlay",tr("Exit RDAirPlay?"),
QMessageBox::Yes,QMessageBox::No)!= QMessageBox::Yes,QMessageBox::No)!=
QMessageBox::Yes) { QMessageBox::Yes) {
e->setAccepted(false);
return; return;
} }
for(unsigned i=0;i<air_plugin_hosts.size();i++) { for(unsigned i=0;i<air_plugin_hosts.size();i++) {

View File

@ -300,8 +300,8 @@ void MainWidget::userData()
// Set Control Perms // Set Control Perms
// //
log_add_button->setEnabled(rda->user()->createLog()); log_add_button->setEnabled(rda->user()->createLog());
log_delete_button->setEnabled(rda->user()->deleteLog()); log_delete_button->setEnabled(false);
log_track_button->setEnabled(rda->user()->voicetrackLog()); log_track_button->setEnabled(false);
} }
@ -631,8 +631,8 @@ void MainWidget::logSelectionChangedData()
item=(ListListViewItem *)item->nextSibling(); item=(ListListViewItem *)item->nextSibling();
} }
log_edit_button->setEnabled(count==1); log_edit_button->setEnabled(count==1);
log_delete_button->setEnabled(count>0); log_delete_button->setEnabled(count>0&&rda->user()->deleteLog());
log_track_button->setEnabled(count==1); log_track_button->setEnabled(count==1&&rda->user()->voicetrackLog());
} }

View File

@ -342,7 +342,7 @@ void ImportListView::insertNoteMenuData()
i_item->setEventType(RDLogLine::Marker); i_item->setEventType(RDLogLine::Marker);
i_item->setMarkerComment(note); i_item->setMarkerComment(note);
i_item->setTransType(RDLogLine::Segue); i_item->setTransType(RDLogLine::Segue);
import_list->takeItem(1,i_item); import_list->takeItem(import_menu_line,i_item);
validateTransitions(); validateTransitions();
refreshList(import_menu_line); refreshList(import_menu_line);
emit sizeChanged(childCount()); emit sizeChanged(childCount());

View File

@ -2687,13 +2687,11 @@ bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg)
// Revert 284 // Revert 284
// //
if((cur_schema==284)&&(set_schema<cur_schema)) { if((cur_schema==284)&&(set_schema<cur_schema)) {
/*
sql=QString("alter table RDAIRPLAY add column INSTANCE int unsigned ")+ sql=QString("alter table RDAIRPLAY add column INSTANCE int unsigned ")+
"not null default 0 after STATION"; "not null default 0 after STATION";
if(!RDSqlQuery::apply(sql,err_msg)) { if(!RDSqlQuery::apply(sql,err_msg)) {
return false; return false;
} }
*/
for(int i=9;i>=0;i--) { for(int i=9;i>=0;i--) {
sql=QString("alter table RDAIRPLAY add column ")+ sql=QString("alter table RDAIRPLAY add column ")+
QString().sprintf("STOP_RML%d char(255) after INSTANCE",i); QString().sprintf("STOP_RML%d char(255) after INSTANCE",i);

View File

@ -7008,12 +7008,10 @@ bool MainObject::UpdateSchema(int cur_schema,int set_schema,QString *err_msg)
} }
if((cur_schema<284)&&(set_schema>cur_schema)) { if((cur_schema<284)&&(set_schema>cur_schema)) {
/*
sql=QString("alter table RDAIRPLAY drop column INSTANCE"); sql=QString("alter table RDAIRPLAY drop column INSTANCE");
if(!RDSqlQuery::apply(sql,err_msg)) { if(!RDSqlQuery::apply(sql,err_msg)) {
return false; return false;
} }
*/
for(int i=0;i<10;i++) { for(int i=0;i<10;i++) {
sql=QString("alter table RDAIRPLAY ")+ sql=QString("alter table RDAIRPLAY ")+
QString().sprintf("drop column CARD%d",i); QString().sprintf("drop column CARD%d",i);
@ -7692,6 +7690,49 @@ bool MainObject::UpdateSchema(int cur_schema,int set_schema,QString *err_msg)
while(q->next()) { while(q->next()) {
QString tablename=q->value(0).toString()+"_CLK"; QString tablename=q->value(0).toString()+"_CLK";
tablename.replace(" ","_"); tablename.replace(" ","_");
/* *** HACK WARNING *** HACK WARNING ***
*
* This check works around a bug in Rivendell v2.x that permitted
* clocks to have events with the same start time. It deletes all
* such 'conflicting' events except the one with the lowest ID number.
*/
QList<unsigned> deleted_ids;
sql=QString("select ")+
"ID,"+ // 00
"EVENT_NAME,"+ // 01
"START_TIME,"+ // 02
"LENGTH "+ // 03
"from `"+tablename+"` "+
"order by ID";
q1=new RDSqlQuery(sql);
while(q1->next()) {
sql=QString("select ")+
"ID,"+ // 00
"EVENT_NAME "+ // 01
"from `"+tablename+"` where "+
QString().sprintf("START_TIME=%d && ",q1->value(2).toInt())+
QString().sprintf("ID!=%u ",q1->value(0).toUInt())+
"order by ID";
q2=new RDSqlQuery(sql);
while(q2->next()) {
if(!deleted_ids.contains(q1->value(0).toUInt())) {
fprintf(stderr,
"WARNING: deleted conflicting event \"%s\" from clock \"%s\"\n",
(const char *)q2->value(1).toString().toUtf8(),
(const char *)q->value(0).toString().toUtf8());
sql=QString("delete ")+
"from `"+tablename+"` where "+
QString().sprintf("ID=%u",q2->value(0).toUInt());
RDSqlQuery::apply(sql);
deleted_ids.push_back(q2->value(0).toUInt());
}
}
delete q2;
}
delete q1;
/* *** END OF HACK WARNING *** END OF HACK WARNING ***/
sql=QString("select ")+ sql=QString("select ")+
"EVENT_NAME,"+ // 00 "EVENT_NAME,"+ // 00
"START_TIME,"+ // 01 "START_TIME,"+ // 01