diff options
| author | Zephyrrus <[email protected]> | 2020-07-02 03:11:51 +0300 |
|---|---|---|
| committer | Zephyrrus <[email protected]> | 2020-07-02 03:12:12 +0300 |
| commit | 42f1a1003a299ca4e571d503d7200b76ff41e752 (patch) | |
| tree | af4b2010772f17a058a3515d0203c9eb5e595ef3 /src/api/generateThumbs.js | |
| parent | feat: start refactoring the code to actually use vuex (diff) | |
| download | host.fuwn.me-42f1a1003a299ca4e571d503d7200b76ff41e752.tar.xz host.fuwn.me-42f1a1003a299ca4e571d503d7200b76ff41e752.zip | |
feat: externalize thumb generation function for easier testing
Diffstat (limited to 'src/api/generateThumbs.js')
| -rw-r--r-- | src/api/generateThumbs.js | 57 |
1 files changed, 4 insertions, 53 deletions
diff --git a/src/api/generateThumbs.js b/src/api/generateThumbs.js index 8517608..761bd5a 100644 --- a/src/api/generateThumbs.js +++ b/src/api/generateThumbs.js @@ -1,62 +1,13 @@ require('dotenv').config(); -const jetpack = require('fs-jetpack'); -const path = require('path'); -const fs = require('fs'); -const log = require('./utils/Log'); -const sharp = require('sharp'); -const ffmpeg = require('fluent-ffmpeg'); -const imageExtensions = ['.jpg', '.jpeg', '.bmp', '.gif', '.png', '.webp']; -const videoExtensions = ['.webm', '.mp4', '.wmv', '.avi', '.mov']; - -class ThumbGenerator { - static generateThumbnails(filename) { - const ext = path.extname(filename).toLowerCase(); - const output = `${filename.slice(0, -ext.length)}.png`; - if (imageExtensions.includes(ext)) return this.generateThumbnailForImage(filename, output); - if (videoExtensions.includes(ext)) return this.generateThumbnailForVideo(filename); - return null; - } - - static async generateThumbnailForImage(filename, output) { - const file = await jetpack.readAsync(path.join(__dirname, '..', '..', process.env.UPLOAD_FOLDER, filename), 'buffer'); - await sharp(file) - .resize(64, 64) - .toFormat('png') - .toFile(path.join(__dirname, '..', '..', process.env.UPLOAD_FOLDER, 'thumbs', 'square', output)); - await sharp(file) - .resize(225, null) - .toFormat('png') - .toFile(path.join(__dirname, '..', '..', process.env.UPLOAD_FOLDER, 'thumbs', output)); - } - - static generateThumbnailForVideo(filename) { - ffmpeg(path.join(__dirname, '..', '..', process.env.UPLOAD_FOLDER, filename)) - .thumbnail({ - timestamps: [0], - filename: '%b.png', - folder: path.join(__dirname, '..', '..', process.env.UPLOAD_FOLDER, 'thumbs', 'square'), - size: '64x64' - }) - .on('error', error => log.error(error.message)); - ffmpeg(path.join(__dirname, '..', '..', process.env.UPLOAD_FOLDER, filename)) - .thumbnail({ - timestamps: [0], - filename: '%b.png', - folder: path.join(__dirname, '..', '..', process.env.UPLOAD_FOLDER, 'thumbs'), - size: '150x?' - }) - .on('error', error => log.error(error.message)); - } -} - +const ThumbUtil = require('./utils/ThumbUtil'); const start = async () => { const files = fs.readdirSync(path.join(__dirname, '..', '..', process.env.UPLOAD_FOLDER)); for (const fileName of files) { console.log(`Generating thumb for '${fileName}`); - await ThumbGenerator.generateThumbnails(fileName); + await ThumbUtil.generateThumbnails(fileName); } -} +}; -start();
\ No newline at end of file +start(); |