0065-video-file-size.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import * as Sequelize from 'sequelize'
  2. import * as Promise from 'bluebird'
  3. import { stat } from 'fs-extra'
  4. import { VideoModel } from '../../models/video/video'
  5. import { getVideoFilePath } from '@server/lib/video-paths'
  6. function up (utils: {
  7. transaction: Sequelize.Transaction,
  8. queryInterface: Sequelize.QueryInterface,
  9. sequelize: Sequelize.Sequelize,
  10. db: any
  11. }): Promise<void> {
  12. return utils.db.Video.listOwnedAndPopulateAuthorAndTags()
  13. .then((videos: VideoModel[]) => {
  14. const tasks: Promise<any>[] = []
  15. videos.forEach(video => {
  16. video.VideoFiles.forEach(videoFile => {
  17. const p = new Promise((res, rej) => {
  18. stat(getVideoFilePath(video, videoFile), (err, stats) => {
  19. if (err) return rej(err)
  20. videoFile.size = stats.size
  21. videoFile.save().then(res).catch(rej)
  22. })
  23. })
  24. tasks.push(p)
  25. })
  26. })
  27. return tasks
  28. })
  29. .then((tasks: Promise<any>[]) => {
  30. return Promise.all(tasks)
  31. })
  32. }
  33. function down (options) {
  34. throw new Error('Not implemented.')
  35. }
  36. export {
  37. up,
  38. down
  39. }