From 73ab30c21439a08371e5c0b84721715d49b363b0 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Wed, 21 Sep 2022 14:38:35 -0400 Subject: [PATCH] 2022-09-21 Fred Gleason * Modified the 'load previous log' option in 'At Startup:' control in the 'Configure RDAirPlay' dialog in rdadmin(1) to be 'load and cue previous log'. Signed-off-by: Fred Gleason --- ChangeLog | 4 ++ .../rdadmin.rdairplay_start_stop_settings.png | Bin 14581 -> 14386 bytes lib/rdlogplay.cpp | 44 ++++++++++++++++-- lib/rdlogplay.h | 3 +- rdadmin/edit_rdairplay.cpp | 14 +++--- rdairplay/rdairplay.cpp | 26 +++-------- 6 files changed, 59 insertions(+), 32 deletions(-) diff --git a/ChangeLog b/ChangeLog index 979b852a..f9b520e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23362,3 +23362,7 @@ 2022-09-20 Fred Gleason * Updated the Operations Guide to include a pointer to the example for generating an SSH keypair. +2022-09-21 Fred Gleason + * Modified the 'load previous log' option in 'At Startup:' control + in the 'Configure RDAirPlay' dialog in rdadmin(1) to be + 'load and cue previous log'. diff --git a/docs/opsguide/rdadmin.rdairplay_start_stop_settings.png b/docs/opsguide/rdadmin.rdairplay_start_stop_settings.png index e6aef6a7a026149ec543f637cb4b87d099dc6936..be7da08e3a28e9a479206f5a89b448f95a91222a 100644 GIT binary patch literal 14386 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 Tk<;)TBLXF@ER`o=^z#1zpUUaC diff --git a/lib/rdlogplay.cpp b/lib/rdlogplay.cpp index 0de8cd6c..9ef438bf 100644 --- a/lib/rdlogplay.cpp +++ b/lib/rdlogplay.cpp @@ -2,7 +2,7 @@ // // Rivendell Log Playout Machine // -// (C) Copyright 2002-2021 Fred Gleason +// (C) Copyright 2002-2022 Fred Gleason // // 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 @@ -2000,7 +2000,7 @@ bool RDLogPlay::StartEvent(int line,RDLogLine::TransType trans_type, switch(logline->type()) { case RDLogLine::Cart: if(!StartAudioEvent(line)) { - rda->airplayConf()->setLogCurrentLine(play_id,nextLine()); + UpdateRestartData(); return false; } aport=GetNextChannel(mport,&card,&port); @@ -2029,7 +2029,7 @@ bool RDLogPlay::StartEvent(int line,RDLogLine::TransType trans_type, rda->syslog(LOG_WARNING, "log engine: RDLogPlay::StartEvent(): no audio,CUT=%s", (const char *)logline->cutName().toUtf8()); - rda->airplayConf()->setLogCurrentLine(play_id,nextLine()); + UpdateRestartData(); return false; } emit modified(line); @@ -2201,13 +2201,13 @@ bool RDLogPlay::StartEvent(int line,RDLogLine::TransType trans_type, if((logline->state()==RDLogLine::Ok)|| (logline->state()==RDLogLine::NoCart)|| (logline->state()==RDLogLine::NoCut)) { - rda->airplayConf()->setLogCurrentLine(play_id,nextLine()); + UpdateRestartData(); return true; } play_next_line++; } play_next_line=-1; - rda->airplayConf()->setLogCurrentLine(play_id,nextLine()); + UpdateRestartData(); return true; } @@ -2856,6 +2856,7 @@ void RDLogPlay::ChangeTransport() createIndex(play_next_line+play_slot_quantity-1, columnCount())); } + UpdateRestartData(); } @@ -3215,6 +3216,39 @@ void RDLogPlay::SendNowNext() } +void RDLogPlay::UpdateRestartData() +{ + QString running; + int line=-1; + int id=-1; + int lines[TRANSPORT_QUANTITY]; + if(runningEvents(lines,false)>0) { + line=lines[0]; + id=logLine(line)->id(); + running="Y"; + } + else { + line=nextLine(); + if(line>=0) { + id=logLine(line)->id(); + } + running="N"; + } + + if(line<0) { + line=play_next_line; + running="N"; + } + QString sql=QString("update `LOG_MACHINES` set ")+ + QString::asprintf("`LOG_LINE`=%d,",line)+ + QString::asprintf("`LOG_ID`=%d,",id)+ + "`RUNNING`='"+running+"' "+ + "where `STATION_NAME`='"+RDEscapeString(rda->station()->name())+"' && "+ + QString::asprintf("`MACHINE`=%d",play_id); + RDSqlQuery::apply(sql); +} + + QString RDLogPlay::GetPadJson(const QString &name,RDLogLine *ll, const QDateTime &start_datetime,int line, int padding,bool final) const diff --git a/lib/rdlogplay.h b/lib/rdlogplay.h index 6b6aff0b..d02ee96f 100644 --- a/lib/rdlogplay.h +++ b/lib/rdlogplay.h @@ -2,7 +2,7 @@ // // Rivendell Log Playout Machine // -// (C) Copyright 2002-2021 Fred Gleason +// (C) Copyright 2002-2022 Fred Gleason // // 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 @@ -197,6 +197,7 @@ class RDLogPlay : public RDLogModel RDLogLine::TransType GetTransType(const QString &logname,int line); bool ClearBlock(int start_line); void SendNowNext(); + void UpdateRestartData(); QString GetPadJson(const QString &name,RDLogLine *ll, const QDateTime &start_datetime,int line,int padding, bool final=false) const; diff --git a/rdadmin/edit_rdairplay.cpp b/rdadmin/edit_rdairplay.cpp index 4c48a588..8db66a7f 100644 --- a/rdadmin/edit_rdairplay.cpp +++ b/rdadmin/edit_rdairplay.cpp @@ -2,7 +2,7 @@ // // Edit an RDAirPlay Configuration // -// (C) Copyright 2002-2021 Fred Gleason +// (C) Copyright 2002-2022 Fred Gleason // // 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 @@ -749,7 +749,7 @@ EditRDAirPlay::EditRDAirPlay(RDStation *station,RDStation *cae_station, air_startmode_box=new QComboBox(this); air_startmode_box->setGeometry(100,524,240,20); air_startmode_box->insertItem(0,tr("start with empty log")); - air_startmode_box->insertItem(1,tr("load previous log")); + air_startmode_box->insertItem(1,tr("load and cue previous log")); air_startmode_box->insertItem(2,tr("load specified log")); label=new QLabel(tr("At Startup:"),this); label->setFont(subLabelFont()); @@ -1166,10 +1166,12 @@ void EditRDAirPlay::startModeChangedData(int mode) RDAirPlayConf::StartSpecified); air_startlog_button->setEnabled((RDAirPlayConf::StartMode)mode== RDAirPlayConf::StartSpecified); - air_autorestart_box->setDisabled((RDAirPlayConf::StartMode)mode== - RDAirPlayConf::StartEmpty); - air_autorestart_label->setDisabled((RDAirPlayConf::StartMode)mode== - RDAirPlayConf::StartEmpty); + air_autorestart_box-> + setDisabled(((RDAirPlayConf::StartMode)mode==RDAirPlayConf::StartEmpty)|| + ((RDAirPlayConf::StartMode)mode==RDAirPlayConf::StartSpecified)); + air_autorestart_label-> + setDisabled(((RDAirPlayConf::StartMode)mode==RDAirPlayConf::StartEmpty)|| + ((RDAirPlayConf::StartMode)mode==RDAirPlayConf::StartSpecified)); } diff --git a/rdairplay/rdairplay.cpp b/rdairplay/rdairplay.cpp index 93ab544a..b2f95a64 100644 --- a/rdairplay/rdairplay.cpp +++ b/rdairplay/rdairplay.cpp @@ -776,11 +776,10 @@ void MainWidget::ripcConnectedData(bool state) RDDateTimeDecode(rda->airplayConf()->currentLog(i), air_startup_datetime,rda->station(),rda->config()); if(!air_start_logname[i].isEmpty()) { - if(rdairplay_previous_exit_code==RDAirPlayConf::ExitDirty) { - if((air_start_line[i]=rda->airplayConf()->logCurrentLine(i))>=0) { - air_start_start[i]=rda->airplayConf()->autoRestart(i)&& - rda->airplayConf()->logRunning(i); - } + if((air_start_line[i]=rda->airplayConf()->logCurrentLine(i))>=0) { + air_start_start[i]=rda->airplayConf()->autoRestart(i)&& + rda->airplayConf()->logRunning(i)&& + (rdairplay_previous_exit_code==RDAirPlayConf::ExitDirty); } else { air_start_line[i]=0; @@ -793,21 +792,8 @@ void MainWidget::ripcConnectedData(bool state) air_start_logname[i]= RDDateTimeDecode(rda->airplayConf()->logName(i), air_startup_datetime,rda->station(),rda->config()); - if(!air_start_logname[i].isEmpty()) { - if(rdairplay_previous_exit_code==RDAirPlayConf::ExitDirty) { - if(air_start_logname[i]==rda->airplayConf()->currentLog(i)) { - if((air_start_line[i]=rda->airplayConf()->logCurrentLine(i))>= - 0) { - air_start_start[i]=rda->airplayConf()->autoRestart(i)&& - rda->airplayConf()->logRunning(i); - } - else { - air_start_line[i]=0; - air_start_start[i]=false; - } - } - } - } + air_start_line[i]=0; + air_start_start[i]=false; break; } }