diff --git a/src/batch.ts b/src/batch.ts index 46d30e6..55ba0f4 100644 --- a/src/batch.ts +++ b/src/batch.ts @@ -44,6 +44,17 @@ export default function(args: string[], done: (err?: Error) => void) config.video_quality = resol_table['1080'].quality; } + if (config.debug) + { + /* Ugly but meh */ + const tmp = JSON.parse(JSON.stringify(config)); + tmp.pass = 'obfuscated'; + tmp.user = 'obfustated'; + tmp.rawArgs = undefined; + tmp.options = undefined; + log.dumpToDebug('Config', JSON.stringify(tmp), true); + } + tasks(config, batchPath, (err, tasksArr) => { if (err) @@ -203,6 +214,7 @@ function parse(args: string[]): IConfigLine .option('-g, --rebuildcrp', 'Rebuild the crpersistant file.') .option('-b, --batch ', 'Batch file', 'CrunchyRoll.txt') .option('--verbose', 'Make tool verbose') + .option('--debug', 'Create a debug file. Use only if requested!') .option('--retry ', 'Number or time to retry fetching an episode. Default: 5', 5) .parse(args); } diff --git a/src/interface/IConfig.d.ts b/src/interface/IConfig.d.ts index 71b0ea5..beec3ee 100644 --- a/src/interface/IConfig.d.ts +++ b/src/interface/IConfig.d.ts @@ -17,5 +17,6 @@ interface IConfig { rebuildcrp?: boolean; batch?: string; verbose?: boolean; + debug?: boolean; retry?: number; } diff --git a/src/log.ts b/src/log.ts index 022c274..16c7a81 100644 --- a/src/log.ts +++ b/src/log.ts @@ -1,7 +1,8 @@ 'use strict'; import os = require('os'); +import fs = require('fs-extra'); -export function error(str: string) +export function error(str: string|Error) { /* Do fancy output */ console.error(' \x1B[1;31m* ERROR\x1B[0m: ' + str); @@ -35,3 +36,20 @@ export function dispEpisode(name: string, status: string, addNL: boolean) console.log(''); } } + +export function dumpToDebug(what: string, data: any, create = false) +{ + if (create) + { + fs.writeFile('debug.txt', '>>>>>>>> ' + what + ':\n' + data + '\n<<<<<<<<\n', (err) => + { + if (err) throw err; + }); + return; + } + + fs.appendFile('debug.txt', '>>>>>>>> ' + what + ':\n' + data + '\n<<<<<<<<\n', (err) => + { + if (err) throw err; + }); +} \ No newline at end of file diff --git a/src/series.ts b/src/series.ts index b3d6ff6..d33c34d 100644 --- a/src/series.ts +++ b/src/series.ts @@ -59,7 +59,7 @@ export default function(config: IConfig, address: string, done: (err: Error) => if (page.episodes[i].retry <= 0) { log.dispEpisode(config.filename, 'Error...', true); - console.error(errD); + log.error(errD); log.error('Cannot fetch episode "s' + page.episodes[i].volume + 'e' + page.episodes[i].episode + '", please rerun later'); /* Go to the next on the list */ @@ -68,9 +68,15 @@ export default function(config: IConfig, address: string, done: (err: Error) => else { log.dispEpisode(config.filename, 'Error...', true); - if (config.verbose) + if ((config.verbose) || (config.debug)) { - console.error(errD); + if (config.debug) + { + log.dumpToDebug('series address', address); + log.dumpToDebug('series error', errD.stack || errD); + log.dumpToDebug('series data', JSON.stringify(page)); + } + log.error(errD); } log.warn('Retrying to fetch episode "s' + page.episodes[i].volume + 'e' + page.episodes[i].episode + '" - Retry ' + page.episodes[i].retry + ' / ' + config.retry); @@ -161,6 +167,11 @@ function page(config: IConfig, address: string, done: (err: Error, result?: ISer const title = $('span[itemprop=name]').text(); if (!title) { + if (config.debug) + { + log.dumpToDebug('inval page addr', address); + log.dumpToDebug('inval page data', $); + } return done(new Error('Invalid page.(' + address + ')')); }