diff --git a/src/components/Renderer.svelte b/src/components/Renderer.svelte index 8c3113e..3ea82fd 100644 --- a/src/components/Renderer.svelte +++ b/src/components/Renderer.svelte @@ -1,9 +1,13 @@ + +
+ + + {#if overlayItems.length > 0} + + {/if} +
diff --git a/src/components/View.svelte b/src/components/View.svelte index cdaac22..04af3ea 100644 --- a/src/components/View.svelte +++ b/src/components/View.svelte @@ -271,6 +271,7 @@ {/if} +
req.result.createObjectStore('handles'); + req.onsuccess = () => { + req.result.transaction('handles', 'readwrite').objectStore('handles').put(handle, OUTPUT_HANDLE_KEY); + }; + } catch (e) { + console.warn('Could not save output folder:', e); + } +} + +export function loadOutputHandle(): Promise { + return new Promise((resolve) => { + try { + const req = indexedDB.open(OUTPUT_HANDLE_DB, 1); + req.onupgradeneeded = () => req.result.createObjectStore('handles'); + req.onsuccess = () => { + const tx = req.result.transaction('handles', 'readonly'); + const get = tx.objectStore('handles').get(OUTPUT_HANDLE_KEY); + get.onsuccess = () => resolve(get.result ?? null); + get.onerror = () => resolve(null); + }; + req.onerror = () => resolve(null); + } catch { + resolve(null); + } + }); +} + +export async function chooseOutputFolder(): Promise { + try { + if (!window.showDirectoryPicker) return null; + + const dir = await window.showDirectoryPicker({ + id: 'output', + mode: 'readwrite', + startIn: 'videos', + }); + saveOutputHandle(dir); + return dir; + } catch (e) { + if ((e as Error).name !== 'AbortError') console.error(e); + return null; + } +} + +export async function getOutputDirectory( + outputDirectoryHandle: FileSystemDirectoryHandle | null, +): Promise { + if (outputDirectoryHandle) { + try { + if (outputDirectoryHandle.requestPermission) { + const perm = await outputDirectoryHandle.requestPermission({ mode: 'readwrite' }); + if (perm !== 'granted') { + return await chooseOutputFolder(); + } + } + return outputDirectoryHandle; + } catch { + return await chooseOutputFolder(); + } + } + + return await chooseOutputFolder(); +} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 4078e74..8da3808 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -1,2 +1,3 @@ /// /// +///