screenshot: Show a special error when screencast ran out of disk space

Since we now propagate error types back to gnome-shell now, let's start
with showing a special error message in case the disk ran out of space,
which is probably the most typical error.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2976>
This commit is contained in:
Jonas Dreßler 2023-10-02 14:00:45 +02:00
parent 7133fac91f
commit ce613f5d15
3 changed files with 17 additions and 3 deletions

View File

@ -363,9 +363,15 @@ class Recorder extends Signals.EventEmitter {
case PipelineState.PLAYING:
case PipelineState.FLUSHING: {
const [error] = message.parse_error();
this._handleFatalPipelineError(
`GStreamer error while in state ${this._pipelineState}: ${error.message}`,
ScreencastErrors, ScreencastError.PIPELINE_ERROR);
if (error.matches(Gst.ResourceError, Gst.ResourceError.NO_SPACE_LEFT)) {
this._handleFatalPipelineError('Out of disk space',
ScreencastErrors, ScreencastError.OUT_OF_DISK_SPACE);
} else {
this._handleFatalPipelineError(
`GStreamer error while in state ${this._pipelineState}: ${error.message}`,
ScreencastErrors, ScreencastError.PIPELINE_ERROR);
}
break;
}

View File

@ -51,6 +51,7 @@ export const ScreencastError = {
ALREADY_RECORDING: 3,
RECORDER_ERROR: 4,
SERVICE_CRASH: 5,
OUT_OF_DISK_SPACE: 6,
};
export const ScreencastErrors =
registerErrorDomain('Screencast', ScreencastError);

View File

@ -2039,7 +2039,14 @@ export const ScreenshotUI = GObject.registerClass({
// Translators: notification title.
this._showNotification(_('Screencast failed to start'));
break;
case ScreencastPhase.RECORDING:
if (error.matches(ScreencastErrors, ScreencastError.OUT_OF_DISK_SPACE)) {
// Translators: notification title.
this._showNotification(_('Screencast ended: Out of disk space'));
return;
}
// Translators: notification title.
this._showNotification(_('Screencast ended unexpectedly'));
break;