'use strict' import readline from 'readline' import path from 'path' import sanitize from 'sanitize-filename' import * as asn from './common/async' import * as dl from './common/download' import { dbPromise } from './database' const values = require(path.join(process.cwd(), 'values.json')) const musicdir = path.resolve(values.directory) const rl = readline.createInterface({ input: process.stdin, output: process.stdout }) async function download (furl) { console.log('=> Getting information..') const data = await dl.getVideoInfo(furl) console.log('=> Downloading file..') const file = await dl.fetchVideo(data) console.log('=> Cleaning up..') const clean = dl.parseTitle(file) let filename = clean.artist + ' - ' + clean.title + '.mp3' 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) 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}] ? `) if (titleAnsw && titleAnsw.trim() !== '') { clean.title = titleAnsw } if (artistAnsw && artistAnsw.trim() !== '') { clean.artist = artistAnsw } if (fileAnsw && fileAnsw.trim() !== '') { filename = fileAnsw } filename = sanitize(filename) const fn = path.join(musicdir, filename) await asn.setMetadata(fn, clean, file.source, true) const addAnsw = await asn.askAsync(rl, 'Would you like to add it to the database now? [N/y] ? ') if (addAnsw && addAnsw.trim().toLowerCase().indexOf('y') === 0) { // Add to database try { const verify = await asn.getInfos(fn) await asn.insertDB(await dbPromise, verify) } catch (e) { console.warn('=!= Add to database failed!') console.error(e.stack) } } console.log('=> Done.') rl.close() } download(process.argv[2]).catch((e) => { console.error(e.message) rl.close() })