2023-10-09 17:43:50 +00:00
|
|
|
import fs from 'fs/promises'
|
|
|
|
import path from 'path'
|
|
|
|
|
|
|
|
async function main() {
|
|
|
|
// variable for incoming variable
|
|
|
|
let mediaDir = ''
|
|
|
|
let outputDir = ''
|
|
|
|
let recurse = false
|
2023-10-10 11:04:35 +00:00
|
|
|
let imagesOnly = false
|
|
|
|
let dryRun = false
|
2023-10-09 17:43:50 +00:00
|
|
|
|
|
|
|
// get command line arguments
|
|
|
|
process.argv.forEach(function (val, index) {
|
|
|
|
// console.log(index + ': ' + val)
|
|
|
|
if (val == '-dir') {
|
|
|
|
// console.log(process.argv[index + 1])
|
|
|
|
mediaDir = process.argv[index + 1] || ''
|
|
|
|
}
|
|
|
|
|
2023-10-10 11:04:35 +00:00
|
|
|
if (val == '--dry-run') {
|
|
|
|
dryRun = true
|
|
|
|
}
|
|
|
|
|
|
|
|
if (val == '--images') {
|
|
|
|
imagesOnly = true
|
|
|
|
}
|
|
|
|
|
2023-10-09 17:43:50 +00:00
|
|
|
if (val == '-r' || val == '-R') {
|
|
|
|
recurse = true
|
|
|
|
}
|
|
|
|
|
|
|
|
if (val == '-o') {
|
|
|
|
outputDir = process.argv[index + 1]
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
// if no media dir jump out
|
|
|
|
if (!mediaDir) {
|
|
|
|
console.log('no directory passed to script')
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
2023-10-10 11:04:35 +00:00
|
|
|
// variable to hold media
|
|
|
|
let media = []
|
|
|
|
let images = []
|
|
|
|
|
2023-10-09 17:43:50 +00:00
|
|
|
// read directory
|
2023-10-10 11:04:35 +00:00
|
|
|
const dirList = await fs.readdir(mediaDir)
|
|
|
|
|
|
|
|
if (!recurse) {
|
|
|
|
media = dirList.filter(i => i.match(/.(mp\d|m\d\w)$/i))
|
|
|
|
images = dirList.filter(i => i.match(/.(jp\w*g|png)$/i))
|
|
|
|
}
|
|
|
|
|
2023-10-09 17:43:50 +00:00
|
|
|
|
|
|
|
// clean up directory for json
|
|
|
|
let parent_dir = mediaDir
|
|
|
|
.match(/(?<=\/)(\w|\d)+\/*$/i)[0]
|
|
|
|
.replace(/\/$/i, '')
|
|
|
|
|
|
|
|
if (!outputDir) {
|
|
|
|
outputDir = '.'
|
|
|
|
}
|
|
|
|
|
2023-10-10 11:04:35 +00:00
|
|
|
const obj = await Promise.all(media.map(async (m, i) => {
|
2023-10-09 17:43:50 +00:00
|
|
|
|
|
|
|
const _r = {
|
|
|
|
title: '',
|
2023-10-10 11:04:35 +00:00
|
|
|
details: '',
|
2023-10-09 17:43:50 +00:00
|
|
|
parent_dir,
|
|
|
|
media: m,
|
2023-10-10 11:04:35 +00:00
|
|
|
image: images[i],
|
2023-10-09 17:43:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (recurse) {
|
|
|
|
const rDir = path.join(mediaDir, m)
|
|
|
|
const files = await fs.readdir(rDir)
|
|
|
|
|
|
|
|
_r.album = true
|
|
|
|
_r.tracks = files
|
|
|
|
}
|
|
|
|
|
|
|
|
return _r
|
|
|
|
}))
|
|
|
|
|
|
|
|
const json = JSON.stringify(obj, null, 2)
|
|
|
|
let output = `${parent_dir}.json`
|
2023-10-10 11:04:35 +00:00
|
|
|
|
|
|
|
if (dryRun) {
|
|
|
|
console.log(json)
|
|
|
|
} else {
|
|
|
|
fs.writeFile(path.join(outputDir, output), json)
|
|
|
|
}
|
2023-10-09 17:43:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
main()
|