import { ChangeDetectorRef, Component, ElementRef, Inject, LOCALE_ID, NgZone, OnDestroy, OnInit, ViewChild } from '@angular/core'
import { ActivatedRoute, Router } from '@angular/router'
import { RedirectService } from '@app/core/routing/redirect.service'
-import { peertubeLocalStorage } from '@app/shared/misc/peertube-local-storage'
+import { peertubeLocalStorage, peertubeSessionStorage } from '@app/shared/misc/peertube-web-storage'
import { VideoSupportComponent } from '@app/videos/+video-watch/modal/video-support.component'
import { MetaService } from '@ngx-meta/core'
import { AuthUser, Notifier, ServerService } from '@app/core'
import { HooksService } from '@app/core/plugins/hooks.service'
import { PlatformLocation } from '@angular/common'
import { randomInt } from '@shared/core-utils/miscs/miscs'
+import { RecommendedVideosComponent } from '../recommendations/recommended-videos.component'
@Component({
selector: 'my-video-watch',
likesBarTooltipText = ''
hasAlreadyAcceptedPrivacyConcern = false
remoteServerDown = false
- hotkeys: Hotkey[]
+ hotkeys: Hotkey[] = []
private nextVideoUuid = ''
private currentTime: number
if (this.queryParamsSub) this.queryParamsSub.unsubscribe()
// Unbind hotkeys
- if (this.isUserLoggedIn()) this.hotkeysService.remove(this.hotkeys)
+ this.hotkeysService.remove(this.hotkeys)
}
setLike () {
const { playerMode, playerOptions } = await this.hooks.wrapFun(
this.buildPlayerManagerOptions.bind(this),
params,
+ 'video-watch',
+ 'filter:internal.video-watch.player.build-options.params',
'filter:internal.video-watch.player.build-options.result'
)
this.player.one('ended', () => {
if (this.playlist) {
- this.zone.run(() => this.videoWatchPlaylist.navigateToNextPlaylistVideo())
- } else if (this.user && this.user.autoPlayNextVideo) {
+ if (
+ this.user && this.user.autoPlayNextVideoPlaylist ||
+ peertubeSessionStorage.getItem(VideoWatchPlaylistComponent.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO_PLAYLIST) === 'true'
+ ) this.zone.run(() => this.videoWatchPlaylist.navigateToNextPlaylistVideo())
+ } else if (
+ this.user && this.user.autoPlayNextVideo ||
+ peertubeSessionStorage.getItem(RecommendedVideosComponent.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO) === 'true'
+ ) {
this.zone.run(() => this.autoplayNext())
}
})
this.player.one('stopped', () => {
if (this.playlist) {
- this.zone.run(() => this.videoWatchPlaylist.navigateToNextPlaylistVideo())
+ if (
+ this.user && this.user.autoPlayNextVideoPlaylist ||
+ peertubeSessionStorage.getItem(VideoWatchPlaylistComponent.SESSION_STORAGE_AUTO_PLAY_NEXT_VIDEO_PLAYLIST) === 'true'
+ ) this.zone.run(() => this.videoWatchPlaylist.navigateToNextPlaylistVideo())
}
})
}
}
- private initHotkeys () {
- this.hotkeys = [
- new Hotkey('shift+l', () => {
- this.setLike()
- return false
- }, undefined, this.i18n('Like the video')),
-
- new Hotkey('shift+d', () => {
- this.setDislike()
- return false
- }, undefined, this.i18n('Dislike the video')),
-
- new Hotkey('shift+s', () => {
- this.subscribeButton.subscribed ? this.subscribeButton.unsubscribe() : this.subscribeButton.subscribe()
- return false
- }, undefined, this.i18n('Subscribe to the account'))
- ]
- if (this.isUserLoggedIn()) this.hotkeysService.add(this.hotkeys)
- }
-
private buildPlayerManagerOptions (params: {
video: VideoDetails,
videoCaptions: VideoCaption[],
}) {
const { video, videoCaptions, urlOptions, user } = params
- let startTime = timeToInt(urlOptions.startTime) || (video.userHistory ? video.userHistory.currentTime : 0)
+ let startTime = timeToInt(urlOptions.startTime) || (video.userHistory && !this.playlist ? video.userHistory.currentTime : 0)
// If we are at the end of the video, reset the timer
if (video.duration - startTime <= 1) startTime = 0
this.player.pause()
}
+
+ private initHotkeys () {
+ this.hotkeys = [
+ // These hotkeys are managed by the player
+ new Hotkey('f', e => e, undefined, this.i18n('Enter/exit fullscreen (requires player focus)')),
+ new Hotkey('space', e => e, undefined, this.i18n('Play/Pause the video (requires player focus)')),
+ new Hotkey('m', e => e, undefined, this.i18n('Mute/unmute the video (requires player focus)')),
+
+ new Hotkey('0-9', e => e, undefined, this.i18n('Skip to a percentage of the video: 0 is 0% and 9 is 90% (requires player focus)')),
+
+ new Hotkey('up', e => e, undefined, this.i18n('Increase the volume (requires player focus)')),
+ new Hotkey('down', e => e, undefined, this.i18n('Decrease the volume (requires player focus)')),
+
+ new Hotkey('right', e => e, undefined, this.i18n('Seek the video forward (requires player focus)')),
+ new Hotkey('left', e => e, undefined, this.i18n('Seek the video backward (requires player focus)')),
+
+ new Hotkey('>', e => e, undefined, this.i18n('Increase playback rate (requires player focus)')),
+ new Hotkey('<', e => e, undefined, this.i18n('Decrease playback rate (requires player focus)')),
+
+ new Hotkey('.', e => e, undefined, this.i18n('Navigate in the video frame by frame (requires player focus)'))
+ ]
+
+ if (this.isUserLoggedIn()) {
+ this.hotkeys = this.hotkeys.concat([
+ new Hotkey('shift+l', () => {
+ this.setLike()
+ return false
+ }, undefined, this.i18n('Like the video')),
+
+ new Hotkey('shift+d', () => {
+ this.setDislike()
+ return false
+ }, undefined, this.i18n('Dislike the video')),
+
+ new Hotkey('shift+s', () => {
+ this.subscribeButton.subscribed ? this.subscribeButton.unsubscribe() : this.subscribeButton.subscribe()
+ return false
+ }, undefined, this.i18n('Subscribe to the account'))
+ ])
+ }
+
+ this.hotkeysService.add(this.hotkeys)
+ }
}