Add migration script
This commit is contained in:
parent
40298b0254
commit
ecb455b6c4
4 changed files with 70 additions and 15 deletions
|
@ -10,13 +10,12 @@ import {
|
||||||
RequestEndpoint,
|
RequestEndpoint,
|
||||||
RequestVideoEventType,
|
RequestVideoEventType,
|
||||||
RequestVideoQaduType,
|
RequestVideoQaduType,
|
||||||
JobState,
|
JobState
|
||||||
VideoResolution
|
|
||||||
} from '../../shared/models'
|
} from '../../shared/models'
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
const LAST_MIGRATION_VERSION = 70
|
const LAST_MIGRATION_VERSION = 75
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
62
server/initializers/migrations/0075-video-resolutions.ts
Normal file
62
server/initializers/migrations/0075-video-resolutions.ts
Normal 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
|
||||||
|
}
|
|
@ -627,19 +627,13 @@ transcodeOriginalVideofile = function (this: VideoInstance, resolution: VideoRes
|
||||||
videoId: this.id
|
videoId: this.id
|
||||||
})
|
})
|
||||||
const videoOutputPath = join(videosDirectory, this.getVideoFilename(newVideoFile))
|
const videoOutputPath = join(videosDirectory, this.getVideoFilename(newVideoFile))
|
||||||
const resolutionWidthSizes = {
|
const resolutionOption = `${resolution}x?` // '720x?' for example
|
||||||
1: '240x?',
|
|
||||||
2: '360x?',
|
|
||||||
3: '480x?',
|
|
||||||
4: '720x?',
|
|
||||||
5: '1080x?'
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Promise<void>((res, rej) => {
|
return new Promise<void>((res, rej) => {
|
||||||
ffmpeg(videoInputPath)
|
ffmpeg(videoInputPath)
|
||||||
.output(videoOutputPath)
|
.output(videoOutputPath)
|
||||||
.videoCodec('libx264')
|
.videoCodec('libx264')
|
||||||
.size(resolutionWidthSizes[resolution])
|
.size(resolutionOption)
|
||||||
.outputOption('-threads ' + CONFIG.TRANSCODING.THREADS)
|
.outputOption('-threads ' + CONFIG.TRANSCODING.THREADS)
|
||||||
.outputOption('-movflags faststart')
|
.outputOption('-movflags faststart')
|
||||||
.on('error', rej)
|
.on('error', rej)
|
||||||
|
|
|
@ -197,22 +197,22 @@ describe('Test multiple pods', function () {
|
||||||
expect(originalFile.resolutionLabel).to.equal('original')
|
expect(originalFile.resolutionLabel).to.equal('original')
|
||||||
expect(originalFile.size).to.equal(711327)
|
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).not.to.be.undefined
|
||||||
expect(file240p.resolutionLabel).to.equal('240p')
|
expect(file240p.resolutionLabel).to.equal('240p')
|
||||||
expect(file240p.size).to.equal(139953)
|
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).not.to.be.undefined
|
||||||
expect(file360p.resolutionLabel).to.equal('360p')
|
expect(file360p.resolutionLabel).to.equal('360p')
|
||||||
expect(file360p.size).to.equal(169926)
|
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).not.to.be.undefined
|
||||||
expect(file480p.resolutionLabel).to.equal('480p')
|
expect(file480p.resolutionLabel).to.equal('480p')
|
||||||
expect(file480p.size).to.equal(206758)
|
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).not.to.be.undefined
|
||||||
expect(file720p.resolutionLabel).to.equal('720p')
|
expect(file720p.resolutionLabel).to.equal('720p')
|
||||||
expect(file720p.size).to.equal(314913)
|
expect(file720p.size).to.equal(314913)
|
||||||
|
|
Loading…
Reference in a new issue