aboutsummaryrefslogtreecommitdiff
path: root/src/api/generateThumbs.js
diff options
context:
space:
mode:
authorZephyrrus <[email protected]>2020-07-02 03:11:51 +0300
committerZephyrrus <[email protected]>2020-07-02 03:12:12 +0300
commit42f1a1003a299ca4e571d503d7200b76ff41e752 (patch)
treeaf4b2010772f17a058a3515d0203c9eb5e595ef3 /src/api/generateThumbs.js
parentfeat: start refactoring the code to actually use vuex (diff)
downloadhost.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.js57
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();