aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/controllers/api/video-playlist.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/controllers/api/video-playlist.ts')
-rw-r--r--server/controllers/api/video-playlist.ts25
1 files changed, 22 insertions, 3 deletions
diff --git a/server/controllers/api/video-playlist.ts b/server/controllers/api/video-playlist.ts
index e026b4d16..8605f3dfc 100644
--- a/server/controllers/api/video-playlist.ts
+++ b/server/controllers/api/video-playlist.ts
@@ -17,6 +17,7 @@ import { logger } from '../../helpers/logger'
17import { resetSequelizeInstance } from '../../helpers/database-utils' 17import { resetSequelizeInstance } from '../../helpers/database-utils'
18import { VideoPlaylistModel } from '../../models/video/video-playlist' 18import { VideoPlaylistModel } from '../../models/video/video-playlist'
19import { 19import {
20 commonVideoPlaylistFiltersValidator,
20 videoPlaylistsAddValidator, 21 videoPlaylistsAddValidator,
21 videoPlaylistsAddVideoValidator, 22 videoPlaylistsAddVideoValidator,
22 videoPlaylistsDeleteValidator, 23 videoPlaylistsDeleteValidator,
@@ -45,6 +46,7 @@ import { VideoPlaylistElementModel } from '../../models/video/video-playlist-ele
45import { VideoPlaylistElementCreate } from '../../../shared/models/videos/playlist/video-playlist-element-create.model' 46import { VideoPlaylistElementCreate } from '../../../shared/models/videos/playlist/video-playlist-element-create.model'
46import { VideoPlaylistElementUpdate } from '../../../shared/models/videos/playlist/video-playlist-element-update.model' 47import { VideoPlaylistElementUpdate } from '../../../shared/models/videos/playlist/video-playlist-element-update.model'
47import { copy, pathExists } from 'fs-extra' 48import { copy, pathExists } from 'fs-extra'
49import { AccountModel } from '../../models/account/account'
48 50
49const reqThumbnailFile = createReqFiles([ 'thumbnailfile' ], MIMETYPES.IMAGE.MIMETYPE_EXT, { thumbnailfile: CONFIG.STORAGE.TMP_DIR }) 51const reqThumbnailFile = createReqFiles([ 'thumbnailfile' ], MIMETYPES.IMAGE.MIMETYPE_EXT, { thumbnailfile: CONFIG.STORAGE.TMP_DIR })
50 52
@@ -55,6 +57,7 @@ videoPlaylistRouter.get('/',
55 videoPlaylistsSortValidator, 57 videoPlaylistsSortValidator,
56 setDefaultSort, 58 setDefaultSort,
57 setDefaultPagination, 59 setDefaultPagination,
60 commonVideoPlaylistFiltersValidator,
58 asyncMiddleware(listVideoPlaylists) 61 asyncMiddleware(listVideoPlaylists)
59) 62)
60 63
@@ -130,7 +133,8 @@ async function listVideoPlaylists (req: express.Request, res: express.Response)
130 followerActorId: serverActor.id, 133 followerActorId: serverActor.id,
131 start: req.query.start, 134 start: req.query.start,
132 count: req.query.count, 135 count: req.query.count,
133 sort: req.query.sort 136 sort: req.query.sort,
137 type: req.query.type
134 }) 138 })
135 139
136 return res.json(getFormattedObjects(resultList.data, resultList.total)) 140 return res.json(getFormattedObjects(resultList.data, resultList.total))
@@ -171,7 +175,8 @@ async function addVideoPlaylist (req: express.Request, res: express.Response) {
171 const videoPlaylistCreated: VideoPlaylistModel = await sequelizeTypescript.transaction(async t => { 175 const videoPlaylistCreated: VideoPlaylistModel = await sequelizeTypescript.transaction(async t => {
172 const videoPlaylistCreated = await videoPlaylist.save({ transaction: t }) 176 const videoPlaylistCreated = await videoPlaylist.save({ transaction: t })
173 177
174 videoPlaylistCreated.OwnerAccount = user.Account 178 // We need more attributes for the federation
179 videoPlaylistCreated.OwnerAccount = await AccountModel.load(user.Account.id, t)
175 await sendCreateVideoPlaylist(videoPlaylistCreated, t) 180 await sendCreateVideoPlaylist(videoPlaylistCreated, t)
176 181
177 return videoPlaylistCreated 182 return videoPlaylistCreated
@@ -216,6 +221,7 @@ async function updateVideoPlaylist (req: express.Request, res: express.Response)
216 const videoChannel = res.locals.videoChannel as VideoChannelModel 221 const videoChannel = res.locals.videoChannel as VideoChannelModel
217 222
218 videoPlaylistInstance.videoChannelId = videoChannel.id 223 videoPlaylistInstance.videoChannelId = videoChannel.id
224 videoPlaylistInstance.VideoChannel = videoChannel
219 } 225 }
220 } 226 }
221 227
@@ -227,6 +233,8 @@ async function updateVideoPlaylist (req: express.Request, res: express.Response)
227 } 233 }
228 234
229 const playlistUpdated = await videoPlaylistInstance.save(sequelizeOptions) 235 const playlistUpdated = await videoPlaylistInstance.save(sequelizeOptions)
236 // We need more attributes for the federation
237 playlistUpdated.OwnerAccount = await AccountModel.load(playlistUpdated.OwnerAccount.id, t)
230 238
231 const isNewPlaylist = wasPrivatePlaylist && playlistUpdated.privacy !== VideoPlaylistPrivacy.PRIVATE 239 const isNewPlaylist = wasPrivatePlaylist && playlistUpdated.privacy !== VideoPlaylistPrivacy.PRIVATE
232 240
@@ -290,11 +298,15 @@ async function addVideoInPlaylist (req: express.Request, res: express.Response)
290 const playlistThumbnailPath = join(CONFIG.STORAGE.THUMBNAILS_DIR, videoPlaylist.getThumbnailName()) 298 const playlistThumbnailPath = join(CONFIG.STORAGE.THUMBNAILS_DIR, videoPlaylist.getThumbnailName())
291 299
292 if (await pathExists(playlistThumbnailPath) === false) { 300 if (await pathExists(playlistThumbnailPath) === false) {
301 logger.info('Generating default thumbnail to playlist %s.', videoPlaylist.url)
302
293 const videoThumbnailPath = join(CONFIG.STORAGE.THUMBNAILS_DIR, video.getThumbnailName()) 303 const videoThumbnailPath = join(CONFIG.STORAGE.THUMBNAILS_DIR, video.getThumbnailName())
294 await copy(videoThumbnailPath, playlistThumbnailPath) 304 await copy(videoThumbnailPath, playlistThumbnailPath)
295 } 305 }
296 } 306 }
297 307
308 // We need more attributes for the federation
309 videoPlaylist.OwnerAccount = await AccountModel.load(videoPlaylist.OwnerAccount.id, t)
298 await sendUpdateVideoPlaylist(videoPlaylist, t) 310 await sendUpdateVideoPlaylist(videoPlaylist, t)
299 311
300 return playlistElement 312 return playlistElement
@@ -320,6 +332,8 @@ async function updateVideoPlaylistElement (req: express.Request, res: express.Re
320 332
321 const element = await videoPlaylistElement.save({ transaction: t }) 333 const element = await videoPlaylistElement.save({ transaction: t })
322 334
335 // We need more attributes for the federation
336 videoPlaylist.OwnerAccount = await AccountModel.load(videoPlaylist.OwnerAccount.id, t)
323 await sendUpdateVideoPlaylist(videoPlaylist, t) 337 await sendUpdateVideoPlaylist(videoPlaylist, t)
324 338
325 return element 339 return element
@@ -341,6 +355,8 @@ async function removeVideoFromPlaylist (req: express.Request, res: express.Respo
341 // Decrease position of the next elements 355 // Decrease position of the next elements
342 await VideoPlaylistElementModel.increasePositionOf(videoPlaylist.id, positionToDelete, null, -1, t) 356 await VideoPlaylistElementModel.increasePositionOf(videoPlaylist.id, positionToDelete, null, -1, t)
343 357
358 // We need more attributes for the federation
359 videoPlaylist.OwnerAccount = await AccountModel.load(videoPlaylist.OwnerAccount.id, t)
344 await sendUpdateVideoPlaylist(videoPlaylist, t) 360 await sendUpdateVideoPlaylist(videoPlaylist, t)
345 361
346 logger.info('Video playlist element %d of playlist %s deleted.', videoPlaylistElement.position, videoPlaylist.uuid) 362 logger.info('Video playlist element %d of playlist %s deleted.', videoPlaylistElement.position, videoPlaylist.uuid)
@@ -382,6 +398,8 @@ async function reorderVideosPlaylist (req: express.Request, res: express.Respons
382 // Decrease positions of elements after the old position of our ordered elements (decrease) 398 // Decrease positions of elements after the old position of our ordered elements (decrease)
383 await VideoPlaylistElementModel.increasePositionOf(videoPlaylist.id, oldPosition, null, -reorderLength, t) 399 await VideoPlaylistElementModel.increasePositionOf(videoPlaylist.id, oldPosition, null, -reorderLength, t)
384 400
401 // We need more attributes for the federation
402 videoPlaylist.OwnerAccount = await AccountModel.load(videoPlaylist.OwnerAccount.id, t)
385 await sendUpdateVideoPlaylist(videoPlaylist, t) 403 await sendUpdateVideoPlaylist(videoPlaylist, t)
386 }) 404 })
387 405
@@ -415,5 +433,6 @@ async function getVideoPlaylistVideos (req: express.Request, res: express.Respon
415 user: res.locals.oauth ? res.locals.oauth.token.User : undefined 433 user: res.locals.oauth ? res.locals.oauth.token.User : undefined
416 }) 434 })
417 435
418 return res.json(getFormattedObjects(resultList.data, resultList.total)) 436 const additionalAttributes = { playlistInfo: true }
437 return res.json(getFormattedObjects(resultList.data, resultList.total, { additionalAttributes }))
419} 438}