From fbe8ef8ba1b0ed6d892a94b21995a39508ae9ade Mon Sep 17 00:00:00 2001 From: awalol Date: Fri, 11 Jul 2025 23:40:31 +0800 Subject: [PATCH] fix: add MIME type for the decrypted file --- src/decrypt-worker/util/audioType.ts | 10 ++++++++++ src/decrypt-worker/util/buffer.ts | 4 ++-- src/decrypt-worker/worker/decrypt.ts | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/decrypt-worker/util/audioType.ts b/src/decrypt-worker/util/audioType.ts index 71b1b58..db1d305 100644 --- a/src/decrypt-worker/util/audioType.ts +++ b/src/decrypt-worker/util/audioType.ts @@ -24,3 +24,13 @@ export function isDataLooksLikeAudio(buffer: Uint8Array): boolean { detectResult.free(); return ok; } + +export const AudioMimeType: { [key: string]: string } = { + mp3: 'audio/mpeg', + flac: 'audio/flac', + m4a: 'audio/mp4', + ogg: 'audio/ogg', + wma: 'audio/x-ms-wma', + wav: 'audio/x-wav', + dff: 'audio/x-dff', +}; diff --git a/src/decrypt-worker/util/buffer.ts b/src/decrypt-worker/util/buffer.ts index d7d95cf..b6617c5 100644 --- a/src/decrypt-worker/util/buffer.ts +++ b/src/decrypt-worker/util/buffer.ts @@ -1,7 +1,7 @@ export const toArrayBuffer = async (src: Blob | ArrayBuffer | Uint8Array) => src instanceof Blob ? await src.arrayBuffer() : src; -export const toBlob = (src: Blob | ArrayBuffer | Uint8Array) => - src instanceof Blob ? src : new Blob([src]); +export const toBlob = (src: Blob | ArrayBuffer | Uint8Array, mimeType?: string) => + src instanceof Blob ? src : new Blob([src], { type: mimeType ?? 'application/octet-stream' }); export function* chunkBuffer(buffer: Uint8Array, blockLen = 4096): Generator<[Uint8Array, number], void> { const len = buffer.byteLength; diff --git a/src/decrypt-worker/worker/decrypt.ts b/src/decrypt-worker/worker/decrypt.ts index 7c146c9..f1fab98 100644 --- a/src/decrypt-worker/worker/decrypt.ts +++ b/src/decrypt-worker/worker/decrypt.ts @@ -6,7 +6,7 @@ import { DecipherFactory, DecipherInstance, Status } from '~/decrypt-worker/Deci import { UnsupportedSourceFile } from '~/decrypt-worker/util/DecryptError.ts'; import { ready as umCryptoReady } from '@unlock-music/crypto'; import { go } from '~/util/go.ts'; -import { detectAudioExtension } from '~/decrypt-worker/util/audioType.ts'; +import { AudioMimeType, detectAudioExtension } from '~/decrypt-worker/util/audioType.ts'; class DecryptCommandHandler { private readonly label: string; @@ -75,7 +75,7 @@ class DecryptCommandHandler { audioExt = 'm4a'; } - return { decrypted: URL.createObjectURL(toBlob(result.data)), ext: audioExt }; + return { decrypted: URL.createObjectURL(toBlob(result.data, AudioMimeType[audioExt])), ext: audioExt }; } }