From 0d9eaeb3677dd64a10271d7939ef7f277d4a1f25 Mon Sep 17 00:00:00 2001 From: the1812 Date: Tue, 12 Nov 2024 09:59:30 +0800 Subject: [PATCH] Merge branch 'preview-features' of https://github.com/the1812/Bilibili-Evolved into preview-fixes --- .../feeds/del-feeds/check-in-item.ts | 2 +- .../components/feeds/disable-details/index.ts | 1 + .../video/download/wasm-output/Config.vue | 2 +- .../video/download/wasm-output/ffmpeg.ts | 36 ++++++++++++++++++- .../video/download/wasm-output/handler.ts | 18 +++++++--- 5 files changed, 52 insertions(+), 7 deletions(-) diff --git a/registry/lib/components/feeds/del-feeds/check-in-item.ts b/registry/lib/components/feeds/del-feeds/check-in-item.ts index aa06777df..67b56c0ca 100644 --- a/registry/lib/components/feeds/del-feeds/check-in-item.ts +++ b/registry/lib/components/feeds/del-feeds/check-in-item.ts @@ -131,4 +131,4 @@ const builtInItems: CheckInItem[] = [ }, ] -export const [checkInItems] = registerAndGetData('checkInCenter.items', builtInItems) +export const [checkInItems] = registerAndGetData('deleteFeeds.items', builtInItems) diff --git a/registry/lib/components/feeds/disable-details/index.ts b/registry/lib/components/feeds/disable-details/index.ts index cfc9e9a4b..c781c0a72 100644 --- a/registry/lib/components/feeds/disable-details/index.ts +++ b/registry/lib/components/feeds/disable-details/index.ts @@ -41,6 +41,7 @@ const entry = async () => { 'bili-rich-text-topic', 'bili-rich-text-module', 'bili-rich-text-link', + 'bili-rich-text-viewpic', ].some(className => target.classList.contains(className)) ) { return diff --git a/registry/lib/plugins/video/download/wasm-output/Config.vue b/registry/lib/plugins/video/download/wasm-output/Config.vue index 0934be6e4..09862e113 100644 --- a/registry/lib/plugins/video/download/wasm-output/Config.vue +++ b/registry/lib/plugins/video/download/wasm-output/Config.vue @@ -33,7 +33,7 @@ export default Vue.extend({ }, methods: { saveOptions() { - options.muxWithMetadata = this.muxExtraAssets + options.muxWithMetadata = this.muxWithMetadata Object.assign(storedOptions, options) }, }, diff --git a/registry/lib/plugins/video/download/wasm-output/ffmpeg.ts b/registry/lib/plugins/video/download/wasm-output/ffmpeg.ts index 5f991c0ba..f02e78d34 100644 --- a/registry/lib/plugins/video/download/wasm-output/ffmpeg.ts +++ b/registry/lib/plugins/video/download/wasm-output/ffmpeg.ts @@ -17,7 +17,9 @@ enum FFMessageType { EXEC = 'EXEC', WRITE_FILE = 'WRITE_FILE', READ_FILE = 'READ_FILE', + DELETE_FILE = 'DELETE_FILE', ERROR = 'ERROR', + PROGRESS = 'PROGRESS', } export class FFmpeg { @@ -25,6 +27,8 @@ export class FFmpeg { #resolves: Callbacks = {} #rejects: Callbacks = {} + #progressEventCallback: (event: ProgressEvent) => void + public loaded = false #registerHandlers = () => { @@ -38,8 +42,14 @@ export class FFmpeg { case FFMessageType.EXEC: case FFMessageType.WRITE_FILE: case FFMessageType.READ_FILE: + case FFMessageType.DELETE_FILE: this.#resolves[id](data) break + case FFMessageType.PROGRESS: + if (this.#progressEventCallback) { + this.#progressEventCallback(data) + } + break case FFMessageType.ERROR: this.#rejects[id](data) break @@ -140,6 +150,20 @@ export class FFmpeg { undefined, signal, ) as Promise + + public deleteFile = (path: string, signal?: AbortSignal) => + this.#send( + { + type: FFMessageType.DELETE_FILE, + data: { path }, + }, + undefined, + signal, + ) as Promise + + public onProgress(callback: (event: ProgressEvent) => void): void { + this.#progressEventCallback = callback + } } // ========================================================================== // @@ -165,18 +189,28 @@ interface FFMessageReadFileData { encoding: string } +interface FFMessageDeleteFileData { + path: string +} + type FFMessageData = | FFMessageLoadConfig | FFMessageExecData | FFMessageWriteFileData | FFMessageReadFileData + | FFMessageDeleteFileData interface Message { type: string data?: FFMessageData } -type CallbackData = Uint8Array | string | boolean | Error | undefined +interface ProgressEvent { + progress: number + time: number +} + +type CallbackData = Uint8Array | string | boolean | Error | ProgressEvent | undefined interface Callbacks { [id: number | string]: (data: CallbackData) => void diff --git a/registry/lib/plugins/video/download/wasm-output/handler.ts b/registry/lib/plugins/video/download/wasm-output/handler.ts index 7d6842e1c..4be359a0d 100644 --- a/registry/lib/plugins/video/download/wasm-output/handler.ts +++ b/registry/lib/plugins/video/download/wasm-output/handler.ts @@ -2,6 +2,7 @@ import { DownloadPackage, PackageEntry } from '@/core/download' import { meta } from '@/core/meta' import { getComponentSettings } from '@/core/settings' import { Toast } from '@/core/toast' +import { formatPercent } from '@/core/utils/formatters' import { title as pluginTitle } from '.' import type { Options } from '../../../../components/video/download' import { DownloadVideoAction } from '../../../../components/video/download/types' @@ -59,13 +60,13 @@ async function single( httpGet(audioUrl, progress(1, '正在下载音频流')), ]) - ffmpeg.writeFile('video', video) - ffmpeg.writeFile('audio', audio) + await ffmpeg.writeFile('video', video) + await ffmpeg.writeFile('audio', audio) const args = ['-i', 'video', '-i', 'audio'] if (ffmetadata) { - ffmpeg.writeFile('ffmetadata', new TextEncoder().encode(ffmetadata)) + await ffmpeg.writeFile('ffmetadata', new TextEncoder().encode(ffmetadata)) args.push('-i', 'ffmetadata', '-map_metadata', '2') if (!outputMkv) { args.push('-movflags', '+use_metadata_tags') @@ -76,7 +77,9 @@ async function single( console.debug('FFmpeg commandline args:', args.join(' ')) - toast.message = '混流中……' + ffmpeg.onProgress(event => { + toast.message = `混流中: ${formatPercent(event.progress)}` + }) await ffmpeg.exec(args) const output = await ffmpeg.readFile('output') @@ -87,6 +90,13 @@ async function single( toast.message = '完成!' toast.duration = 1000 + await Promise.all([ + ffmpeg.deleteFile('video'), + ffmpeg.deleteFile('audio'), + ffmpeg.deleteFile('output'), + ffmetadata ? ffmpeg.deleteFile('ffmetadata') : Promise.resolve(), + ]) + await DownloadPackage.single( name.replace(/.[^/.]+$/, `.${outputMkv ? 'mkv' : 'mp4'}`), outputBlob,