Fix session persistence on android
This commit is contained in:
parent
b8ec94e548
commit
20f12a48a4
4 changed files with 26 additions and 25 deletions
20
package.json
20
package.json
|
|
@ -76,16 +76,16 @@
|
|||
"@types/throttle-debounce": "^5.0.2",
|
||||
"@vite-pwa/assets-generator": "^1.0.2",
|
||||
"@vite-pwa/sveltekit": "^1.1.0",
|
||||
"@welshman/app": "^0.9.0-pre6",
|
||||
"@welshman/content": "^0.9.0-pre6",
|
||||
"@welshman/domain": "^0.9.0-pre6",
|
||||
"@welshman/editor": "^0.9.0-pre6",
|
||||
"@welshman/feeds": "^0.9.0-pre6",
|
||||
"@welshman/lib": "^0.9.0-pre6",
|
||||
"@welshman/net": "^0.9.0-pre6",
|
||||
"@welshman/signer": "^0.9.0-pre6",
|
||||
"@welshman/store": "^0.9.0-pre6",
|
||||
"@welshman/util": "^0.9.0-pre6",
|
||||
"@welshman/app": "^0.9.0",
|
||||
"@welshman/content": "^0.9.0",
|
||||
"@welshman/domain": "^0.9.0",
|
||||
"@welshman/editor": "^0.9.0",
|
||||
"@welshman/feeds": "^0.9.0",
|
||||
"@welshman/lib": "^0.9.0",
|
||||
"@welshman/net": "^0.9.0",
|
||||
"@welshman/signer": "^0.9.0",
|
||||
"@welshman/store": "^0.9.0",
|
||||
"@welshman/util": "^0.9.0",
|
||||
"cheerio": "^1.2.0",
|
||||
"compressorjs-next": "^1.1.2",
|
||||
"dompurify": "^3.4.13",
|
||||
|
|
|
|||
BIN
pnpm-lock.yaml
BIN
pnpm-lock.yaml
Binary file not shown.
|
|
@ -3,7 +3,7 @@ import type {Unsubscriber} from "svelte/store"
|
|||
import {deleteDB} from "idb"
|
||||
import {SecureStorage} from "@aparajita/capacitor-secure-storage"
|
||||
import {Preferences} from "@capacitor/preferences"
|
||||
import {noop, on, throttle, batch, call} from "@welshman/lib"
|
||||
import {noop, on, throttle, batch, call, makeQueue} from "@welshman/lib"
|
||||
import type {Maybe} from "@welshman/lib"
|
||||
import {
|
||||
ALERT_ANDROID,
|
||||
|
|
@ -45,7 +45,7 @@ import {IDB} from "@lib/indexeddb"
|
|||
import {appPolicies} from "@app/core"
|
||||
|
||||
export const kv = call(() => {
|
||||
let p = Promise.resolve()
|
||||
const enqueue = makeQueue()
|
||||
|
||||
const get = async <T>(key: string): Promise<T | undefined> => {
|
||||
const result = await Preferences.get({key})
|
||||
|
|
@ -58,22 +58,18 @@ export const kv = call(() => {
|
|||
}
|
||||
|
||||
const set = async <T>(key: string, value: T): Promise<void> => {
|
||||
p = p.then(() => Preferences.set({key, value: JSON.stringify(value)}))
|
||||
|
||||
await p
|
||||
await enqueue(() => Preferences.set({key, value: JSON.stringify(value)}))
|
||||
}
|
||||
|
||||
const clear = async () => {
|
||||
p = p.then(() => Preferences.clear())
|
||||
|
||||
await p
|
||||
await enqueue(() => Preferences.clear())
|
||||
}
|
||||
|
||||
return {get, set, clear}
|
||||
})
|
||||
|
||||
export const ss = call(() => {
|
||||
let p = Promise.resolve()
|
||||
const enqueue = makeQueue()
|
||||
|
||||
const get = async <T>(key: string): Promise<T | undefined> => {
|
||||
let value = await SecureStorage.getItem(key)
|
||||
|
|
@ -97,16 +93,17 @@ export const ss = call(() => {
|
|||
}
|
||||
}
|
||||
|
||||
// Android's SecureStorage rejects undefined
|
||||
const set = async <T>(key: string, value: T): Promise<void> => {
|
||||
p = p.then(() => SecureStorage.setItem(key, JSON.stringify(value)))
|
||||
|
||||
await p
|
||||
await enqueue(() =>
|
||||
value === undefined
|
||||
? SecureStorage.removeItem(key)
|
||||
: SecureStorage.setItem(key, JSON.stringify(value)),
|
||||
)
|
||||
}
|
||||
|
||||
const clear = async () => {
|
||||
p = p.then(() => SecureStorage.clear())
|
||||
|
||||
await p
|
||||
await enqueue(() => SecureStorage.clear())
|
||||
}
|
||||
|
||||
return {get, set, clear}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,11 @@
|
|||
<script lang="ts">
|
||||
import {page} from "$app/stores"
|
||||
import {goToHome} from "@app/routes"
|
||||
|
||||
// Depend on the page so the redirect runs again instead of only on mount.
|
||||
$effect(() => {
|
||||
void $page
|
||||
|
||||
goToHome()
|
||||
})
|
||||
</script>
|
||||
|
|
|
|||
Loading…
Reference in a new issue