Skip to content

Commit 07dc72b

Browse files
committed
Stop recording and display alert if recording directory becomes invalid during acquisition
1 parent fb88ef4 commit 07dc72b

5 files changed

Lines changed: 37 additions & 17 deletions

File tree

Source/Processors/RecordNode/DiskMonitor/DiskSpaceChecker.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ void DiskSpaceChecker::checkDirectoryAndDiskSpace()
6969
{
7070
if (! recordNode->getParameter ("directory")->isValid())
7171
{
72+
recordNode->getParameter ("directory")->valueChanged();
7273
notifyDirectoryInvalid();
7374
return;
7475
}
@@ -156,15 +157,22 @@ void DiskSpaceChecker::notifyDiskSpaceRemaining (float percentage)
156157

157158
void DiskSpaceChecker::notifyDirectoryInvalid()
158159
{
160+
bool recordingStopped = false;
161+
if (recordNode->getRecordingStatus())
162+
{
163+
CoreServices::setRecordingStatus (false);
164+
CoreServices::sendStatusMessage ("Recording stopped due to invalid directory.");
165+
recordingStopped = true;
166+
}
159167
std::lock_guard<std::mutex> lock (listenerMutex);
160168
for (auto listener : listeners)
161169
{
162170
if (listener != nullptr)
163171
{
164-
juce::MessageManager::callAsync ([listener]()
172+
juce::MessageManager::callAsync ([listener, recordingStopped]()
165173
{
166174
try {
167-
listener->directoryInvalid();
175+
listener->directoryInvalid (recordingStopped);
168176
} catch (const std::exception& e) {
169177
LOGE("Error notifying directory invalid: ", e.what());
170178
}

Source/Processors/RecordNode/DiskMonitor/DiskSpaceListener.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class DiskSpaceListener
3232
virtual ~DiskSpaceListener() = default;
3333
virtual void update (float dataRate, int64 bytesFree, float timeLeft) = 0;
3434
virtual void updateDiskSpace (float percentage) = 0;
35-
virtual void directoryInvalid() = 0;
35+
virtual void directoryInvalid(bool recordingStopped = false) = 0;
3636
virtual void lowDiskSpace() = 0;
3737
};
3838

Source/Processors/RecordNode/RecordNodeEditor.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,17 @@ void DiskMonitor::updateDiskSpace (float percentage)
200200
setFillPercentage (1.0f - percentage);
201201
}
202202

203-
void DiskMonitor::directoryInvalid()
203+
void DiskMonitor::directoryInvalid (bool recordingStopped)
204204
{
205205
setFillPercentage (1.0);
206206
setTooltip ("Invalid directory");
207+
208+
if (recordingStopped)
209+
{
210+
String msg = "Record Node (" + String (processor->getNodeId()) + ") - The selected recording path doesn't exist anymore.";
211+
msg += "\n\nPlease select a valid directory in the Record Node editor and restart the recording.";
212+
AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, "Recording Stopped", msg);
213+
}
207214
}
208215

209216
void DiskMonitor::lowDiskSpace()
@@ -325,30 +332,28 @@ RecordToggleButton::~RecordToggleButton() {}
325332

326333
void RecordToggleButton::paintButton (Graphics& g, bool isMouseOver, bool isButtonDown)
327334
{
328-
329335
float alpha = 1.0f;
330-
331-
if (!isEnabled())
336+
337+
if (! isEnabled())
332338
{
333339
alpha = 0.5f;
334340
}
335-
336-
g.setColour (Colour (0, 0, 0).withAlpha(alpha));
341+
342+
g.setColour (Colour (0, 0, 0).withAlpha (alpha));
337343
g.fillRoundedRectangle (0, 0, getWidth(), getHeight(), 4);
338344

339345
if (! getToggleState())
340346
{
341-
g.setColour (findColour (ThemeColours::widgetBackground).withAlpha(alpha));
347+
g.setColour (findColour (ThemeColours::widgetBackground).withAlpha (alpha));
342348
}
343349
else
344350
{
345-
g.setColour (Colour (255, 0, 0).withAlpha(alpha));
351+
g.setColour (Colour (255, 0, 0).withAlpha (alpha));
346352
}
347-
348353

349354
g.fillRoundedRectangle (1, 1, getWidth() - 2, getHeight() - 2, 3);
350355

351-
g.setColour (Colour (0, 0, 0).withAlpha(alpha));
356+
g.setColour (Colour (0, 0, 0).withAlpha (alpha));
352357
g.fillEllipse (0.35 * getWidth(), 0.35 * getHeight(), 0.3 * getWidth(), 0.3 * getHeight());
353358
}
354359

Source/Processors/RecordNode/RecordNodeEditor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ class DiskMonitor : public LevelMonitor, public DiskSpaceListener
161161
void updateDiskSpace (float percentage) override;
162162

163163
/** Responds to invalid directory */
164-
void directoryInvalid() override;
164+
void directoryInvalid(bool recordingStopped) override;
165165

166166
/** Responds to low disk space */
167167
void lowDiskSpace() override;

Source/UI/ControlPanel.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,8 +1174,6 @@ void ControlPanel::buttonClicked (Button* button)
11741174
if (! graph->allRecordNodeDirectoriesAreValid() && getAcquisitionState())
11751175
{
11761176
recordButton->setToggleState (false, dontSendNotification);
1177-
playButton->setToggleState (false, dontSendNotification);
1178-
stopAcquisition();
11791177

11801178
if (! isConsoleApp)
11811179
{
@@ -1408,7 +1406,16 @@ Array<String> ControlPanel::getRecentlyUsedFilenames()
14081406

14091407
void ControlPanel::setRecentlyUsedFilenames (const Array<String>& filenames)
14101408
{
1411-
filenameComponent->setRecentlyUsedFilenames (StringArray (filenames));
1409+
StringArray validFilenames;
1410+
for (const auto& filename : filenames)
1411+
{
1412+
if (File (filename).exists())
1413+
{
1414+
validFilenames.addIfNotAlreadyThere (filename);
1415+
}
1416+
}
1417+
1418+
filenameComponent->setRecentlyUsedFilenames (validFilenames);
14121419
}
14131420

14141421
static void forceFilenameEditor (int result, ControlPanel* panel)

0 commit comments

Comments
 (0)