1
0
Fork 0

Handle playlist without videos available

This commit is contained in:
Chocobozzz 2022-06-03 14:18:28 +02:00
parent 010382b603
commit 5a2f775a21
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
6 changed files with 22 additions and 4 deletions

View File

@ -34,6 +34,10 @@
This live has ended. This live has ended.
</div> </div>
<div i18n class="alert alert-warning" *ngIf="noPlaylistVideoFound">
There are no videos available in this playlist.
</div>
<div class="alert alert-danger" *ngIf="video?.blacklisted"> <div class="alert alert-danger" *ngIf="video?.blacklisted">
<div class="blocked-label" i18n>This video is blocked.</div> <div class="blocked-label" i18n>This video is blocked.</div>
{{ video.blacklistedReason }} {{ video.blacklistedReason }}

View File

@ -9,6 +9,7 @@ import { VideoState } from '@shared/models'
}) })
export class VideoAlertComponent { export class VideoAlertComponent {
@Input() video: VideoDetails @Input() video: VideoDetails
@Input() noPlaylistVideoFound: boolean
isVideoToTranscode () { isVideoToTranscode () {
return this.video && this.video.state.id === VideoState.TO_TRANSCODE return this.video && this.video.state.id === VideoState.TO_TRANSCODE

View File

@ -1,5 +1,5 @@
<div <div
*ngIf="playlist && currentPlaylistPosition" class="playlist" *ngIf="playlist && (currentPlaylistPosition || noPlaylistVideos)" class="playlist"
myInfiniteScroller [onItself]="true" (nearOfBottom)="onPlaylistVideosNearOfBottom()" myInfiniteScroller [onItself]="true" (nearOfBottom)="onPlaylistVideosNearOfBottom()"
> >
<div class="playlist-info"> <div class="playlist-info">

View File

@ -18,6 +18,7 @@ export class VideoWatchPlaylistComponent {
@Input() playlist: VideoPlaylist @Input() playlist: VideoPlaylist
@Output() videoFound = new EventEmitter<string>() @Output() videoFound = new EventEmitter<string>()
@Output() noVideoFound = new EventEmitter<void>()
playlistElements: VideoPlaylistElement[] = [] playlistElements: VideoPlaylistElement[] = []
playlistPagination: ComponentPagination = { playlistPagination: ComponentPagination = {
@ -28,10 +29,11 @@ export class VideoWatchPlaylistComponent {
autoPlayNextVideoPlaylist: boolean autoPlayNextVideoPlaylist: boolean
autoPlayNextVideoPlaylistSwitchText = '' autoPlayNextVideoPlaylistSwitchText = ''
loopPlaylist: boolean loopPlaylist: boolean
loopPlaylistSwitchText = '' loopPlaylistSwitchText = ''
noPlaylistVideos = false
noPlaylistVideos = false
currentPlaylistPosition: number currentPlaylistPosition: number
constructor ( constructor (
@ -100,6 +102,7 @@ export class VideoWatchPlaylistComponent {
const firstAvailableVideo = this.playlistElements.find(e => !!e.video) const firstAvailableVideo = this.playlistElements.find(e => !!e.video)
if (!firstAvailableVideo) { if (!firstAvailableVideo) {
this.noPlaylistVideos = true this.noPlaylistVideos = true
this.noVideoFound.emit()
return return
} }

View File

@ -11,12 +11,15 @@
<img class="placeholder-image" *ngIf="playerPlaceholderImgSrc" [src]="playerPlaceholderImgSrc" alt="Placeholder image" i18n-alt> <img class="placeholder-image" *ngIf="playerPlaceholderImgSrc" [src]="playerPlaceholderImgSrc" alt="Placeholder image" i18n-alt>
</div> </div>
<my-video-watch-playlist #videoWatchPlaylist [playlist]="playlist" (videoFound)="onPlaylistVideoFound($event)"></my-video-watch-playlist> <my-video-watch-playlist
#videoWatchPlaylist [playlist]="playlist"
(noVideoFound)="onPlaylistNoVideoFound()" (videoFound)="onPlaylistVideoFound($event)"
></my-video-watch-playlist>
<my-plugin-placeholder pluginId="player-next"></my-plugin-placeholder> <my-plugin-placeholder pluginId="player-next"></my-plugin-placeholder>
</div> </div>
<my-video-alert [video]="video"></my-video-alert> <my-video-alert [video]="video" [noPlaylistVideoFound]="noPlaylistVideoFound"></my-video-alert>
<!-- Video information --> <!-- Video information -->
<div *ngIf="video" class="margin-content video-bottom"> <div *ngIf="video" class="margin-content video-bottom">

View File

@ -72,6 +72,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
playlist: VideoPlaylist = null playlist: VideoPlaylist = null
remoteServerDown = false remoteServerDown = false
noPlaylistVideoFound = false
private nextVideoUUID = '' private nextVideoUUID = ''
private nextVideoTitle = '' private nextVideoTitle = ''
@ -178,6 +179,10 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
this.loadVideo(videoId) this.loadVideo(videoId)
} }
onPlaylistNoVideoFound () {
this.noPlaylistVideoFound = true
}
isUserLoggedIn () { isUserLoggedIn () {
return this.authService.isLoggedIn() return this.authService.isLoggedIn()
} }
@ -286,6 +291,8 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
private loadPlaylist (playlistId: string) { private loadPlaylist (playlistId: string) {
if (this.isSameElement(this.playlist, playlistId)) return if (this.isSameElement(this.playlist, playlistId)) return
this.noPlaylistVideoFound = false
this.playlistService.getVideoPlaylist(playlistId) this.playlistService.getVideoPlaylist(playlistId)
.subscribe({ .subscribe({
next: playlist => { next: playlist => {