]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/assets/player/peertube-player-manager.ts
Cleanup player hotkeys
[github/Chocobozzz/PeerTube.git] / client / src / assets / player / peertube-player-manager.ts
index 230d6298bc114c8eccffcbc066e58e4a621ec045..d715adf569097c921bcffb1687371f88e1d39ba1 100644 (file)
@@ -1,6 +1,6 @@
 import 'videojs-hotkeys/videojs.hotkeys'
 import 'videojs-dock'
-import 'videojs-contextmenu-pt'
+import '@peertube/videojs-contextmenu'
 import './upnext/end-card'
 import './upnext/upnext-plugin'
 import './stats/stats-card'
@@ -21,6 +21,8 @@ import './videojs-components/settings-panel'
 import './videojs-components/settings-panel-child'
 import './videojs-components/theater-button'
 import './playlist/playlist-plugin'
+import './mobile/peertube-mobile-plugin'
+import './mobile/peertube-mobile-buttons'
 import videojs from 'video.js'
 import { HlsJsEngineSettings } from '@peertube/p2p-media-loader-hlsjs'
 import { PluginsManager } from '@root-helpers/plugins-manager'
@@ -31,7 +33,7 @@ import { copyToClipboard } from '../../root-helpers/utils'
 import { RedundancyUrlManager } from './p2p-media-loader/redundancy-url-manager'
 import { segmentUrlBuilderFactory } from './p2p-media-loader/segment-url-builder'
 import { segmentValidatorFactory } from './p2p-media-loader/segment-validator'
-import { getAverageBandwidthInStore, getStoredP2PEnabled, saveAverageBandwidth } from './peertube-player-local-storage'
+import { getAverageBandwidthInStore, saveAverageBandwidth } from './peertube-player-local-storage'
 import {
   NextPreviousVideoButtonOptions,
   P2PMediaLoaderPluginOptions,
@@ -43,7 +45,7 @@ import {
   VideoJSPluginOptions
 } from './peertube-videojs-typings'
 import { TranslationsManager } from './translations-manager'
-import { buildVideoOrPlaylistEmbed, getRtcConfig, isIOS, isSafari } from './utils'
+import { buildVideoOrPlaylistEmbed, getRtcConfig, isIOS, isMobile, isSafari } from './utils'
 
 // Change 'Playback Rate' to 'Speed' (smaller for our settings menu)
 (videojs.getComponent('PlaybackRateMenuButton') as any).prototype.controlText_ = 'Speed'
@@ -86,6 +88,7 @@ export interface CommonOptions extends CustomizationOptions {
   onPlayerElementChange: (element: HTMLVideoElement) => void
 
   autoplay: boolean
+  p2pEnabled: boolean
 
   nextVideo?: () => void
   hasNextVideo?: () => boolean
@@ -188,11 +191,15 @@ export class PeertubePlayerManager {
           videoEmbedTitle: options.common.embedTitle
         })
 
+        if (isMobile()) player.peertubeMobile()
+
         player.bezels()
+
         player.stats({
           videoUUID: options.common.videoUUID,
           videoIsLive: options.common.isLive,
-          mode
+          mode,
+          p2pEnabled: options.common.p2pEnabled
         })
 
         player.on('p2pInfo', (_, data: PlayerNetworkInfo) => {
@@ -319,6 +326,7 @@ export class PeertubePlayerManager {
       controlBar: {
         children: this.getControlBarChildren(mode, {
           videoShortUUID: commonOptions.videoShortUUID,
+          p2pEnabled: commonOptions.p2pEnabled,
 
           captions: commonOptions.captions,
           peertubeLink: commonOptions.peertubeLink,
@@ -361,8 +369,7 @@ export class PeertubePlayerManager {
     }
 
     let consumeOnly = false
-    // FIXME: typings
-    if (navigator && (navigator as any).connection && (navigator as any).connection.type === 'cellular') {
+    if ((navigator as any)?.connection?.type === 'cellular') {
       console.log('We are on a cellular connection: disabling seeding.')
       consumeOnly = true
     }
@@ -374,8 +381,8 @@ export class PeertubePlayerManager {
         rtcConfig: getRtcConfig(),
         requiredSegmentsPriority: 1,
         simultaneousHttpDownloads: 1,
-        segmentUrlBuilder: segmentUrlBuilderFactory(redundancyUrlManager),
-        useP2P: getStoredP2PEnabled(),
+        segmentUrlBuilder: segmentUrlBuilderFactory(redundancyUrlManager, 1),
+        useP2P: commonOptions.p2pEnabled,
         consumeOnly
       },
       segments: {
@@ -438,6 +445,7 @@ export class PeertubePlayerManager {
 
     const webtorrent = {
       autoplay,
+      playerRefusedP2P: commonOptions.p2pEnabled === false,
       videoDuration: commonOptions.videoDuration,
       playerElement: commonOptions.playerElement,
       videoFiles: webtorrentOptions.videoFiles.length !== 0
@@ -451,6 +459,7 @@ export class PeertubePlayerManager {
   }
 
   private static getControlBarChildren (mode: PlayerMode, options: {
+    p2pEnabled: boolean
     videoShortUUID: string
 
     peertubeLink: boolean
@@ -526,7 +535,9 @@ export class PeertubePlayerManager {
         }
       },
 
-      p2PInfoButton: {},
+      p2PInfoButton: {
+        p2pEnabled: options.p2pEnabled
+      },
 
       muteToggle: {},
       volumeControl: {},
@@ -676,9 +687,20 @@ export class PeertubePlayerManager {
               player.playbackRate(parseFloat(newValue.toFixed(2)))
             }
           },
-          frameByFrame: {
+          previousFrame: {
+            key: function (event: KeyboardEvent) {
+              return event.key === ','
+            },
+            handler: function (player: videojs.Player) {
+              player.pause()
+              // Calculate movement distance (assuming 30 fps)
+              const dist = 1 / 30
+              player.currentTime(player.currentTime() - dist)
+            }
+          },
+          nextFrame: {
             key: function (event: KeyboardEvent) {
-              return isNaked(event, '.')
+              return event.key === '.'
             },
             handler: function (player: videojs.Player) {
               player.pause()