Merge branch 'preview-features' of https://github.com/the1812/Bilibili-Evolved into preview-fixes

This commit is contained in:
the1812 2024-11-12 09:59:30 +08:00
parent 080b46003d
commit 0d9eaeb367
5 changed files with 52 additions and 7 deletions

View File

@ -131,4 +131,4 @@ const builtInItems: CheckInItem[] = [
}, },
] ]
export const [checkInItems] = registerAndGetData('checkInCenter.items', builtInItems) export const [checkInItems] = registerAndGetData('deleteFeeds.items', builtInItems)

View File

@ -41,6 +41,7 @@ const entry = async () => {
'bili-rich-text-topic', 'bili-rich-text-topic',
'bili-rich-text-module', 'bili-rich-text-module',
'bili-rich-text-link', 'bili-rich-text-link',
'bili-rich-text-viewpic',
].some(className => target.classList.contains(className)) ].some(className => target.classList.contains(className))
) { ) {
return return

View File

@ -33,7 +33,7 @@ export default Vue.extend({
}, },
methods: { methods: {
saveOptions() { saveOptions() {
options.muxWithMetadata = this.muxExtraAssets options.muxWithMetadata = this.muxWithMetadata
Object.assign(storedOptions, options) Object.assign(storedOptions, options)
}, },
}, },

View File

@ -17,7 +17,9 @@ enum FFMessageType {
EXEC = 'EXEC', EXEC = 'EXEC',
WRITE_FILE = 'WRITE_FILE', WRITE_FILE = 'WRITE_FILE',
READ_FILE = 'READ_FILE', READ_FILE = 'READ_FILE',
DELETE_FILE = 'DELETE_FILE',
ERROR = 'ERROR', ERROR = 'ERROR',
PROGRESS = 'PROGRESS',
} }
export class FFmpeg { export class FFmpeg {
@ -25,6 +27,8 @@ export class FFmpeg {
#resolves: Callbacks = {} #resolves: Callbacks = {}
#rejects: Callbacks = {} #rejects: Callbacks = {}
#progressEventCallback: (event: ProgressEvent) => void
public loaded = false public loaded = false
#registerHandlers = () => { #registerHandlers = () => {
@ -38,8 +42,14 @@ export class FFmpeg {
case FFMessageType.EXEC: case FFMessageType.EXEC:
case FFMessageType.WRITE_FILE: case FFMessageType.WRITE_FILE:
case FFMessageType.READ_FILE: case FFMessageType.READ_FILE:
case FFMessageType.DELETE_FILE:
this.#resolves[id](data) this.#resolves[id](data)
break break
case FFMessageType.PROGRESS:
if (this.#progressEventCallback) {
this.#progressEventCallback(<ProgressEvent>data)
}
break
case FFMessageType.ERROR: case FFMessageType.ERROR:
this.#rejects[id](data) this.#rejects[id](data)
break break
@ -140,6 +150,20 @@ export class FFmpeg {
undefined, undefined,
signal, signal,
) as Promise<Uint8Array> ) as Promise<Uint8Array>
public deleteFile = (path: string, signal?: AbortSignal) =>
this.#send(
{
type: FFMessageType.DELETE_FILE,
data: { path },
},
undefined,
signal,
) as Promise<boolean>
public onProgress(callback: (event: ProgressEvent) => void): void {
this.#progressEventCallback = callback
}
} }
// ========================================================================== // // ========================================================================== //
@ -165,18 +189,28 @@ interface FFMessageReadFileData {
encoding: string encoding: string
} }
interface FFMessageDeleteFileData {
path: string
}
type FFMessageData = type FFMessageData =
| FFMessageLoadConfig | FFMessageLoadConfig
| FFMessageExecData | FFMessageExecData
| FFMessageWriteFileData | FFMessageWriteFileData
| FFMessageReadFileData | FFMessageReadFileData
| FFMessageDeleteFileData
interface Message { interface Message {
type: string type: string
data?: FFMessageData 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 { interface Callbacks {
[id: number | string]: (data: CallbackData) => void [id: number | string]: (data: CallbackData) => void

View File

@ -2,6 +2,7 @@ import { DownloadPackage, PackageEntry } from '@/core/download'
import { meta } from '@/core/meta' import { meta } from '@/core/meta'
import { getComponentSettings } from '@/core/settings' import { getComponentSettings } from '@/core/settings'
import { Toast } from '@/core/toast' import { Toast } from '@/core/toast'
import { formatPercent } from '@/core/utils/formatters'
import { title as pluginTitle } from '.' import { title as pluginTitle } from '.'
import type { Options } from '../../../../components/video/download' import type { Options } from '../../../../components/video/download'
import { DownloadVideoAction } from '../../../../components/video/download/types' import { DownloadVideoAction } from '../../../../components/video/download/types'
@ -59,13 +60,13 @@ async function single(
httpGet(audioUrl, progress(1, '正在下载音频流')), httpGet(audioUrl, progress(1, '正在下载音频流')),
]) ])
ffmpeg.writeFile('video', video) await ffmpeg.writeFile('video', video)
ffmpeg.writeFile('audio', audio) await ffmpeg.writeFile('audio', audio)
const args = ['-i', 'video', '-i', 'audio'] const args = ['-i', 'video', '-i', 'audio']
if (ffmetadata) { if (ffmetadata) {
ffmpeg.writeFile('ffmetadata', new TextEncoder().encode(ffmetadata)) await ffmpeg.writeFile('ffmetadata', new TextEncoder().encode(ffmetadata))
args.push('-i', 'ffmetadata', '-map_metadata', '2') args.push('-i', 'ffmetadata', '-map_metadata', '2')
if (!outputMkv) { if (!outputMkv) {
args.push('-movflags', '+use_metadata_tags') args.push('-movflags', '+use_metadata_tags')
@ -76,7 +77,9 @@ async function single(
console.debug('FFmpeg commandline args:', args.join(' ')) console.debug('FFmpeg commandline args:', args.join(' '))
toast.message = '混流中……' ffmpeg.onProgress(event => {
toast.message = `混流中: ${formatPercent(event.progress)}`
})
await ffmpeg.exec(args) await ffmpeg.exec(args)
const output = await ffmpeg.readFile('output') const output = await ffmpeg.readFile('output')
@ -87,6 +90,13 @@ async function single(
toast.message = '完成!' toast.message = '完成!'
toast.duration = 1000 toast.duration = 1000
await Promise.all([
ffmpeg.deleteFile('video'),
ffmpeg.deleteFile('audio'),
ffmpeg.deleteFile('output'),
ffmetadata ? ffmpeg.deleteFile('ffmetadata') : Promise.resolve(),
])
await DownloadPackage.single( await DownloadPackage.single(
name.replace(/.[^/.]+$/, `.${outputMkv ? 'mkv' : 'mp4'}`), name.replace(/.[^/.]+$/, `.${outputMkv ? 'mkv' : 'mp4'}`),
outputBlob, outputBlob,