mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-03-02 13:27:14 -05:00
Merge pull request #1924 from cg2121/stop-recording-disk-full
UI: Stop recording when disk space is low
This commit is contained in:
@@ -287,6 +287,10 @@ OBSBasic::OBSBasic(QWidget *parent)
|
||||
SLOT(UpdateCPUUsage()));
|
||||
cpuUsageTimer->start(3000);
|
||||
|
||||
diskFullTimer = new QTimer(this);
|
||||
connect(diskFullTimer, SIGNAL(timeout()), this,
|
||||
SLOT(CheckDiskSpaceRemaining()));
|
||||
|
||||
QAction *renameScene = new QAction(ui->scenesDock);
|
||||
renameScene->setShortcutContext(Qt::WidgetWithChildrenShortcut);
|
||||
connect(renameScene, SIGNAL(triggered()), this, SLOT(EditSceneName()));
|
||||
@@ -5320,6 +5324,12 @@ void OBSBasic::StartRecording()
|
||||
if (disableOutputsRef)
|
||||
return;
|
||||
|
||||
if (LowDiskSpace()) {
|
||||
DiskSpaceMessage();
|
||||
ui->recordButton->setChecked(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (api)
|
||||
api->on_event(OBS_FRONTEND_EVENT_RECORDING_STARTING);
|
||||
|
||||
@@ -5364,6 +5374,9 @@ void OBSBasic::RecordingStart()
|
||||
if (api)
|
||||
api->on_event(OBS_FRONTEND_EVENT_RECORDING_STARTED);
|
||||
|
||||
if (!diskFullTimer->isActive())
|
||||
diskFullTimer->start(1000);
|
||||
|
||||
OnActivate();
|
||||
UpdatePause();
|
||||
|
||||
@@ -5428,6 +5441,9 @@ void OBSBasic::RecordingStop(int code, QString last_error)
|
||||
if (api)
|
||||
api->on_event(OBS_FRONTEND_EVENT_RECORDING_STOPPED);
|
||||
|
||||
if (diskFullTimer->isActive())
|
||||
diskFullTimer->stop();
|
||||
|
||||
if (remuxAfterRecord)
|
||||
AutoRemux();
|
||||
|
||||
@@ -5486,6 +5502,12 @@ void OBSBasic::StartReplayBuffer()
|
||||
return;
|
||||
}
|
||||
|
||||
if (LowDiskSpace()) {
|
||||
DiskSpaceMessage();
|
||||
replayBufferButton->setChecked(false);
|
||||
return;
|
||||
}
|
||||
|
||||
obs_output_t *output = outputHandler->replayBuffer;
|
||||
obs_data_t *hotkeys = obs_hotkeys_save_output(output);
|
||||
obs_data_array_t *bindings =
|
||||
@@ -7496,3 +7518,42 @@ void OBSBasic::UpdatePause(bool activate)
|
||||
pause.reset();
|
||||
}
|
||||
}
|
||||
|
||||
#define MBYTE (1024ULL * 1024ULL)
|
||||
#define MBYTES_LEFT_STOP_REC 50ULL
|
||||
#define MAX_BYTES_LEFT (MBYTES_LEFT_STOP_REC * MBYTE)
|
||||
|
||||
void OBSBasic::DiskSpaceMessage()
|
||||
{
|
||||
blog(LOG_ERROR, "Recording stopped because of low disk space");
|
||||
|
||||
OBSMessageBox::critical(this, QTStr("Output.RecordNoSpace.Title"),
|
||||
QTStr("Output.RecordNoSpace.Msg"));
|
||||
}
|
||||
|
||||
bool OBSBasic::LowDiskSpace()
|
||||
{
|
||||
const char *mode = config_get_string(Config(), "Output", "Mode");
|
||||
const char *path =
|
||||
strcmp(mode, "Advanced")
|
||||
? config_get_string(Config(), "SimpleOutput",
|
||||
"FilePath")
|
||||
: config_get_string(Config(), "AdvOut", "RecFilePath");
|
||||
|
||||
uint64_t num_bytes = os_get_free_disk_space(path);
|
||||
|
||||
if (num_bytes < (MAX_BYTES_LEFT))
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
void OBSBasic::CheckDiskSpaceRemaining()
|
||||
{
|
||||
if (LowDiskSpace()) {
|
||||
StopRecording();
|
||||
StopReplayBuffer();
|
||||
|
||||
DiskSpaceMessage();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user