diff --git a/src/recorder/jamcontroller.cpp b/src/recorder/jamcontroller.cpp index e6a4f335..e0b439f8 100755 --- a/src/recorder/jamcontroller.cpp +++ b/src/recorder/jamcontroller.cpp @@ -90,6 +90,11 @@ void CJamController::SetRecordingDir ( QString newRecordingDir, strRecorderErrMsg = pJamRecorder->Init(); bRecorderInitialised = ( strRecorderErrMsg == QString::null ); bEnableRecording = bRecorderInitialised; + +#if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) +// TODO we should use the ConsoleWriterFactory() instead of qInfo() + qInfo() << "Recording state" << ( bEnableRecording ? "enabled" : "disabled" ); +#endif } else { @@ -97,6 +102,11 @@ void CJamController::SetRecordingDir ( QString newRecordingDir, strRecorderErrMsg = QString::null; bRecorderInitialised = false; bEnableRecording = false; + +#if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) +// TODO we should use the ConsoleWriterFactory() instead of qInfo() + qInfo() << "Recording state not initialised"; +#endif } if ( bRecorderInitialised ) diff --git a/src/serverdlg.cpp b/src/serverdlg.cpp index 8aac767e..76a4b8a6 100755 --- a/src/serverdlg.cpp +++ b/src/serverdlg.cpp @@ -123,29 +123,64 @@ CServerDlg::CServerDlg ( CServer* pNServP, cbxLocationCountry->setAccessibleName ( tr ( "Country where the server is located combo box" ) ); + // recording directory + pbtRecordingDir->setAccessibleName ( tr ( "Display dialog to select recording directory button" ) ); + pbtRecordingDir->setWhatsThis ( "" + tr ( "Main Recording Directory" ) + ": " + + tr ( "Click the button to open the dialog that allows the main recording directory to be selected." + "The chosen value must exist and be writeable (allow creation of sub-directories " + "by the user Jamulus is running as). " ) ); + + edtRecordingDir->setAccessibleName ( tr ( "Main recording directory text box (read-only)" ) ); + edtRecordingDir->setWhatsThis ( "" + tr ( "Main Recording Directory" ) + ": " + + tr ( "The current value of the main recording directory. " + "The chosen value must exist and be writeable (allow creation of sub-directories " + "by the user Jamulus is running as). " + "Click the button to open the dialog that allows the main recording directory to be selected." ) ); + + tbtClearRecordingDir->setAccessibleName ( tr ( "Clear the recording directory button" ) ); + tbtClearRecordingDir->setWhatsThis ( "" + tr ( "Clear Recording Directory" ) + ": " + + tr ( "Click the button to clear the currently selected recording directory. " + "This will prevent recording until a new value is selected.") ); + // enable recorder chbEnableRecorder->setAccessibleName( tr ( "Checkbox to turn on or off server recording" ) ); - chbEnableRecorder->setWhatsThis( "" + tr ( "Enable Recorder" ) + ":" + chbEnableRecorder->setWhatsThis( "" + tr ( "Enable Recorder" ) + ": " + tr ( "Checked when the recorder is enabled, otherwise unchecked. " "The recorder will run when a session is in progress, if (set up correctly and) enabled." ) ); // current session directory edtCurrentSessionDir->setAccessibleName( tr ( "Current session directory text box (read-only)" ) ); - edtCurrentSessionDir->setWhatsThis( "" + tr ( "Current Session Directory" ) + ":" - + tr ( "Enabled during recording and holds the current recording session directory. " - "Disabled after recording or when the recorder is not enabled." ) ); + edtCurrentSessionDir->setWhatsThis( "" + tr ( "Current Session Directory" ) + ": " + + tr ( "Enabled during recording and holds the current recording session directory. " + "Disabled after recording or when the recorder is not enabled." ) ); // recorder status lblRecorderStatus->setAccessibleName ( tr ( "Recorder status label" ) ); - lblRecorderStatus->setWhatsThis ( "" + tr ( "Recorder Status" ) + ":" - + tr ( "Displays the current status of the recorder." ) ); + lblRecorderStatus->setWhatsThis ( "" + tr ( "Recorder Status" ) + ": " + + tr ( "Displays the current status of the recorder. The following values are possible:" + "
" + "
Not initialised
" + "
No recording directory has been set or the value is not useable
" + "
Not enabled
" + "
Recording has been switched off" ) +#ifdef _WIN32 + + tr ( " by the UI checkbox
" ) +#else + + tr ( ", either by the UI checkbox or SIGUSR2 being received" ) +#endif + + tr ( "
Not recording
" + "
There is no one connected to the server to record
" + "
Recording
" + "
The performers are being recorded to the specified session directory
" + "
" ) + + tr ( "
NOTE: If the recording directory is not useable, " + "the problem will be displayed in place of the directory.") ); // new recording pbtNewRecording->setAccessibleName ( tr ( "Request new recording button" ) ); - pbtNewRecording->setWhatsThis ( "" + tr ( "New Recording" ) + ":" + pbtNewRecording->setWhatsThis ( "" + tr ( "New Recording" ) + ": " + tr ( "During a recording session, the button can be used to start a new recording." ) ); - // init system tray icon if ( bSystemTrayIconAvaialbe ) { @@ -289,22 +324,12 @@ lvwClients->setMinimumHeight ( 140 ); #endif // Recorder controls - if ( !pServer->GetRecorderInitialised() ) - { - // The recorder was not initialised successfully from the command line - // TODO: Once initialising from the GUI is implemented, remove - chbEnableRecorder->setVisible ( false ); - edtCurrentSessionDir->setVisible ( false ); - lblRecorderStatus->setVisible ( false ); - pbtNewRecording->setVisible ( false ); - } - + chbEnableRecorder->setCheckState ( Qt::CheckState::Checked ); // move to settings edtCurrentSessionDir->setText ( "" ); pbtNewRecording->setAutoDefault ( false ); - - // TODO: Not yet implemented, so hide them! - pbtRecordingDir->setVisible ( false ); - edtRecordingsDir->setVisible ( false ); + pbtRecordingDir->setAutoDefault ( false ); + edtRecordingDir->setText( pServer->GetRecordingDir() ); + tbtClearRecordingDir->setText ( "(X)" ); // someone make me a nice icon? UpdateRecorderStatus ( QString::null ); @@ -372,9 +397,16 @@ lvwClients->setMinimumHeight ( 140 ); this, &CServerDlg::OnCentServAddrTypeActivated ); // push buttons + QObject::connect ( pbtRecordingDir, &QPushButton::released, + this, &CServerDlg::OnRecordingDirClicked ); + QObject::connect ( pbtNewRecording, &QPushButton::released, this, &CServerDlg::OnNewRecordingClicked ); + // tool buttons + QObject::connect ( tbtClearRecordingDir, &QToolButton::released, + this, &CServerDlg::OnClearRecordingDirClicked ); + // timers QObject::connect ( &Timer, &QTimer::timeout, this, &CServerDlg::OnTimer ); @@ -539,6 +571,30 @@ void CServerDlg::OnStopRecorder() UpdateRecorderStatus ( QString::null ); } +void CServerDlg::OnRecordingDirClicked() +{ + // get the current value from pServer + QString currentValue = pServer->GetRecordingDir(); + QString newRecordingDir = QFileDialog::getExistingDirectory ( this, + tr ( "Select Main Recording Directory" ), + currentValue, + QFileDialog::ShowDirsOnly | QFileDialog::DontUseNativeDialog ); + if ( newRecordingDir != currentValue ) + { + pServer->SetRecordingDir ( newRecordingDir ); + UpdateRecorderStatus ( QString::null ); + } +} + +void CServerDlg::OnClearRecordingDirClicked() +{ + if ( pServer->GetRecorderErrMsg() != QString::null || pServer->GetRecordingDir() != "" ) + { + pServer->SetRecordingDir ( "" ); + UpdateRecorderStatus ( QString::null ); + } +} + void CServerDlg::OnSysTrayActivated ( QSystemTrayIcon::ActivationReason ActReason ) { // on double click on the icon, show window in fore ground @@ -710,44 +766,52 @@ void CServerDlg::ModifyAutoStartEntry ( const bool bDoAutoStart ) void CServerDlg::UpdateRecorderStatus ( QString sessionDir ) { - if ( !pServer->GetRecorderInitialised() ) - { - // everything should be hidden. - return; - } - - Qt::CheckState csIsEnabled; QString currentSessionDir = edtCurrentSessionDir->text(); + QString errMsg = pServer->GetRecorderErrMsg(); bool bIsRecording = false; QString strRecorderStatus; + QString strRecordingDir; - if ( pServer->GetRecordingEnabled() ) + if ( pServer->GetRecorderInitialised() ) { - csIsEnabled = Qt::CheckState::Checked; - if ( pServer->IsRunning() ) + strRecordingDir = pServer->GetRecordingDir(); + chbEnableRecorder->setEnabled ( true ); + if ( pServer->GetRecordingEnabled() ) { - currentSessionDir = sessionDir != QString::null ? sessionDir : ""; - strRecorderStatus = tr ( "Recording" ); - bIsRecording = true; + if ( pServer->IsRunning() ) + { + edtCurrentSessionDir->setText ( sessionDir != QString::null ? sessionDir : "" ); + strRecorderStatus = tr ( "Recording" ); + bIsRecording = true; + } + else + { + strRecorderStatus = tr ( "Not recording" ); + } } else { - strRecorderStatus = tr ( "Not recording" ); + strRecorderStatus = tr ( "Not enabled" ); } } else { - csIsEnabled = Qt::CheckState::Unchecked; - strRecorderStatus = tr ( "Not enabled" ); + strRecordingDir = pServer->GetRecorderErrMsg(); + if ( strRecordingDir == QString::null ) + { + strRecordingDir = pServer->GetRecordingDir(); + } + else + { + strRecordingDir = tr ( "ERROR" ) + ": " + strRecordingDir; + } + chbEnableRecorder->setEnabled ( false ); + strRecorderStatus = tr ( "Not initialised" ); } - chbEnableRecorder->setCheckState ( csIsEnabled ); - + edtRecordingDir->setText( strRecordingDir ); edtCurrentSessionDir->setEnabled ( bIsRecording ); - edtCurrentSessionDir->setText ( currentSessionDir ); - lblRecorderStatus->setText ( strRecorderStatus ); - pbtNewRecording->setEnabled ( bIsRecording ); } diff --git a/src/serverdlg.h b/src/serverdlg.h index 47c56b09..e4f7e603 100755 --- a/src/serverdlg.h +++ b/src/serverdlg.h @@ -35,6 +35,7 @@ #include #include #include +#include #include "global.h" #include "server.h" #include "settings.h" @@ -111,6 +112,8 @@ public slots: { if ( e->key() != Qt::Key_Escape ) QDialog::keyPressEvent ( e ); } void OnNewRecordingClicked() { pServer->RequestNewRecording(); } + void OnRecordingDirClicked(); + void OnClearRecordingDirClicked(); void OnRecordingSessionStarted ( QString sessionDir ) { UpdateRecorderStatus ( sessionDir ); } }; diff --git a/src/serverdlgbase.ui b/src/serverdlgbase.ui index 418a07c3..9a57988a 100755 --- a/src/serverdlgbase.ui +++ b/src/serverdlgbase.ui @@ -169,12 +169,34 @@ + + + + + + Recording Directory + + + + + + + true + + + + + + + + + - Enable jam recorder + Enable Jam Recorder @@ -195,25 +217,7 @@ - New recording - - - - - - - - - - - Recordings folder - - - - - - - true + New Recording @@ -276,11 +280,12 @@ edtServerName edtLocationCity cbxLocationCountry + pbtRecordingDir + edtRecordingDir + tbtClearRecordingDir chbEnableRecorder edtCurrentSessionDir pbtNewRecording - pbtRecordingDir - edtRecordingsDir