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>
* Fixed a bug in 'configure.ac' that caused detection of FLAC
support to always fail.
<<<<<<< HEAD
<<<<<<< HEAD
2018-10-24 Fred Gleason <fredg@paravelsystems.com>
* Consolidated the implementation of the 'RDProfile' class into
two files.
@ -17924,3 +17926,33 @@
* Fixed a regression in rdairplay(1) that caused the application
to be closed even if an incorrect response was entered in the
'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.

17
NEWS
View File

@ -1,9 +1,24 @@
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
Initial alpha release vor v3.x.
Initial alpha release for v3.x.
Database Update:
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
A utility for monitoring GPI line status.
RDHPIInfo
A utility for configuring AudioScience audio adapters.
RDAlsaConfig
A utility for configuring ALSA audio adapters.
RDDbConfig
A utility for creating, backing up and restoring the Rivendell
database.
RDImport
A command-line utility for batch importing audio along with
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.
</para>
</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 xml:id="sect.rdlibrary.library_maintenance">
<title>Library Maintenance</title>

View File

@ -82,12 +82,12 @@ RDDatePicker::RDDatePicker(int low_year,int high_year,QWidget *parent)
// Date Labels
//
QPalette weekend_palette=palette();
weekend_palette.setColor(QPalette::Active,QColorGroup::Background,
weekend_palette.setColor(QPalette::Active,QPalette::Background,
palette().color(QPalette::Active,
QColorGroup::Mid));
weekend_palette.setColor(QPalette::Inactive,QColorGroup::Background,
QPalette::Mid));
weekend_palette.setColor(QPalette::Inactive,QPalette::Background,
palette().color(QPalette::Active,
QColorGroup::Mid));
QPalette::Mid));
QLabel *label=new QLabel(tr("Mo"),this,"monday_label");
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->setAlignment(Qt::AlignCenter);
label->setPalette(weekend_palette);
label->setAutoFillBackground(true);
label=new QLabel(tr("Su"),this,"sunday_label");
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->setAlignment(Qt::AlignCenter);
label->setPalette(weekend_palette);
label->setAutoFillBackground(true);
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,
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]->setAutoFillBackground(true);
}
}
PrintDays();
@ -265,12 +268,12 @@ void RDDatePicker::PrintDays()
// Clear Days
//
QPalette weekend_palette=palette();
weekend_palette.setColor(QPalette::Active,QColorGroup::Background,
weekend_palette.setColor(QPalette::Active,QPalette::Background,
palette().color(QPalette::Active,
QColorGroup::Mid));
weekend_palette.setColor(QPalette::Inactive,QColorGroup::Background,
QPalette::Mid));
weekend_palette.setColor(QPalette::Inactive,QPalette::Background,
palette().color(QPalette::Active,
QColorGroup::Mid));
QPalette::Mid));
for(int i=0;i<6;i++) {
for(int j=0;j<5;j++) {
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;
QPalette pal=palette();
if(state) {
pal.setColor(QPalette::Active,QColorGroup::Foreground,
pal.setColor(QPalette::Active,QPalette::Foreground,
palette().
color(QPalette::Active,QColorGroup::HighlightedText));
pal.setColor(QPalette::Active,QColorGroup::Background,
palette().color(QPalette::Active,QColorGroup::Highlight));
pal.setColor(QPalette::Inactive,QColorGroup::Foreground,
color(QPalette::Active,QPalette::HighlightedText));
pal.setColor(QPalette::Active,QPalette::Background,
palette().color(QPalette::Active,QPalette::Highlight));
pal.setColor(QPalette::Inactive,QPalette::Foreground,
palette().
color(QPalette::Active,QColorGroup::HighlightedText));
pal.setColor(QPalette::Inactive,QColorGroup::Background,
palette().color(QPalette::Active,QColorGroup::Highlight));
color(QPalette::Active,QPalette::HighlightedText));
pal.setColor(QPalette::Inactive,QPalette::Background,
palette().color(QPalette::Active,QPalette::Highlight));
}
else {
pal.setColor(QPalette::Active,QColorGroup::Foreground,
palette().color(QPalette::Active,QColorGroup::Text));
pal.setColor(QPalette::Active,QColorGroup::Background,
palette().color(QPalette::Active,QColorGroup::Background));
pal.setColor(QPalette::Inactive,QColorGroup::Foreground,
palette().color(QPalette::Active,QColorGroup::Text));
pal.setColor(QPalette::Inactive,QColorGroup::Background,
palette().color(QPalette::Active,QColorGroup::Background));
pal.setColor(QPalette::Active,QPalette::Foreground,
palette().color(QPalette::Active,QPalette::Text));
pal.setColor(QPalette::Active,QPalette::Background,
palette().color(QPalette::Active,QPalette::Background));
pal.setColor(QPalette::Inactive,QPalette::Foreground,
palette().color(QPalette::Active,QPalette::Text));
pal.setColor(QPalette::Inactive,QPalette::Background,
palette().color(QPalette::Active,QPalette::Background));
}
pick_date_label[week][dow]->setPalette(pal);
}

View File

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

View File

@ -84,6 +84,7 @@ bool RDSimplePlayer::isPlaying()
void RDSimplePlayer::setCart(unsigned 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?"),
QMessageBox::Yes,QMessageBox::No)!=
QMessageBox::Yes) {
e->setAccepted(false);
return;
}
for(unsigned i=0;i<air_plugin_hosts.size();i++) {

View File

@ -300,8 +300,8 @@ void MainWidget::userData()
// Set Control Perms
//
log_add_button->setEnabled(rda->user()->createLog());
log_delete_button->setEnabled(rda->user()->deleteLog());
log_track_button->setEnabled(rda->user()->voicetrackLog());
log_delete_button->setEnabled(false);
log_track_button->setEnabled(false);
}
@ -631,8 +631,8 @@ void MainWidget::logSelectionChangedData()
item=(ListListViewItem *)item->nextSibling();
}
log_edit_button->setEnabled(count==1);
log_delete_button->setEnabled(count>0);
log_track_button->setEnabled(count==1);
log_delete_button->setEnabled(count>0&&rda->user()->deleteLog());
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->setMarkerComment(note);
i_item->setTransType(RDLogLine::Segue);
import_list->takeItem(1,i_item);
import_list->takeItem(import_menu_line,i_item);
validateTransitions();
refreshList(import_menu_line);
emit sizeChanged(childCount());

View File

@ -2687,13 +2687,11 @@ bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg)
// Revert 284
//
if((cur_schema==284)&&(set_schema<cur_schema)) {
/*
sql=QString("alter table RDAIRPLAY add column INSTANCE int unsigned ")+
"not null default 0 after STATION";
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
*/
for(int i=9;i>=0;i--) {
sql=QString("alter table RDAIRPLAY add column ")+
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)) {
/*
sql=QString("alter table RDAIRPLAY drop column INSTANCE");
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
*/
for(int i=0;i<10;i++) {
sql=QString("alter table RDAIRPLAY ")+
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()) {
QString tablename=q->value(0).toString()+"_CLK";
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 ")+
"EVENT_NAME,"+ // 00
"START_TIME,"+ // 01