Fix federation of some videos
If we don't transcode additional resolutions, and user decided to wait transcoding before publishing the video
This commit is contained in:
parent
1a12adcd1e
commit
56b13bd193
|
@ -16,7 +16,7 @@ let config: IConfig = require('config')
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
const LAST_MIGRATION_VERSION = 300
|
const LAST_MIGRATION_VERSION = 305
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
import * as Sequelize from 'sequelize'
|
||||||
|
|
||||||
|
async function up (utils: {
|
||||||
|
transaction: Sequelize.Transaction,
|
||||||
|
queryInterface: Sequelize.QueryInterface,
|
||||||
|
sequelize: Sequelize.Sequelize,
|
||||||
|
db: any
|
||||||
|
}): Promise<void> {
|
||||||
|
{
|
||||||
|
const query = `INSERT INTO "videoShare" (url, "actorId", "videoId", "createdAt", "updatedAt") ` +
|
||||||
|
`(` +
|
||||||
|
`SELECT ` +
|
||||||
|
`video.url || '/announces/' || "videoChannel"."actorId" as url, ` +
|
||||||
|
`"videoChannel"."actorId" AS "actorId", ` +
|
||||||
|
`"video"."id" AS "videoId", ` +
|
||||||
|
`NOW() AS "createdAt", ` +
|
||||||
|
`NOW() AS "updatedAt" ` +
|
||||||
|
`FROM video ` +
|
||||||
|
`INNER JOIN "videoChannel" ON "video"."channelId" = "videoChannel"."id" ` +
|
||||||
|
`WHERE "video"."remote" = false AND "video"."privacy" != 3 AND "video"."state" = 1` +
|
||||||
|
`) ` +
|
||||||
|
`ON CONFLICT DO NOTHING`
|
||||||
|
|
||||||
|
await utils.sequelize.query(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const query = `INSERT INTO "videoShare" (url, "actorId", "videoId", "createdAt", "updatedAt") ` +
|
||||||
|
`(` +
|
||||||
|
`SELECT ` +
|
||||||
|
`video.url || '/announces/' || (SELECT id FROM actor WHERE "preferredUsername" = 'peertube' ORDER BY id ASC LIMIT 1) as url, ` +
|
||||||
|
`(SELECT id FROM actor WHERE "preferredUsername" = 'peertube' ORDER BY id ASC LIMIT 1) AS "actorId", ` +
|
||||||
|
`"video"."id" AS "videoId", ` +
|
||||||
|
`NOW() AS "createdAt", ` +
|
||||||
|
`NOW() AS "updatedAt" ` +
|
||||||
|
`FROM video ` +
|
||||||
|
`WHERE "video"."remote" = false AND "video"."privacy" != 3 AND "video"."state" = 1` +
|
||||||
|
`) ` +
|
||||||
|
`ON CONFLICT DO NOTHING`
|
||||||
|
|
||||||
|
await utils.sequelize.query(query)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function down (options) {
|
||||||
|
throw new Error('Not implemented.')
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
up,
|
||||||
|
down
|
||||||
|
}
|
|
@ -91,15 +91,15 @@ async function onVideoFileTranscoderOrImportSuccess (video: VideoModel) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async function onVideoFileOptimizerSuccess (video: VideoModel, isNewVideo: boolean) {
|
async function onVideoFileOptimizerSuccess (videoArg: VideoModel, isNewVideo: boolean) {
|
||||||
if (video === undefined) return undefined
|
if (videoArg === undefined) return undefined
|
||||||
|
|
||||||
// Outside the transaction (IO on disk)
|
// Outside the transaction (IO on disk)
|
||||||
const { videoFileResolution } = await video.getOriginalFileResolution()
|
const { videoFileResolution } = await videoArg.getOriginalFileResolution()
|
||||||
|
|
||||||
return sequelizeTypescript.transaction(async t => {
|
return sequelizeTypescript.transaction(async t => {
|
||||||
// Maybe the video changed in database, refresh it
|
// Maybe the video changed in database, refresh it
|
||||||
const videoDatabase = await VideoModel.loadAndPopulateAccountAndServerAndTags(video.uuid, t)
|
let videoDatabase = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoArg.uuid, t)
|
||||||
// Video does not exist anymore
|
// Video does not exist anymore
|
||||||
if (!videoDatabase) return undefined
|
if (!videoDatabase) return undefined
|
||||||
|
|
||||||
|
@ -128,13 +128,13 @@ async function onVideoFileOptimizerSuccess (video: VideoModel, isNewVideo: boole
|
||||||
logger.info('Transcoding jobs created for uuid %s.', videoDatabase.uuid, { resolutionsEnabled })
|
logger.info('Transcoding jobs created for uuid %s.', videoDatabase.uuid, { resolutionsEnabled })
|
||||||
} else {
|
} else {
|
||||||
// No transcoding to do, it's now published
|
// No transcoding to do, it's now published
|
||||||
video.state = VideoState.PUBLISHED
|
videoDatabase.state = VideoState.PUBLISHED
|
||||||
video = await video.save({ transaction: t })
|
videoDatabase = await videoDatabase.save({ transaction: t })
|
||||||
|
|
||||||
logger.info('No transcoding jobs created for video %s (no resolutions).', video.uuid)
|
logger.info('No transcoding jobs created for video %s (no resolutions).', videoDatabase.uuid, { privacy: videoDatabase.privacy })
|
||||||
}
|
}
|
||||||
|
|
||||||
return federateVideoIfNeeded(video, isNewVideo, t)
|
return federateVideoIfNeeded(videoDatabase, isNewVideo, t)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue