From c867323455cef43783d9dc5a292b7b416c41d8b0 Mon Sep 17 00:00:00 2001 From: Eridanus Sora Date: Tue, 9 Jan 2024 23:57:09 +0800 Subject: [PATCH] stagecrowd hotfix --- npm-shrinkwrap.json | 4 ++-- package.json | 2 +- src/core/archive.ts | 21 +++++++++++++++++++++ src/core/downloader.ts | 2 ++ src/core/parsers/bcovlive.ts | 9 +++++++++ 5 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 src/core/parsers/bcovlive.ts diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index dc7a3fc..165f3ad 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,12 +1,12 @@ { "name": "minyami", - "version": "5.0.2", + "version": "5.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "minyami", - "version": "5.0.2", + "version": "5.1.0", "license": "GPL-3.0-or-later", "dependencies": { "@eridanussora/reconnecting-websocket": "^4.4.2", diff --git a/package.json b/package.json index f682f6b..a47f790 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "minyami", - "version": "5.0.2", + "version": "5.1.0", "description": "", "main": "dist/exports.js", "types": "dist/exports.d.ts", diff --git a/src/core/archive.ts b/src/core/archive.ts index e694f08..6277dc2 100644 --- a/src/core/archive.ts +++ b/src/core/archive.ts @@ -159,6 +159,22 @@ class ArchiveDownloader extends Downloader { parser.default.parse({ downloader: this, }); + } else if (this.m3u8Path.includes("bcovlive")) { + // stagecrowd + logger.info("Site comfirmed: Stagecrowd."); + try { + const siteParser = await import("./parsers/bcovlive"); + const parser = await import("./parsers/common"); + await siteParser.default.parse({ + downloader: this, + }); + await parser.default.parse({ + downloader: this, + }); + } catch (e) { + logger.error("Aborted due to critical error.", e); + this.emit("critical-error", e); + } } else { logger.warning(`Site is not supported by Minyami Core. Try common parser.`); try { @@ -438,6 +454,11 @@ class ArchiveDownloader extends Downloader { task.parentGroup.retryActions = true; task.parentGroup.subTasks.unshift(task); } + } else if (this._internal_dropChunksInArchiveMode && task.retryCount >= this.retries) { + // 对于部分网站 放弃无法下载的分块 + this.taskStatusRecord[task.id] = TaskStatus.DROPPED; + this.finishedChunkCount++; + logger.warning(`Processing ${task.filename} failed, max retries exceed, drop.`); } else { this.downloadTasks.unshift(task); } diff --git a/src/core/downloader.ts b/src/core/downloader.ts index e19c84c..8a55a18 100644 --- a/src/core/downloader.ts +++ b/src/core/downloader.ts @@ -139,6 +139,8 @@ class Downloader extends EventEmitter { taskStatusRecord: TaskStatus[] = []; + _internal_dropChunksInArchiveMode = false; + protected async onKeyUpdated({ keyUrls, explicitKeys, saveEncryptionKey }: OnKeyUpdatedParams) {} protected onTaskOutputFileNaming(chunk: M3U8Chunk, id: number) { diff --git a/src/core/parsers/bcovlive.ts b/src/core/parsers/bcovlive.ts new file mode 100644 index 0000000..4c3ddd2 --- /dev/null +++ b/src/core/parsers/bcovlive.ts @@ -0,0 +1,9 @@ +import { ParserOptions, ParserResult } from "./types"; + +export default class Parser { + static prefix = ""; + static parse({ downloader }: ParserOptions): ParserResult { + downloader._internal_dropChunksInArchiveMode = true; + return {}; + } +}