2017-08-25 09:36:23 +00:00
|
|
|
import * as Sequelize from 'sequelize'
|
|
|
|
import * as Promise from 'bluebird'
|
2018-08-27 11:28:49 +00:00
|
|
|
import { stat } from 'fs-extra'
|
2017-12-12 16:53:50 +00:00
|
|
|
import { VideoModel } from '../../models/video/video'
|
2019-11-15 14:06:03 +00:00
|
|
|
import { getVideoFilePath } from '@server/lib/video-paths'
|
2017-08-25 09:36:23 +00:00
|
|
|
|
|
|
|
function up (utils: {
|
2020-01-31 15:56:52 +00:00
|
|
|
transaction: Sequelize.Transaction
|
|
|
|
queryInterface: Sequelize.QueryInterface
|
|
|
|
sequelize: Sequelize.Sequelize
|
2017-08-25 09:36:23 +00:00
|
|
|
db: any
|
|
|
|
}): Promise<void> {
|
|
|
|
return utils.db.Video.listOwnedAndPopulateAuthorAndTags()
|
2017-12-12 16:53:50 +00:00
|
|
|
.then((videos: VideoModel[]) => {
|
2017-08-25 09:36:23 +00:00
|
|
|
const tasks: Promise<any>[] = []
|
|
|
|
|
|
|
|
videos.forEach(video => {
|
|
|
|
video.VideoFiles.forEach(videoFile => {
|
|
|
|
const p = new Promise((res, rej) => {
|
2019-11-15 14:06:03 +00:00
|
|
|
stat(getVideoFilePath(video, videoFile), (err, stats) => {
|
2017-08-25 09:36:23 +00:00
|
|
|
if (err) return rej(err)
|
|
|
|
|
|
|
|
videoFile.size = stats.size
|
|
|
|
videoFile.save().then(res).catch(rej)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
tasks.push(p)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
return tasks
|
|
|
|
})
|
|
|
|
.then((tasks: Promise<any>[]) => {
|
|
|
|
return Promise.all(tasks)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
function down (options) {
|
|
|
|
throw new Error('Not implemented.')
|
|
|
|
}
|
|
|
|
|
|
|
|
export {
|
|
|
|
up,
|
|
|
|
down
|
|
|
|
}
|