Try to persist data when installed as a PWA

This commit is contained in:
daylily
2026-01-15 23:39:07 -04:00
parent ff2065df88
commit 1b4df347f6
+23 -1
View File
@@ -1,5 +1,4 @@
<script lang="ts"> <script lang="ts">
import { Separator } from '$lib/components/ui/separator'
import { createConversionConfig } from '$lib/contexts/config.svelte' import { createConversionConfig } from '$lib/contexts/config.svelte'
import { createDeviceContext } from '$lib/contexts/device.svelte' import { createDeviceContext } from '$lib/contexts/device.svelte'
import { createFilesContext } from '$lib/contexts/files.svelte' import { createFilesContext } from '$lib/contexts/files.svelte'
@@ -9,7 +8,9 @@ import { createRenderedContext } from '$lib/contexts/rendered.svelte'
import ConnectSection from '$lib/layouts/connect/ConnectSection.svelte' import ConnectSection from '$lib/layouts/connect/ConnectSection.svelte'
import EditSection from '$lib/layouts/edit/EditSection.svelte' import EditSection from '$lib/layouts/edit/EditSection.svelte'
import WriteSection from '$lib/layouts/write/WriteSection.svelte' import WriteSection from '$lib/layouts/write/WriteSection.svelte'
import { effect } from '$lib/utils.svelte'
import { onMount } from 'svelte' import { onMount } from 'svelte'
import { MediaQuery } from 'svelte/reactivity'
import PermissionDeniedDialog from './dialog/PermissionDeniedDialog.svelte' import PermissionDeniedDialog from './dialog/PermissionDeniedDialog.svelte'
import PermissionRequestDialog from './dialog/PermissionRequestDialog.svelte' import PermissionRequestDialog from './dialog/PermissionRequestDialog.svelte'
import UnsupportedDialog from './dialog/UnsupportedDialog.svelte' import UnsupportedDialog from './dialog/UnsupportedDialog.svelte'
@@ -21,6 +22,27 @@ const filesCtx = createFilesContext()
const imageCtx = createImageContext(filesCtx) const imageCtx = createImageContext(filesCtx)
createRenderedContext(imageCtx, config) createRenderedContext(imageCtx, config)
const isStandalone = new MediaQuery('(display-mode: standalone)')
effect(
() => [isStandalone.current],
async () => {
console.log('App is running in standalone mode:', isStandalone.current)
if (!isStandalone.current) return
if (!navigator.storage || !navigator.storage.persist) return
if (await navigator.storage.persisted()) {
console.log('Storage is already persisted')
return
}
try {
const persisted = await navigator.storage.persist()
console.log('Storage persisted:', persisted)
} catch (e) {
console.error('Error while requesting storage persistence:', e)
}
},
)
onMount(async () => { onMount(async () => {
await midiCtx.initialize() await midiCtx.initialize()
}) })