From f2a16d93b476aff16d5353e4d44350298ec7e01c Mon Sep 17 00:00:00 2001 From: kontrollanten <6680299+kontrollanten@users.noreply.github.com> Date: Wed, 28 Sep 2022 11:52:23 +0200 Subject: Handle network issues in video player (#5138) * feat(client/player): handle network offline * feat(client/player): human friendly err msg * feat(client/player): handle broken resolutions When an error occurs for a resolution, remove the resolution and try with another resolution. * fix(client/player): prevent err handl when offline * fix(client/player): localize offline text --- .../player/shared/settings/resolution-menu-button.ts | 19 +++++++++++++++++++ .../player/shared/settings/resolution-menu-item.ts | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'client/src/assets/player/shared/settings') diff --git a/client/src/assets/player/shared/settings/resolution-menu-button.ts b/client/src/assets/player/shared/settings/resolution-menu-button.ts index a0b349f67..672411c11 100644 --- a/client/src/assets/player/shared/settings/resolution-menu-button.ts +++ b/client/src/assets/player/shared/settings/resolution-menu-button.ts @@ -12,6 +12,7 @@ class ResolutionMenuButton extends MenuButton { this.controlText('Quality') player.peertubeResolutions().on('resolutionsAdded', () => this.buildQualities()) + player.peertubeResolutions().on('resolutionRemoved', () => this.cleanupQualities()) // For parent player.peertubeResolutions().on('resolutionChanged', () => { @@ -82,6 +83,24 @@ class ResolutionMenuButton extends MenuButton { this.trigger('menuChanged') } + + private cleanupQualities () { + const resolutions = this.player().peertubeResolutions().getResolutions() + + this.menu.children().forEach((children: ResolutionMenuItem) => { + if (children.resolutionId === undefined) { + return + } + + if (resolutions.find(r => r.id === children.resolutionId)) { + return + } + + this.menu.removeChild(children) + }) + + this.trigger('menuChanged') + } } videojs.registerComponent('ResolutionMenuButton', ResolutionMenuButton) diff --git a/client/src/assets/player/shared/settings/resolution-menu-item.ts b/client/src/assets/player/shared/settings/resolution-menu-item.ts index 678eb368b..c59b8b891 100644 --- a/client/src/assets/player/shared/settings/resolution-menu-item.ts +++ b/client/src/assets/player/shared/settings/resolution-menu-item.ts @@ -7,7 +7,7 @@ export interface ResolutionMenuItemOptions extends videojs.MenuItemOptions { } class ResolutionMenuItem extends MenuItem { - private readonly resolutionId: number + readonly resolutionId: number private readonly label: string private autoResolutionEnabled: boolean -- cgit v1.2.3