Add migration script

pull/97/head
Chocobozzz 2017-10-03 16:04:14 +02:00
parent 40298b0254
commit ecb455b6c4
4 changed files with 70 additions and 15 deletions

View 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
// ---------------------------------------------------------------------------

View File

@ -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
}

View 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)

View 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)