diff --git a/addons/core/translations/resources/en-us.yaml b/addons/core/translations/resources/en-us.yaml
index 22204d6232..87c2966294 100644
--- a/addons/core/translations/resources/en-us.yaml
+++ b/addons/core/translations/resources/en-us.yaml
@@ -384,9 +384,9 @@ session-recording:
messages:
none:
title: Channel Playback
- missing:
- title: We can't play back this channel because the file is missing
- description: This likely means the connected storage bucket is misconfigured or the file was deleted.
+ error:
+ title: Playback error
+ description: This may mean the connected storage bucket is misconfigured, the file was deleted, or integrity validation failed.
link: Retrieving lost session recordings
not-supported:
title: Playback is not supported for this channel
diff --git a/ui/admin/app/routes/scopes/scope/session-recordings/session-recording/channels-by-connection/channel/index.js b/ui/admin/app/routes/scopes/scope/session-recordings/session-recording/channels-by-connection/channel/index.js
index fd3deeb4da..a4b45883f7 100644
--- a/ui/admin/app/routes/scopes/scope/session-recordings/session-recording/channels-by-connection/channel/index.js
+++ b/ui/admin/app/routes/scopes/scope/session-recordings/session-recording/channels-by-connection/channel/index.js
@@ -9,6 +9,7 @@ import { inject as service } from '@ember/service';
export default class ScopesScopeSessionRecordingsSessionRecordingChannelsByConnectionChannelIndexRoute extends Route {
// =services
@service can;
+ @service flashMessages;
// =methods
/**
@@ -24,7 +25,13 @@ export default class ScopesScopeSessionRecordingsSessionRecordingChannelsByConne
try {
asciicast = await channelRecording.getAsciicast();
} catch (e) {
- // no op
+ // Alert user of error occurred during download.
+ const error = e.errors[0];
+ this.flashMessages.danger(error.detail, {
+ notificationType: 'error',
+ sticky: true,
+ dismiss: (flash) => flash.destroyMessage(),
+ });
}
}
diff --git a/ui/admin/app/templates/scopes/scope/session-recordings/session-recording/channels-by-connection/channel/index.hbs b/ui/admin/app/templates/scopes/scope/session-recordings/session-recording/channels-by-connection/channel/index.hbs
index 1754bebba6..ec165ee8ea 100644
--- a/ui/admin/app/templates/scopes/scope/session-recordings/session-recording/channels-by-connection/channel/index.hbs
+++ b/ui/admin/app/templates/scopes/scope/session-recordings/session-recording/channels-by-connection/channel/index.hbs
@@ -14,21 +14,17 @@
{{#if (can 'getAsciicast channel-recording' @model.channelRecording)}}
{{! Was not able to download asciicast }}
diff --git a/ui/admin/tests/acceptance/session-recordings/session-recording/channels-by-connection/channel-test.js b/ui/admin/tests/acceptance/session-recordings/session-recording/channels-by-connection/channel-test.js
index 069231c33f..248150caa5 100644
--- a/ui/admin/tests/acceptance/session-recordings/session-recording/channels-by-connection/channel-test.js
+++ b/ui/admin/tests/acceptance/session-recordings/session-recording/channels-by-connection/channel-test.js
@@ -132,9 +132,10 @@ module(
// if there was an error player will not render
assert.dom('.session-recording-player').doesNotExist();
+ assert.dom('.hds-application-state__title').hasText('Playback error');
assert
- .dom('.hds-application-state__title')
- .hasText("We can't play back this channel because the file is missing");
+ .dom('.rose-notification-body')
+ .includesText('rpc error: code = Unknown');
});
test('user can navigate back to session recording screen', async function (assert) {
@@ -146,7 +147,7 @@ module(
assert.strictEqual(currentURL(), urls.sessionRecording);
});
- test('users can navigate to channel recording and incorrect url autocorrects', async function (assert) {
+ test('users can navigate to channel recording and incorrect url auto corrects', async function (assert) {
featuresService.enable('ssh-session-recording');
const sessionRecording = this.server.create('session-recording', {
scope: instances.scopes.global,