2018-10-05 10:36:57 +00:00
|
|
|
'use strict'
|
|
|
|
|
2018-10-06 12:30:02 +00:00
|
|
|
import readline from 'readline'
|
|
|
|
import path from 'path'
|
2020-09-26 06:46:08 +00:00
|
|
|
import sanitize from 'sanitize-filename'
|
2018-10-05 10:36:57 +00:00
|
|
|
|
2020-10-04 08:01:16 +00:00
|
|
|
import * as asn from './common/async'
|
|
|
|
import * as dl from './common/download'
|
2019-12-17 17:52:18 +00:00
|
|
|
import { dbPromise } from './database'
|
2018-10-06 12:30:02 +00:00
|
|
|
|
2018-10-18 15:34:47 +00:00
|
|
|
const values = require(path.join(process.cwd(), 'values.json'))
|
2018-10-06 12:30:02 +00:00
|
|
|
const musicdir = path.resolve(values.directory)
|
2018-10-05 10:36:57 +00:00
|
|
|
|
|
|
|
const rl = readline.createInterface({
|
2020-09-26 06:06:53 +00:00
|
|
|
input: process.stdin,
|
|
|
|
output: process.stdout
|
2018-10-05 10:36:57 +00:00
|
|
|
})
|
|
|
|
|
2018-10-06 12:30:02 +00:00
|
|
|
async function download (furl) {
|
|
|
|
console.log('=> Getting information..')
|
2020-09-26 06:06:53 +00:00
|
|
|
const data = await dl.getVideoInfo(furl)
|
2018-10-05 10:36:57 +00:00
|
|
|
|
2018-10-06 12:30:02 +00:00
|
|
|
console.log('=> Downloading file..')
|
2020-09-26 06:06:53 +00:00
|
|
|
const file = await dl.fetchVideo(data)
|
2018-10-05 10:36:57 +00:00
|
|
|
|
2018-10-06 12:30:02 +00:00
|
|
|
console.log('=> Cleaning up..')
|
2020-09-26 06:06:53 +00:00
|
|
|
const clean = dl.parseTitle(file)
|
2018-10-06 12:30:02 +00:00
|
|
|
let filename = clean.artist + ' - ' + clean.title + '.mp3'
|
2018-10-05 10:36:57 +00:00
|
|
|
|
2018-10-06 12:30:02 +00:00
|
|
|
console.log('=> Original Title: ' + file.title + '\n')
|
|
|
|
console.log('== Determined Title: ' + clean.title)
|
|
|
|
console.log('== Determined Artist: ' + clean.artist)
|
|
|
|
console.log('== Determined File Name: ' + filename)
|
2018-10-05 10:36:57 +00:00
|
|
|
|
2020-09-26 06:06:53 +00:00
|
|
|
const titleAnsw = await asn.askAsync(rl, `Title [${clean.title}] ? `)
|
|
|
|
const artistAnsw = await asn.askAsync(rl, `Artist [${clean.artist}] ? `)
|
|
|
|
const fileAnsw = await asn.askAsync(rl, `File [${filename}] ? `)
|
2018-10-05 10:36:57 +00:00
|
|
|
|
2018-10-06 12:30:02 +00:00
|
|
|
if (titleAnsw && titleAnsw.trim() !== '') {
|
|
|
|
clean.title = titleAnsw
|
|
|
|
}
|
2018-10-05 10:36:57 +00:00
|
|
|
|
2018-10-06 12:30:02 +00:00
|
|
|
if (artistAnsw && artistAnsw.trim() !== '') {
|
|
|
|
clean.artist = artistAnsw
|
|
|
|
}
|
2018-10-05 10:36:57 +00:00
|
|
|
|
2018-10-06 12:30:02 +00:00
|
|
|
if (fileAnsw && fileAnsw.trim() !== '') {
|
|
|
|
filename = fileAnsw
|
2018-10-05 10:36:57 +00:00
|
|
|
}
|
|
|
|
|
2020-09-26 06:46:08 +00:00
|
|
|
filename = sanitize(filename)
|
2020-09-26 06:06:53 +00:00
|
|
|
const fn = path.join(musicdir, filename)
|
2020-01-12 13:29:31 +00:00
|
|
|
await asn.setMetadata(fn, clean, file.source, true)
|
2018-10-05 10:36:57 +00:00
|
|
|
|
2020-09-26 06:06:53 +00:00
|
|
|
const addAnsw = await asn.askAsync(rl, 'Would you like to add it to the database now? [N/y] ? ')
|
2019-12-17 17:52:18 +00:00
|
|
|
if (addAnsw && addAnsw.trim().toLowerCase().indexOf('y') === 0) {
|
|
|
|
// Add to database
|
|
|
|
try {
|
2020-09-26 06:06:53 +00:00
|
|
|
const verify = await asn.getInfos(fn)
|
2019-12-17 17:52:18 +00:00
|
|
|
await asn.insertDB(await dbPromise, verify)
|
|
|
|
} catch (e) {
|
|
|
|
console.warn('=!= Add to database failed!')
|
|
|
|
console.error(e.stack)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-10-06 12:30:02 +00:00
|
|
|
console.log('=> Done.')
|
|
|
|
rl.close()
|
|
|
|
}
|
2018-10-05 10:36:57 +00:00
|
|
|
|
2018-10-06 12:30:02 +00:00
|
|
|
download(process.argv[2]).catch((e) => {
|
|
|
|
console.error(e.message)
|
|
|
|
rl.close()
|
2018-10-05 10:36:57 +00:00
|
|
|
})
|