const video = new VideoModel(videoData)
video.url = getVideoActivityPubUrl(video) // We use the UUID, so set the URL after building the object
- const videoFileData = {
+ const videoFile = new VideoFileModel({
extname: extname(videoPhysicalFile.filename),
size: videoPhysicalFile.size
- }
- const videoFile = new VideoFileModel(videoFileData)
+ })
if (videoFile.isAudio()) {
videoFile.resolution = DEFAULT_AUDIO_RESOLUTION
const videoFieldsSave = videoInstance.toJSON()
const oldVideoAuditView = new VideoAuditView(videoInstance.toFormattedDetailsJSON())
const videoInfoToUpdate: VideoUpdate = req.body
+
const wasPrivateVideo = videoInstance.privacy === VideoPrivacy.PRIVATE
+ const wasNotPrivateVideo = videoInstance.privacy !== VideoPrivacy.PRIVATE
const wasUnlistedVideo = videoInstance.privacy === VideoPrivacy.UNLISTED
// Process thumbnail or create it from the video
const newPrivacy = parseInt(videoInfoToUpdate.privacy.toString(), 10)
videoInstance.privacy = newPrivacy
+ // The video was private, and is not anymore -> publish it
if (wasPrivateVideo === true && newPrivacy !== VideoPrivacy.PRIVATE) {
videoInstance.publishedAt = new Date()
}
+
+ // The video was not private, but now it is -> we need to unfederate it
+ if (wasNotPrivateVideo === true && newPrivacy === VideoPrivacy.PRIVATE) {
+ await VideoModel.sendDelete(videoInstance, { transaction: t })
+ }
}
const videoInstanceUpdated = await videoInstance.save(sequelizeOptions)
if (areErrorsInScheduleUpdate(req, res)) return cleanUpReqFiles(req)
if (!await doesVideoExist(req.params.id, res)) return cleanUpReqFiles(req)
- const video = res.locals.video
-
// Check if the user who did the request is able to update the video
const user = res.locals.oauth.token.User
if (!checkUserCanManageVideo(user, res.locals.video, UserRight.UPDATE_ANY_VIDEO, res)) return cleanUpReqFiles(req)
- if (video.privacy !== VideoPrivacy.PRIVATE && req.body.privacy === VideoPrivacy.PRIVATE) {
- cleanUpReqFiles(req)
- return res.status(409)
- .json({ error: 'Cannot set "private" a video that was not private.' })
- }
-
if (req.body.channelId && !await doesVideoChannelOfAccountExist(req.body.channelId, user, res)) return cleanUpReqFiles(req)
return next()
import {
cleanupTests,
flushAndRunMultipleServers,
- getVideosList,
- killallServers,
+ getVideosList, getVideosListWithToken,
ServerInfo,
setAccessTokensToServers,
uploadVideo
}
})
+ it('Should set this new video as private', async function () {
+ this.timeout(10000)
+
+ await updateVideo(servers[0].url, servers[0].accessToken, privateVideoId, { privacy: VideoPrivacy.PRIVATE })
+
+ await waitJobs(servers)
+
+ for (const server of servers) {
+ const res = await getVideosList(server.url)
+
+ expect(res.body.total).to.equal(0)
+ expect(res.body.data).to.have.lengthOf(0)
+ }
+
+ {
+ const res = await getMyVideos(servers[0].url, servers[0].accessToken, 0, 5)
+
+ expect(res.body.total).to.equal(1)
+ expect(res.body.data).to.have.lengthOf(1)
+ expect(res.body.data[0].name).to.equal('super video public')
+ }
+ })
+
after(async function () {
await cleanupTests(servers)
})