aboutsummaryrefslogtreecommitdiff
path: root/src/api/databaseMigration.js
diff options
context:
space:
mode:
authorZephyrrus <[email protected]>2020-07-19 22:35:59 +0300
committerZephyrrus <[email protected]>2020-07-19 22:35:59 +0300
commit645b62b81dc46b2e2bdea0fbe30c36c4e0ff4a48 (patch)
tree4c454e816b699ead53d225afadfb528649d126f7 /src/api/databaseMigration.js
parentfeat: Start working on a new album/tags/image info modal (diff)
parentUpdate setup script (diff)
downloadhost.fuwn.me-645b62b81dc46b2e2bdea0fbe30c36c4e0ff4a48.tar.xz
host.fuwn.me-645b62b81dc46b2e2bdea0fbe30c36c4e0ff4a48.zip
Merge branch 'dev' into dev-zephy
Diffstat (limited to 'src/api/databaseMigration.js')
-rw-r--r--src/api/databaseMigration.js59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/api/databaseMigration.js b/src/api/databaseMigration.js
index d95605d..4bd45b7 100644
--- a/src/api/databaseMigration.js
+++ b/src/api/databaseMigration.js
@@ -3,6 +3,13 @@
/* eslint-disable no-console */
const nodePath = require('path');
const moment = require('moment');
+const jetpack = require('fs-jetpack');
+const { path } = require('fs-jetpack');
+const sharp = require('sharp');
+const ffmpeg = require('fluent-ffmpeg');
+
+const imageExtensions = ['.jpg', '.jpeg', '.bmp', '.gif', '.png', '.webp'];
+const videoExtensions = ['.webm', '.mp4', '.wmv', '.avi', '.mov'];
const oldDb = require('knex')({
client: 'sqlite3',
@@ -45,6 +52,10 @@ const start = async () => {
console.log('Starting migration, this may take a few minutes...'); // Because I half assed it
console.log('Please do NOT kill the process. Wait for it to finish.');
+ await jetpack.removeAsync(nodePath.join(__dirname, '..', '..', 'uploads', 'thumbs'));
+ await jetpack.dirAsync(nodePath.join(__dirname, '..', '..', 'uploads', 'thumbs', 'square'));
+ console.log('Finished deleting old thumbnails to create new ones');
+
const users = await oldDb.table('users').where('username', '<>', 'root');
for (const user of users) {
const now = moment.utc().toDate();
@@ -116,6 +127,13 @@ const start = async () => {
albumId: file.albumid,
fileId: file.id,
});
+
+ const filename = file.name;
+ if (!jetpack.exists(nodePath.join(__dirname, '..', '..', 'uploads', filename))) continue;
+ const ext = nodePath.extname(filename).toLowerCase();
+ const output = `${filename.slice(0, -ext.length)}.webp`;
+ if (imageExtensions.includes(ext)) await generateThumbnailForImage(filename, output);
+ if (videoExtensions.includes(ext)) generateThumbnailForVideo(filename);
}
await newDb.batchInsert('files', filesToInsert, 20);
await newDb.batchInsert('albumsFiles', albumsFilesToInsert, 20);
@@ -125,4 +143,45 @@ const start = async () => {
process.exit(0);
};
+const generateThumbnailForImage = async (filename, output) => {
+ try {
+ const file = await jetpack.readAsync(nodePath.join(__dirname, '..', '..', 'uploads', filename), 'buffer');
+ await sharp(file)
+ .resize(64, 64)
+ .toFormat('webp')
+ .toFile(nodePath.join(__dirname, '..', '..', 'uploads', 'thumbs', 'square', output));
+ await sharp(file)
+ .resize(225, null)
+ .toFormat('webp')
+ .toFile(nodePath.join(__dirname, '..', '..', 'uploads', 'thumbs', output));
+ console.log('finished', filename);
+ } catch (error) {
+ console.log('error', filename);
+ }
+};
+
+const generateThumbnailForVideo = filename => {
+ try {
+ ffmpeg(nodePath.join(__dirname, '..', '..', 'uploads', filename))
+ .thumbnail({
+ timestamps: [0],
+ filename: '%b.png',
+ folder: nodePath.join(__dirname, '..', '..', 'uploads', 'thumbs', 'square'),
+ size: '64x64'
+ })
+ .on('error', error => console.error(error.message));
+ ffmpeg(nodePath.join(__dirname, '..', '..', 'uploads', filename))
+ .thumbnail({
+ timestamps: [0],
+ filename: '%b.png',
+ folder: nodePath.join(__dirname, '..', '..', 'uploads', 'thumbs'),
+ size: '150x?'
+ })
+ .on('error', error => console.error(error.message));
+ console.log('finished', filename);
+ } catch (error) {
+ console.log('error', filename);
+ }
+};
+
start();