Will wait between downloads, set in milliseconds. Setting this high should help when downloading large numbers of items.
139 lines
No EOL
3.7 KiB
TypeScript
139 lines
No EOL
3.7 KiB
TypeScript
import yargs, { Choices } from 'yargs';
|
|
import { args, AvailableMuxer, groups } from './module.args';
|
|
import { LanguageItem } from './module.langsData';
|
|
|
|
let argvC: {
|
|
[x: string]: unknown;
|
|
ccTag: string,
|
|
defaultAudio: LanguageItem,
|
|
defaultSub: LanguageItem,
|
|
ffmpegOptions: string[],
|
|
mkvmergeOptions: string[],
|
|
force: 'Y'|'y'|'N'|'n'|'C'|'c',
|
|
skipUpdate: boolean,
|
|
videoTitle: string,
|
|
override: string[],
|
|
fsRetryTime: number,
|
|
forceMuxer: AvailableMuxer|undefined;
|
|
username: string|undefined,
|
|
password: string|undefined,
|
|
silentAuth: boolean,
|
|
skipSubMux: boolean,
|
|
downloadArchive: boolean,
|
|
addArchive: boolean,
|
|
but: boolean,
|
|
auth: boolean | undefined;
|
|
dlFonts: boolean | undefined;
|
|
search: string | undefined;
|
|
'search-type': string;
|
|
page: number | undefined;
|
|
'search-locale': string;
|
|
new: boolean | undefined;
|
|
'movie-listing': string | undefined;
|
|
series: string | undefined;
|
|
s: string | undefined;
|
|
e: string | undefined;
|
|
extid: string | undefined;
|
|
q: number;
|
|
x: number;
|
|
kstream: number;
|
|
partsize: number;
|
|
hslang: string;
|
|
dlsubs: string[];
|
|
novids: boolean | undefined;
|
|
noaudio: boolean | undefined;
|
|
nosubs: boolean | undefined;
|
|
dubLang: string[];
|
|
all: boolean;
|
|
fontSize: number;
|
|
allDubs: boolean;
|
|
timeout: number;
|
|
waittime: number;
|
|
simul: boolean;
|
|
mp4: boolean;
|
|
skipmux: boolean | undefined;
|
|
fileName: string;
|
|
numbers: number;
|
|
nosess: string;
|
|
debug: boolean | undefined;
|
|
nocleanup: boolean;
|
|
help: boolean | undefined;
|
|
service: 'funi' | 'crunchy' | 'hidive';
|
|
update: boolean;
|
|
fontName: string | undefined;
|
|
_: (string | number)[];
|
|
$0: string;
|
|
dlVideoOnce: boolean;
|
|
removeBumpers: boolean;
|
|
originalFontSize: boolean;
|
|
};
|
|
|
|
export type ArgvType = typeof argvC;
|
|
|
|
const appArgv = (cfg: {
|
|
[key: string]: unknown
|
|
}, isGUI = false) => {
|
|
if (argvC)
|
|
return argvC;
|
|
yargs(process.argv.slice(2));
|
|
const argv = getArgv(cfg, isGUI)
|
|
.parseSync();
|
|
argvC = argv;
|
|
return argv;
|
|
};
|
|
|
|
|
|
const overrideArguments = (cfg: { [key:string]: unknown }, override: Partial<typeof argvC>, isGUI = false) => {
|
|
const argv = getArgv(cfg, isGUI).middleware((ar) => {
|
|
for (const key of Object.keys(override)) {
|
|
ar[key] = override[key];
|
|
}
|
|
}).parseSync();
|
|
argvC = argv;
|
|
};
|
|
|
|
export {
|
|
appArgv,
|
|
overrideArguments
|
|
};
|
|
|
|
const getArgv = (cfg: { [key:string]: unknown }, isGUI: boolean) => {
|
|
const parseDefault = <T = unknown>(key: string, _default: T) : T=> {
|
|
if (Object.prototype.hasOwnProperty.call(cfg, key)) {
|
|
return cfg[key] as T;
|
|
} else
|
|
return _default;
|
|
};
|
|
|
|
const argv = yargs.parserConfiguration({
|
|
'duplicate-arguments-array': false,
|
|
'camel-case-expansion': false,
|
|
})
|
|
.wrap(yargs.terminalWidth())
|
|
.usage('Usage: $0 [options]')
|
|
.help(true).version(false);
|
|
const data = args.map(a => {
|
|
return {
|
|
...a,
|
|
demandOption: !isGUI && a.demandOption,
|
|
group: groups[a.group],
|
|
default: typeof a.default === 'object' && !Array.isArray(a.default) ?
|
|
parseDefault((a.default as any).name || a.name, (a.default as any).default) : a.default
|
|
};
|
|
});
|
|
for (const item of data)
|
|
argv.option(item.name, {
|
|
...item,
|
|
coerce: (value) => {
|
|
if (item.transformer) {
|
|
return item.transformer(value);
|
|
} else {
|
|
return value;
|
|
}
|
|
},
|
|
choices: item.name === 'service' && isGUI ? undefined : item.choices as unknown as Choices
|
|
});
|
|
return argv as unknown as yargs.Argv<typeof argvC>;
|
|
};
|
|
|
|
|