diff --git a/package.json b/package.json index 376e914..69bb382 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "@sveltejs/vite-plugin-svelte": "^4.0.0", "@types/eslint": "^9.6.0", "@types/js-cookie": "^3.0.6", + "@types/jsmediatags": "^3.9.6", "autoprefixer": "^10.4.20", "eslint": "^9.7.0", "eslint-config-prettier": "^9.1.0", @@ -42,8 +43,12 @@ "client-zip": "^2.4.5", "clsx": "^2.1.1", "js-cookie": "^3.0.5", + "jsmediatags": "^3.9.7", "lucide-svelte": "^0.456.0", "svelte-adapter-bun": "^0.5.2", "wasm-vips": "^0.0.11" + }, + "patchedDependencies": { + "jsmediatags@3.9.7": "patches/jsmediatags@3.9.7.patch" } } diff --git a/patches/jsmediatags@3.9.7.patch b/patches/jsmediatags@3.9.7.patch new file mode 100644 index 0000000..b95dfd0 --- /dev/null +++ b/patches/jsmediatags@3.9.7.patch @@ -0,0 +1,15 @@ +diff --git a/package.json b/package.json +index 1265c61a16be5dc94dea97e1a7bcd117b0b5c0fe..602a37452738d778bf705b7a2931a661e363e33c 100644 +--- a/package.json ++++ b/package.json +@@ -18,8 +18,8 @@ + "email": "jesse.ditson@gmail.com" + } + ], +- "main": "build2/jsmediatags.js", +- "browser": "dist/jsmediatags.js", ++ "main": "dist/jsmediatags.min.js", ++ "browser": "dist/jsmediatags.min.js", + "repository": { + "type": "git", + "url": "git+https://github.com/aadsm/jsmediatags.git" diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5004409..8f37d00 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -6,6 +6,8 @@ import { files } from "$lib/store/index.svelte"; import { VertFile } from "$lib/types/file.svelte"; import { Check } from "lucide-svelte"; + import jsmediatags from "jsmediatags"; + import type { TagType } from "jsmediatags/types/index.js"; const { data } = $props(); @@ -59,7 +61,53 @@ }; img.onerror = async () => { - resolve(new VertFile(f, to, converter)); + // resolve(new VertFile(f, to, converter)); + const reader = new FileReader(); + reader.onload = async (e) => { + try { + const tags = await new Promise( + (resolve, reject) => { + jsmediatags.read( + new Blob([ + new Uint8Array( + e.target + ?.result as ArrayBuffer, + ), + ]), + { + onSuccess: (tag) => + resolve(tag), + onError: (error) => + reject(error), + }, + ); + }, + ); + console.log(tags); + const picture = tags.tags.picture; + if (!picture) { + resolve(new VertFile(f, to, converter)); + return; + } + const blob = new Blob( + [new Uint8Array(picture.data)], + { + type: picture.format, + }, + ); + resolve( + new VertFile( + f, + to, + converter, + URL.createObjectURL(blob), + ), + ); + } catch { + resolve(new VertFile(f, to, converter)); + } + }; + reader.readAsArrayBuffer(f); }; }, ); diff --git a/src/routes/convert/+page.svelte b/src/routes/convert/+page.svelte index bb0b7df..a577bec 100644 --- a/src/routes/convert/+page.svelte +++ b/src/routes/convert/+page.svelte @@ -10,7 +10,7 @@ import { files } from "$lib/store/index.svelte"; import type { VertFile } from "$lib/types"; import clsx from "clsx"; - import { ArrowRight, XIcon } from "lucide-svelte"; + import { ArrowRight, Disc2Icon, FileAudioIcon, XIcon } from "lucide-svelte"; import { onMount } from "svelte"; import { quintOut } from "svelte/easing"; @@ -254,7 +254,7 @@ >
{#if processings[files.files.length - i - 1]}
- {#if converter && converter.supportedFormats.includes(file.from)} - from - {file.from} - to -
- { - file.result = null; - }} - /> -
- {:else} - {file.from} +
+ {#if converter && converter.supportedFormats.includes(file.from)} + from + {file.from} + to +
+ { + file.result = + null; + }} + /> +
+ {:else} + {file.from} - - is not supported! - - {/if} + + is not supported! + + {/if} +
-
-
- -
+ {#if file.blobUrl} +
+
+ +
+ {:else} +
+ +
+ {/if}
{/if}