aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/controllers/static.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/controllers/static.ts')
-rw-r--r--server/controllers/static.ts61
1 files changed, 53 insertions, 8 deletions
diff --git a/server/controllers/static.ts b/server/controllers/static.ts
index 0f4772310..06123518f 100644
--- a/server/controllers/static.ts
+++ b/server/controllers/static.ts
@@ -19,6 +19,9 @@ import { join } from 'path'
19import { root } from '../helpers/core-utils' 19import { root } from '../helpers/core-utils'
20import { CONFIG } from '../initializers/config' 20import { CONFIG } from '../initializers/config'
21import { getPreview, getVideoCaption } from './lazy-static' 21import { getPreview, getVideoCaption } from './lazy-static'
22import { VideoStreamingPlaylistType } from '@shared/models/videos/video-streaming-playlist.type'
23import { MVideoFile, MVideoFullLight } from '@server/typings/models'
24import { getTorrentFilePath, getVideoFilePath } from '@server/lib/video-paths'
22 25
23const staticRouter = express.Router() 26const staticRouter = express.Router()
24 27
@@ -39,6 +42,11 @@ staticRouter.use(
39 asyncMiddleware(videosGetValidator), 42 asyncMiddleware(videosGetValidator),
40 asyncMiddleware(downloadTorrent) 43 asyncMiddleware(downloadTorrent)
41) 44)
45staticRouter.use(
46 STATIC_DOWNLOAD_PATHS.TORRENTS + ':id-:resolution([0-9]+)-hls.torrent',
47 asyncMiddleware(videosGetValidator),
48 asyncMiddleware(downloadHLSVideoFileTorrent)
49)
42 50
43// Videos path for webseeding 51// Videos path for webseeding
44staticRouter.use( 52staticRouter.use(
@@ -58,6 +66,12 @@ staticRouter.use(
58 asyncMiddleware(downloadVideoFile) 66 asyncMiddleware(downloadVideoFile)
59) 67)
60 68
69staticRouter.use(
70 STATIC_DOWNLOAD_PATHS.HLS_VIDEOS + ':id-:resolution([0-9]+).:extension',
71 asyncMiddleware(videosGetValidator),
72 asyncMiddleware(downloadHLSVideoFile)
73)
74
61// HLS 75// HLS
62staticRouter.use( 76staticRouter.use(
63 STATIC_PATHS.STREAMING_PLAYLISTS.HLS, 77 STATIC_PATHS.STREAMING_PLAYLISTS.HLS,
@@ -227,24 +241,55 @@ async function generateNodeinfo (req: express.Request, res: express.Response) {
227} 241}
228 242
229async function downloadTorrent (req: express.Request, res: express.Response) { 243async function downloadTorrent (req: express.Request, res: express.Response) {
230 const { video, videoFile } = getVideoAndFile(req, res) 244 const video = res.locals.videoAll
245
246 const videoFile = getVideoFile(req, video.VideoFiles)
247 if (!videoFile) return res.status(404).end()
248
249 return res.download(getTorrentFilePath(video, videoFile), `${video.name}-${videoFile.resolution}p.torrent`)
250}
251
252async function downloadHLSVideoFileTorrent (req: express.Request, res: express.Response) {
253 const video = res.locals.videoAll
254
255 const playlist = getHLSPlaylist(video)
256 if (!playlist) return res.status(404).end
257
258 const videoFile = getVideoFile(req, playlist.VideoFiles)
231 if (!videoFile) return res.status(404).end() 259 if (!videoFile) return res.status(404).end()
232 260
233 return res.download(video.getTorrentFilePath(videoFile), `${video.name}-${videoFile.resolution}p.torrent`) 261 return res.download(getTorrentFilePath(playlist, videoFile), `${video.name}-${videoFile.resolution}p-hls.torrent`)
234} 262}
235 263
236async function downloadVideoFile (req: express.Request, res: express.Response) { 264async function downloadVideoFile (req: express.Request, res: express.Response) {
237 const { video, videoFile } = getVideoAndFile(req, res) 265 const video = res.locals.videoAll
266
267 const videoFile = getVideoFile(req, video.VideoFiles)
238 if (!videoFile) return res.status(404).end() 268 if (!videoFile) return res.status(404).end()
239 269
240 return res.download(video.getVideoFilePath(videoFile), `${video.name}-${videoFile.resolution}p${videoFile.extname}`) 270 return res.download(getVideoFilePath(video, videoFile), `${video.name}-${videoFile.resolution}p${videoFile.extname}`)
241} 271}
242 272
243function getVideoAndFile (req: express.Request, res: express.Response) { 273async function downloadHLSVideoFile (req: express.Request, res: express.Response) {
244 const resolution = parseInt(req.params.resolution, 10)
245 const video = res.locals.videoAll 274 const video = res.locals.videoAll
275 const playlist = getHLSPlaylist(video)
276 if (!playlist) return res.status(404).end
277
278 const videoFile = getVideoFile(req, playlist.VideoFiles)
279 if (!videoFile) return res.status(404).end()
280
281 const filename = `${video.name}-${videoFile.resolution}p-${playlist.getStringType()}${videoFile.extname}`
282 return res.download(getVideoFilePath(playlist, videoFile), filename)
283}
284
285function getVideoFile (req: express.Request, files: MVideoFile[]) {
286 const resolution = parseInt(req.params.resolution, 10)
287 return files.find(f => f.resolution === resolution)
288}
246 289
247 const videoFile = video.VideoFiles.find(f => f.resolution === resolution) 290function getHLSPlaylist (video: MVideoFullLight) {
291 const playlist = video.VideoStreamingPlaylists.find(p => p.type === VideoStreamingPlaylistType.HLS)
292 if (!playlist) return undefined
248 293
249 return { video, videoFile } 294 return Object.assign(playlist, { Video: video })
250} 295}