mirror of
https://github.com/BobbyWibowo/lolisafe.git
synced 2024-12-14 00:16:21 +00:00
98a8d03a7f
Updated controllers to use Promise.all (concurrent processing) wherever applicable. Added 2 new entries to todo.md. Don't check "Select all" checkbox in dashboard when there are no uploads. Bumped v1 version string.
81 lines
1.8 KiB
JavaScript
81 lines
1.8 KiB
JavaScript
const { promisify } = require('util')
|
|
const fs = require('fs')
|
|
const path = require('path')
|
|
const config = require('./../config')
|
|
const logger = require('./../logger')
|
|
|
|
const self = {}
|
|
|
|
// Promisify these fs functions
|
|
const fsFuncs = [
|
|
'access',
|
|
'lstat',
|
|
'mkdir',
|
|
'readdir',
|
|
'readFile',
|
|
'rename',
|
|
'rmdir',
|
|
'symlink',
|
|
'unlink',
|
|
'writeFile'
|
|
]
|
|
|
|
for (const fsFunc of fsFuncs)
|
|
self[fsFunc] = promisify(fs[fsFunc])
|
|
|
|
self.uploads = path.resolve(config.uploads.folder)
|
|
self.chunks = path.join(self.uploads, 'chunks')
|
|
self.thumbs = path.join(self.uploads, 'thumbs')
|
|
self.zips = path.join(self.uploads, 'zips')
|
|
|
|
self.thumbPlaceholder = path.resolve(config.uploads.generateThumbs.placeholder || 'public/images/unavailable.png')
|
|
|
|
self.logs = path.resolve(config.logsFolder)
|
|
|
|
self.customPages = path.resolve('pages/custom')
|
|
self.dist = process.env.NODE_ENV === 'development'
|
|
? path.resolve('dist-dev')
|
|
: path.resolve('dist')
|
|
self.public = path.resolve('public')
|
|
|
|
self.errorRoot = path.resolve(config.errorPages.rootDir)
|
|
|
|
const verify = [
|
|
self.uploads,
|
|
self.chunks,
|
|
self.thumbs,
|
|
self.zips,
|
|
self.logs,
|
|
self.customPages
|
|
]
|
|
|
|
self.init = async () => {
|
|
// Check & create directories
|
|
await Promise.all(verify.map(async p => {
|
|
try {
|
|
await self.access(p)
|
|
} catch (err) {
|
|
if (err.code !== 'ENOENT') {
|
|
throw err
|
|
} else {
|
|
const mkdir = await self.mkdir(p)
|
|
if (mkdir)
|
|
logger.log(`Created directory: ${p}`)
|
|
}
|
|
}
|
|
}))
|
|
|
|
// Purge any leftover in chunks directory
|
|
const uuidDirs = await self.readdir(self.chunks)
|
|
await Promise.all(uuidDirs.map(async uuid => {
|
|
const root = path.join(self.chunks, uuid)
|
|
const chunks = await self.readdir(root)
|
|
await Promise.all(chunks.map(async chunk =>
|
|
self.unlink(path.join(root, chunk))
|
|
))
|
|
await self.rmdir(root)
|
|
}))
|
|
}
|
|
|
|
module.exports = self
|