]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/assets/player/videojs-components/resolution-menu-item.ts
Fix some old typing issues
[github/Chocobozzz/PeerTube.git] / client / src / assets / player / videojs-components / resolution-menu-item.ts
index 6c42fefd2f1eb60109c9e4ada9ac44ac1ee413e3..6047f52f7878623cee01a0b69f8794dd925e5fc6 100644 (file)
@@ -1,83 +1,77 @@
-// FIXME: something weird with our path definition in tsconfig and typings
-// @ts-ignore
-import { Player } from 'video.js'
+import videojs from 'video.js'
 
-import { AutoResolutionUpdateData, ResolutionUpdateData, VideoJSComponentInterface, videojsUntyped } from '../peertube-videojs-typings'
+const MenuItem = videojs.getComponent('MenuItem')
+
+export interface ResolutionMenuItemOptions extends videojs.MenuItemOptions {
+  id: number
+}
 
-const MenuItem: VideoJSComponentInterface = videojsUntyped.getComponent('MenuItem')
 class ResolutionMenuItem extends MenuItem {
-  private readonly id: number
+  private readonly resolutionId: number
   private readonly label: string
-  // Only used for the automatic item
-  private readonly labels: { [id: number]: string }
-  private readonly callback: Function
 
-  private autoResolutionPossible: boolean
-  private currentResolutionLabel: string
+  private autoResolutionEnabled: boolean
+  private autoResolutionChosen: string
 
-  constructor (player: Player, options: any) {
+  constructor (player: videojs.Player, options?: ResolutionMenuItemOptions) {
     options.selectable = true
 
     super(player, options)
 
-    this.autoResolutionPossible = true
-    this.currentResolutionLabel = ''
+    this.autoResolutionEnabled = true
+    this.autoResolutionChosen = ''
 
+    this.resolutionId = options.id
     this.label = options.label
-    this.labels = options.labels
-    this.id = options.id
-    this.callback = options.callback
 
-    player.peertube().on('resolutionChange', (_: any, data: ResolutionUpdateData) => this.updateSelection(data))
+    player.peertubeResolutions().on('resolutionChanged', () => this.updateSelection())
 
     // We only want to disable the "Auto" item
-    if (this.id === -1) {
-      player.peertube().on('autoResolutionChange', (_: any, data: AutoResolutionUpdateData) => this.updateAutoResolution(data))
+    if (this.resolutionId === -1) {
+      player.peertubeResolutions().on('autoResolutionEnabledChanged', () => this.updateAutoResolution())
     }
   }
 
   handleClick (event: any) {
     // Auto button disabled?
-    if (this.autoResolutionPossible === false && this.id === -1) return
+    if (this.autoResolutionEnabled === false && this.resolutionId === -1) return
 
     super.handleClick(event)
 
-    this.callback(this.id, 'video')
+    this.player().peertubeResolutions().select({ id: this.resolutionId, byEngine: false })
   }
 
-  updateSelection (data: ResolutionUpdateData) {
-    if (this.id === -1) {
-      this.currentResolutionLabel = this.labels[data.id]
-    }
+  updateSelection () {
+    const selectedResolution = this.player().peertubeResolutions().getSelected()
 
-    // Automatic resolution only
-    if (data.auto === true) {
-      this.selected(this.id === -1)
-      return
+    if (this.resolutionId === -1) {
+      this.autoResolutionChosen = this.player().peertubeResolutions().getAutoResolutionChosen()?.label
     }
 
-    this.selected(this.id === data.id)
+    this.selected(this.resolutionId === selectedResolution.id)
   }
 
-  updateAutoResolution (data: AutoResolutionUpdateData) {
+  updateAutoResolution () {
+    const enabled = this.player().peertubeResolutions().isAutoResolutionEnabeld()
+
     // Check if the auto resolution is enabled or not
-    if (data.possible === false) {
+    if (enabled === false) {
       this.addClass('disabled')
     } else {
       this.removeClass('disabled')
     }
 
-    this.autoResolutionPossible = data.possible
+    this.autoResolutionEnabled = enabled
   }
 
   getLabel () {
-    if (this.id === -1) {
-      return this.label + ' <small>' + this.currentResolutionLabel + '</small>'
+    if (this.resolutionId === -1) {
+      return this.label + ' <small>' + this.autoResolutionChosen + '</small>'
     }
 
     return this.label
   }
 }
-MenuItem.registerComponent('ResolutionMenuItem', ResolutionMenuItem)
+videojs.registerComponent('ResolutionMenuItem', ResolutionMenuItem)
 
 export { ResolutionMenuItem }