diff --git a/CHANGELOG.md b/CHANGELOG.md
index ca27aa3a5..4638cd6d5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,6 +17,7 @@
* Add `client.videos.resumable_upload.max_chunk_size` config option [#4857](https://github.com/Chocobozzz/PeerTube/pull/4857)
* Add `object_storage.upload_acl` config option [#4861](https://github.com/Chocobozzz/PeerTube/pull/4861)
* Add ability to set RTMP/RTMPS listening hostname using `rtmp.hostname`/`rtmps.hostname` and public RTMP/RTMPS hostname using `rtmp.public_hostname`/`rtmps.public_hostname`
+ * Removed `best` default trending algorithm. It is automatically used if using `hot` algorithm with a logged in user
### Docker
diff --git a/client/src/app/+videos/+video-watch/shared/information/video-alert.component.html b/client/src/app/+videos/+video-watch/shared/information/video-alert.component.html
index c6ffb1abd..be726c990 100644
--- a/client/src/app/+videos/+video-watch/shared/information/video-alert.component.html
+++ b/client/src/app/+videos/+video-watch/shared/information/video-alert.component.html
@@ -34,6 +34,10 @@
This live has ended.
+
This video is blocked.
{{ video.blacklistedReason }}
diff --git a/client/src/app/+videos/+video-watch/shared/information/video-alert.component.ts b/client/src/app/+videos/+video-watch/shared/information/video-alert.component.ts
index 79b56705f..ba79fabc8 100644
--- a/client/src/app/+videos/+video-watch/shared/information/video-alert.component.ts
+++ b/client/src/app/+videos/+video-watch/shared/information/video-alert.component.ts
@@ -9,6 +9,7 @@ import { VideoState } from '@shared/models'
})
export class VideoAlertComponent {
@Input() video: VideoDetails
+ @Input() noPlaylistVideoFound: boolean
isVideoToTranscode () {
return this.video && this.video.state.id === VideoState.TO_TRANSCODE
diff --git a/client/src/app/+videos/+video-watch/shared/playlist/video-watch-playlist.component.html b/client/src/app/+videos/+video-watch/shared/playlist/video-watch-playlist.component.html
index da81d76d1..f5dd352a3 100644
--- a/client/src/app/+videos/+video-watch/shared/playlist/video-watch-playlist.component.html
+++ b/client/src/app/+videos/+video-watch/shared/playlist/video-watch-playlist.component.html
@@ -1,5 +1,5 @@
diff --git a/client/src/app/+videos/+video-watch/shared/playlist/video-watch-playlist.component.ts b/client/src/app/+videos/+video-watch/shared/playlist/video-watch-playlist.component.ts
index 879d296a7..ec85db0ff 100644
--- a/client/src/app/+videos/+video-watch/shared/playlist/video-watch-playlist.component.ts
+++ b/client/src/app/+videos/+video-watch/shared/playlist/video-watch-playlist.component.ts
@@ -18,6 +18,7 @@ export class VideoWatchPlaylistComponent {
@Input() playlist: VideoPlaylist
@Output() videoFound = new EventEmitter
()
+ @Output() noVideoFound = new EventEmitter()
playlistElements: VideoPlaylistElement[] = []
playlistPagination: ComponentPagination = {
@@ -28,10 +29,11 @@ export class VideoWatchPlaylistComponent {
autoPlayNextVideoPlaylist: boolean
autoPlayNextVideoPlaylistSwitchText = ''
+
loopPlaylist: boolean
loopPlaylistSwitchText = ''
- noPlaylistVideos = false
+ noPlaylistVideos = false
currentPlaylistPosition: number
constructor (
@@ -100,6 +102,7 @@ export class VideoWatchPlaylistComponent {
const firstAvailableVideo = this.playlistElements.find(e => !!e.video)
if (!firstAvailableVideo) {
this.noPlaylistVideos = true
+ this.noVideoFound.emit()
return
}
diff --git a/client/src/app/+videos/+video-watch/video-watch.component.html b/client/src/app/+videos/+video-watch/video-watch.component.html
index 4c15ae3d7..1ea0cf6b8 100644
--- a/client/src/app/+videos/+video-watch/video-watch.component.html
+++ b/client/src/app/+videos/+video-watch/video-watch.component.html
@@ -11,12 +11,15 @@
-
+
-
+
diff --git a/client/src/app/+videos/+video-watch/video-watch.component.ts b/client/src/app/+videos/+video-watch/video-watch.component.ts
index 5fa31ec63..d05f08a5f 100644
--- a/client/src/app/+videos/+video-watch/video-watch.component.ts
+++ b/client/src/app/+videos/+video-watch/video-watch.component.ts
@@ -72,6 +72,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
playlist: VideoPlaylist = null
remoteServerDown = false
+ noPlaylistVideoFound = false
private nextVideoUUID = ''
private nextVideoTitle = ''
@@ -178,6 +179,10 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
this.loadVideo(videoId)
}
+ onPlaylistNoVideoFound () {
+ this.noPlaylistVideoFound = true
+ }
+
isUserLoggedIn () {
return this.authService.isLoggedIn()
}
@@ -286,6 +291,8 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
private loadPlaylist (playlistId: string) {
if (this.isSameElement(this.playlist, playlistId)) return
+ this.noPlaylistVideoFound = false
+
this.playlistService.getVideoPlaylist(playlistId)
.subscribe({
next: playlist => {
diff --git a/client/src/app/+videos/video-list/videos-list-common-page.component.ts b/client/src/app/+videos/video-list/videos-list-common-page.component.ts
index 72c7e1ef6..d2782036b 100644
--- a/client/src/app/+videos/video-list/videos-list-common-page.component.ts
+++ b/client/src/app/+videos/video-list/videos-list-common-page.component.ts
@@ -173,6 +173,10 @@ export class VideosListCommonPageComponent implements OnInit, OnDestroy, Disable
case 'most-liked':
return '-likes'
+ // We'll automatically apply "best" sort if using "hot" sort with a logged user
+ case 'best':
+ return '-hot'
+
default:
return '-' + algorithm as VideoSortField
}
diff --git a/config/default.yaml b/config/default.yaml
index c0d17decf..f7c9b620c 100644
--- a/config/default.yaml
+++ b/config/default.yaml
@@ -181,7 +181,6 @@ trending:
interval_days: 7 # Compute trending videos for the last x days
algorithms:
enabled:
- - 'best' # adaptation of Reddit's 'Best' algorithm (Hot minus History)
- 'hot' # adaptation of Reddit's 'Hot' algorithm
- 'most-viewed' # default, used initially by PeerTube as the trending page
- 'most-liked'
diff --git a/config/production.yaml.example b/config/production.yaml.example
index 8fd8d805f..a36f4979b 100644
--- a/config/production.yaml.example
+++ b/config/production.yaml.example
@@ -177,7 +177,6 @@ trending:
interval_days: 7 # Compute trending videos for the last x days
algorithms:
enabled:
- - 'best' # adaptation of Reddit's 'Best' algorithm (Hot minus History)
- 'hot' # adaptation of Reddit's 'Hot' algorithm
- 'most-viewed' # default, used initially by PeerTube as the trending page
- 'most-liked'
diff --git a/server/controllers/download.ts b/server/controllers/download.ts
index 43d525f83..a270180c0 100644
--- a/server/controllers/download.ts
+++ b/server/controllers/download.ts
@@ -86,7 +86,9 @@ async function downloadVideoFile (req: express.Request, res: express.Response) {
}
await VideoPathManager.Instance.makeAvailableVideoFile(videoFile.withVideoOrPlaylist(video), path => {
- const filename = `${video.name}-${videoFile.resolution}p${videoFile.extname}`
+ // Express uses basename on filename parameter
+ const videoName = video.name.replace(/[/\\]/g, '_')
+ const filename = `${videoName}-${videoFile.resolution}p${videoFile.extname}`
return res.download(path, filename)
})
diff --git a/server/tests/api/check-params/config.ts b/server/tests/api/check-params/config.ts
index c8dbbf797..99fb24a5b 100644
--- a/server/tests/api/check-params/config.ts
+++ b/server/tests/api/check-params/config.ts
@@ -165,7 +165,7 @@ describe('Test config API validators', function () {
trending: {
videos: {
algorithms: {
- enabled: [ 'best', 'hot', 'most-viewed', 'most-liked' ],
+ enabled: [ 'hot', 'most-viewed', 'most-liked' ],
default: 'most-viewed'
}
}
diff --git a/server/tests/api/server/config.ts b/server/tests/api/server/config.ts
index f31012a5c..0f2fb5493 100644
--- a/server/tests/api/server/config.ts
+++ b/server/tests/api/server/config.ts
@@ -367,7 +367,7 @@ const newCustomConfig: CustomConfig = {
trending: {
videos: {
algorithms: {
- enabled: [ 'best', 'hot', 'most-viewed', 'most-liked' ],
+ enabled: [ 'hot', 'most-viewed', 'most-liked' ],
default: 'hot'
}
}
diff --git a/shared/server-commands/server/config-command.ts b/shared/server-commands/server/config-command.ts
index ed4961bc3..5320dead4 100644
--- a/shared/server-commands/server/config-command.ts
+++ b/shared/server-commands/server/config-command.ts
@@ -356,7 +356,7 @@ export class ConfigCommand extends AbstractCommand {
trending: {
videos: {
algorithms: {
- enabled: [ 'best', 'hot', 'most-viewed', 'most-liked' ],
+ enabled: [ 'hot', 'most-viewed', 'most-liked' ],
default: 'hot'
}
}