diff --git a/src/lib/components/VolumeItem.svelte b/src/lib/components/VolumeItem.svelte
index 3162f5f..ae82332 100644
--- a/src/lib/components/VolumeItem.svelte
+++ b/src/lib/components/VolumeItem.svelte
@@ -24,7 +24,7 @@
class="flex flex-row gap-5 items-center justify-between w-full"
>
-
{volumeName}
+
{decodeURI(volumeName)}
{progressDisplay}
{#if isComplete}
diff --git a/src/lib/upload/index.ts b/src/lib/upload/index.ts
index 76c76f7..7d1857e 100644
--- a/src/lib/upload/index.ts
+++ b/src/lib/upload/index.ts
@@ -4,6 +4,8 @@ import { showSnackbar } from '$lib/util/snackbar';
import { requestPersistentStorage } from '$lib/util/upload';
import { BlobReader, ZipReader, BlobWriter, getMimeType } from '@zip.js/zip.js';
+export * from './web-import'
+
const zipTypes = ['zip', 'cbz', 'ZIP', 'CBZ'];
const imageTypes = ['image/jpeg', 'image/png', 'image/webp'];
diff --git a/src/lib/upload/web-import.ts b/src/lib/upload/web-import.ts
new file mode 100644
index 0000000..f652752
--- /dev/null
+++ b/src/lib/upload/web-import.ts
@@ -0,0 +1,7 @@
+export function getItems(html: string) {
+ const parser = new DOMParser();
+ const htmlDoc = parser.parseFromString(html, 'text/html');
+
+ const items = htmlDoc.getElementsByTagName('a');
+ return [...items]
+}
\ No newline at end of file
diff --git a/src/routes/upload/+page.svelte b/src/routes/upload/+page.svelte
index 2a20b8b..309674c 100644
--- a/src/routes/upload/+page.svelte
+++ b/src/routes/upload/+page.svelte
@@ -1,19 +1,64 @@
-
-Upload directory
-Upload files
-
-{#await promise}
- Loading...
-{/await}
+{#if loading}
+ {message}
+{:else}
+
+{/if}