diff --git a/@types/hls-download.d.ts b/@types/hls-download.d.ts index a919fdb..4f05aee 100644 --- a/@types/hls-download.d.ts +++ b/@types/hls-download.d.ts @@ -12,7 +12,8 @@ declare module 'hls-download' { baseurl?: string, proxy?: string, skipInit?: boolean, - timeout?: number + timeout?: number, + fsRetryTime?: number }) async download() : Promise<{ ok: boolean, diff --git a/crunchy.ts b/crunchy.ts index f9def79..3ea7c15 100644 --- a/crunchy.ts +++ b/crunchy.ts @@ -1375,7 +1375,8 @@ async function downloadMediaList(medias: CrunchyEpMeta) : Promise<{ timeout: argv.timeout, m3u8json: chunkPlaylist, // baseurl: chunkPlaylist.baseUrl, - threads: argv.partsize + threads: argv.partsize, + fsRetryTime: argv.fsRetryTime * 1000 }).download(); if(!dlStreamByPl.ok){ console.log(`[ERROR] DL Stats: ${JSON.stringify(dlStreamByPl.parts)}\n`); diff --git a/funi.ts b/funi.ts index 0c0ad6b..7bbdf18 100644 --- a/funi.ts +++ b/funi.ts @@ -783,7 +783,8 @@ async function downloadFile(filename: string, chunkList: { m3u8json: chunkList, output: `${filename + '.ts'}`, timeout: argv.timeout, - threads: argv.partsize + threads: argv.partsize, + fsRetryTime: argv.fsRetryTime * 1000 }).download(); return downloadStatus.ok; diff --git a/modules/module.app-args.ts b/modules/module.app-args.ts index 866eb86..308faf4 100644 --- a/modules/module.app-args.ts +++ b/modules/module.app-args.ts @@ -3,7 +3,7 @@ import { args, AvailableMuxer, groups } from './module.args'; yargs(process.argv.slice(2)); -let argvC: { [x: string]: unknown; 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; 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; simul: boolean; mp4: boolean; skipmux: boolean | undefined; fileName: string; numbers: number; nosess: string; debug: boolean | undefined; nocleanup: boolean; help: boolean | undefined; service: 'funi' | 'crunchy'; update: boolean; fontName: string | undefined; _: (string | number)[]; $0: string; }; +let argvC: { [x: string]: unknown; 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; 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; simul: boolean; mp4: boolean; skipmux: boolean | undefined; fileName: string; numbers: number; nosess: string; debug: boolean | undefined; nocleanup: boolean; help: boolean | undefined; service: 'funi' | 'crunchy'; update: boolean; fontName: string | undefined; _: (string | number)[]; $0: string; }; export type ArgvType = typeof argvC; diff --git a/modules/module.args.ts b/modules/module.args.ts index 1557335..ee86f57 100644 --- a/modules/module.args.ts +++ b/modules/module.args.ts @@ -555,6 +555,18 @@ const args: TAppArg[] = [ default: undefined } }, + { + name: 'fsRetryTime', + describe: 'Set the time the downloader waits before retrying if an error while writing the file occurs', + docDescribe: true, + group: 'dl', + service: 'both', + type: 'number', + usage: '${time in seconds}', + default: { + default: 5 + }, + } ]; export { diff --git a/package-lock.json b/package-lock.json index 944b4f9..7b95c6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "multi-downloader-nx", - "version": "2.0.17", + "version": "2.0.18", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "multi-downloader-nx", - "version": "2.0.17", + "version": "2.0.18", "license": "MIT", "dependencies": { "cheerio": "^1.0.0-rc.10", "form-data": "^4.0.0", "fs-extra": "^10.0.0", "got": "^11.8.3", - "hls-download": "^2.6.6", + "hls-download": "^2.6.7", "iso-639": "^0.2.2", "lookpath": "^1.1.0", "m3u8-parsed": "^1.3.0", @@ -279,9 +279,9 @@ } }, "node_modules/@sindresorhus/is": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.1.tgz", - "integrity": "sha512-BrzrgtaqEre0qfvI8sMTaEvx+bayuhPmfe2rfeUGPPHYr/PLxCOqkOe4TQTDPb+qcqgNcsAtXV/Ew74mcDIE8w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.3.0.tgz", + "integrity": "sha512-wwOvh0eO3PiTEivGJWiZ+b946SlMSb4pe+y+Ur/4S87cwo09pYi+FWHHnbrM3W9W7cBYKDqQXcrFYjYUCOJUEQ==", "engines": { "node": ">=10" }, @@ -372,9 +372,9 @@ } }, "node_modules/@types/node": { - "version": "16.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", - "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==" + "version": "16.11.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.20.tgz", + "integrity": "sha512-lAKaZ0Lc1Umwd0AqLr6iy5U8u/1DpK7/JzNgQn9cMMUk2mFR8bbhEP8BQrI9Cm5CU0bOVCaWbkGBvgqKMOJHsw==" }, "node_modules/@types/responselike": { "version": "1.0.0", @@ -1607,9 +1607,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2188,9 +2188,9 @@ "dev": true }, "node_modules/hls-download": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/hls-download/-/hls-download-2.6.6.tgz", - "integrity": "sha512-2lcQ1GGX89hiN3YLE6C2/GmcRAeUSRm+7sxLQ6ZZ6uqiGOxBGsr/+xG7gRXCUFJIfDudwlRkSUDaLo6qhcXBsw==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/hls-download/-/hls-download-2.6.7.tgz", + "integrity": "sha512-74etN9G6LjDgCCuv0cvNPIUXOFNHWxXA6tyu10/cZSn6wYhF7L8c4QnE/MKpWr557HIDaQJJjWsg8NBAre24LQ==", "dependencies": { "got": "^11.8.3", "proxy-agent": "^5.0.0", @@ -2744,15 +2744,23 @@ } }, "node_modules/node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, "engines": { "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, "node_modules/normalize-url": { @@ -4429,9 +4437,9 @@ } }, "@sindresorhus/is": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.1.tgz", - "integrity": "sha512-BrzrgtaqEre0qfvI8sMTaEvx+bayuhPmfe2rfeUGPPHYr/PLxCOqkOe4TQTDPb+qcqgNcsAtXV/Ew74mcDIE8w==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.3.0.tgz", + "integrity": "sha512-wwOvh0eO3PiTEivGJWiZ+b946SlMSb4pe+y+Ur/4S87cwo09pYi+FWHHnbrM3W9W7cBYKDqQXcrFYjYUCOJUEQ==" }, "@szmarczak/http-timer": { "version": "4.0.6", @@ -4510,9 +4518,9 @@ } }, "@types/node": { - "version": "16.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", - "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==" + "version": "16.11.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.20.tgz", + "integrity": "sha512-lAKaZ0Lc1Umwd0AqLr6iy5U8u/1DpK7/JzNgQn9cMMUk2mFR8bbhEP8BQrI9Cm5CU0bOVCaWbkGBvgqKMOJHsw==" }, "@types/responselike": { "version": "1.0.0", @@ -5410,9 +5418,9 @@ } }, "eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", "dev": true }, "espree": { @@ -5843,9 +5851,9 @@ "dev": true }, "hls-download": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/hls-download/-/hls-download-2.6.6.tgz", - "integrity": "sha512-2lcQ1GGX89hiN3YLE6C2/GmcRAeUSRm+7sxLQ6ZZ6uqiGOxBGsr/+xG7gRXCUFJIfDudwlRkSUDaLo6qhcXBsw==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/hls-download/-/hls-download-2.6.7.tgz", + "integrity": "sha512-74etN9G6LjDgCCuv0cvNPIUXOFNHWxXA6tyu10/cZSn6wYhF7L8c4QnE/MKpWr557HIDaQJJjWsg8NBAre24LQ==", "requires": { "got": "^11.8.3", "proxy-agent": "^5.0.0", @@ -6276,9 +6284,9 @@ } }, "node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "requires": { "whatwg-url": "^5.0.0" diff --git a/package.json b/package.json index 82d00b0..9a65f76 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "multi-downloader-nx", "short_name": "aniDL", - "version": "2.0.17", + "version": "2.0.18", "description": "Download videos from Funimation or Crunchyroll via cli", "keywords": [ "download", @@ -30,7 +30,7 @@ "form-data": "^4.0.0", "fs-extra": "^10.0.0", "got": "^11.8.3", - "hls-download": "^2.6.6", + "hls-download": "^2.6.7", "iso-639": "^0.2.2", "lookpath": "^1.1.0", "m3u8-parsed": "^1.3.0",