Add migration script
authorChocobozzz <florian.bigard@gmail.com>
Tue, 3 Oct 2017 14:04:14 +0000 (16:04 +0200)
committerChocobozzz <florian.bigard@gmail.com>
Tue, 3 Oct 2017 15:16:47 +0000 (17:16 +0200)
server/initializers/constants.ts
server/initializers/migrations/0075-video-resolutions.ts [new file with mode: 0644]
server/models/video/video.ts
server/tests/api/multiple-pods.ts

index 073fabd27b0f806b5055658e61d1d365c400993a..f87041a3ffe127e9ffbfda527f4fe9b2669a4e21 100644 (file)
@@ -10,13 +10,12 @@ import {
   RequestEndpoint,
   RequestVideoEventType,
   RequestVideoQaduType,
-  JobState,
-  VideoResolution
+  JobState
 } from '../../shared/models'
 
 // ---------------------------------------------------------------------------
 
-const LAST_MIGRATION_VERSION = 70
+const LAST_MIGRATION_VERSION = 75
 
 // ---------------------------------------------------------------------------
 
diff --git a/server/initializers/migrations/0075-video-resolutions.ts b/server/initializers/migrations/0075-video-resolutions.ts
new file mode 100644 (file)
index 0000000..6bc1e72
--- /dev/null
@@ -0,0 +1,62 @@
+import * as Sequelize from 'sequelize'
+import * as Promise from 'bluebird'
+import { join } from 'path'
+
+import { readdirPromise, renamePromise } from '../../helpers/core-utils'
+import { CONFIG } from '../../initializers/constants'
+
+function up (utils: {
+  transaction: Sequelize.Transaction,
+  queryInterface: Sequelize.QueryInterface,
+  sequelize: Sequelize.Sequelize,
+  db: any
+}): Promise<void> {
+  const torrentDir = CONFIG.STORAGE.TORRENTS_DIR
+  const videoFileDir = CONFIG.STORAGE.VIDEOS_DIR
+
+  return readdirPromise(torrentDir)
+    .then(torrentFiles => {
+      const tasks: Promise<any>[] = []
+      for (const torrentFile of torrentFiles) {
+        const matches = /^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.torrent/.exec(torrentFile)
+        if (matches === null) {
+          console.log('Invalid torrent file name %s.', torrentFile)
+          continue
+        }
+
+        const newTorrentName = matches[1] + '-original.torrent'
+        const p = renamePromise(join(torrentDir, torrentFile), join(torrentDir, newTorrentName))
+        tasks.push(p)
+      }
+
+      return Promise.all(tasks)
+    })
+    .then(() => {
+      return readdirPromise(videoFileDir)
+    })
+    .then(videoFiles => {
+      const tasks: Promise<any>[] = []
+      for (const videoFile of videoFiles) {
+        const matches = /^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.([a-z0-9]+)/.exec(videoFile)
+        if (matches === null) {
+          console.log('Invalid video file name %s.', videoFile)
+          continue
+        }
+
+        const newVideoFileName = matches[1] + '-original.' + matches[2]
+        const p = renamePromise(join(videoFileDir, videoFile), join(videoFileDir, newVideoFileName))
+        tasks.push(p)
+      }
+
+      return Promise.all(tasks).then(() => undefined)
+    })
+}
+
+function down (options) {
+  throw new Error('Not implemented.')
+}
+
+export {
+  up,
+  down
+}
index 28df91a7b868ad0db00c20f1d2400fc012073d99..b4a2b0c95f86b1d374191a2c4b3881f280e43c4c 100644 (file)
@@ -627,19 +627,13 @@ transcodeOriginalVideofile = function (this: VideoInstance, resolution: VideoRes
     videoId: this.id
   })
   const videoOutputPath = join(videosDirectory, this.getVideoFilename(newVideoFile))
-  const resolutionWidthSizes = {
-    1: '240x?',
-    2: '360x?',
-    3: '480x?',
-    4: '720x?',
-    5: '1080x?'
-  }
+  const resolutionOption = `${resolution}x?` // '720x?' for example
 
   return new Promise<void>((res, rej) => {
     ffmpeg(videoInputPath)
       .output(videoOutputPath)
       .videoCodec('libx264')
-      .size(resolutionWidthSizes[resolution])
+      .size(resolutionOption)
       .outputOption('-threads ' + CONFIG.TRANSCODING.THREADS)
       .outputOption('-movflags faststart')
       .on('error', rej)
index 9860935e5655b939e740bf26bffca5ca5574e1fe..c43793b303511c28e1830e79cecb1f3ef466cb36 100644 (file)
@@ -197,22 +197,22 @@ describe('Test multiple pods', function () {
         expect(originalFile.resolutionLabel).to.equal('original')
         expect(originalFile.size).to.equal(711327)
 
-        const file240p = video.files.find(f => f.resolution === 1)
+        const file240p = video.files.find(f => f.resolution === 240)
         expect(file240p).not.to.be.undefined
         expect(file240p.resolutionLabel).to.equal('240p')
         expect(file240p.size).to.equal(139953)
 
-        const file360p = video.files.find(f => f.resolution === 2)
+        const file360p = video.files.find(f => f.resolution === 360)
         expect(file360p).not.to.be.undefined
         expect(file360p.resolutionLabel).to.equal('360p')
         expect(file360p.size).to.equal(169926)
 
-        const file480p = video.files.find(f => f.resolution === 3)
+        const file480p = video.files.find(f => f.resolution === 480)
         expect(file480p).not.to.be.undefined
         expect(file480p.resolutionLabel).to.equal('480p')
         expect(file480p.size).to.equal(206758)
 
-        const file720p = video.files.find(f => f.resolution === 4)
+        const file720p = video.files.find(f => f.resolution === 720)
         expect(file720p).not.to.be.undefined
         expect(file720p.resolutionLabel).to.equal('720p')
         expect(file720p.size).to.equal(314913)