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",
|
"@types/throttle-debounce": "^5.0.2",
|
||||||
"@vite-pwa/assets-generator": "^1.0.2",
|
"@vite-pwa/assets-generator": "^1.0.2",
|
||||||
"@vite-pwa/sveltekit": "^1.1.0",
|
"@vite-pwa/sveltekit": "^1.1.0",
|
||||||
"@welshman/app": "^0.9.0-pre6",
|
"@welshman/app": "^0.9.0",
|
||||||
"@welshman/content": "^0.9.0-pre6",
|
"@welshman/content": "^0.9.0",
|
||||||
"@welshman/domain": "^0.9.0-pre6",
|
"@welshman/domain": "^0.9.0",
|
||||||
"@welshman/editor": "^0.9.0-pre6",
|
"@welshman/editor": "^0.9.0",
|
||||||
"@welshman/feeds": "^0.9.0-pre6",
|
"@welshman/feeds": "^0.9.0",
|
||||||
"@welshman/lib": "^0.9.0-pre6",
|
"@welshman/lib": "^0.9.0",
|
||||||
"@welshman/net": "^0.9.0-pre6",
|
"@welshman/net": "^0.9.0",
|
||||||
"@welshman/signer": "^0.9.0-pre6",
|
"@welshman/signer": "^0.9.0",
|
||||||
"@welshman/store": "^0.9.0-pre6",
|
"@welshman/store": "^0.9.0",
|
||||||
"@welshman/util": "^0.9.0-pre6",
|
"@welshman/util": "^0.9.0",
|
||||||
"cheerio": "^1.2.0",
|
"cheerio": "^1.2.0",
|
||||||
"compressorjs-next": "^1.1.2",
|
"compressorjs-next": "^1.1.2",
|
||||||
"dompurify": "^3.4.13",
|
"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 {deleteDB} from "idb"
|
||||||
import {SecureStorage} from "@aparajita/capacitor-secure-storage"
|
import {SecureStorage} from "@aparajita/capacitor-secure-storage"
|
||||||
import {Preferences} from "@capacitor/preferences"
|
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 type {Maybe} from "@welshman/lib"
|
||||||
import {
|
import {
|
||||||
ALERT_ANDROID,
|
ALERT_ANDROID,
|
||||||
|
|
@ -45,7 +45,7 @@ import {IDB} from "@lib/indexeddb"
|
||||||
import {appPolicies} from "@app/core"
|
import {appPolicies} from "@app/core"
|
||||||
|
|
||||||
export const kv = call(() => {
|
export const kv = call(() => {
|
||||||
let p = Promise.resolve()
|
const enqueue = makeQueue()
|
||||||
|
|
||||||
const get = async <T>(key: string): Promise<T | undefined> => {
|
const get = async <T>(key: string): Promise<T | undefined> => {
|
||||||
const result = await Preferences.get({key})
|
const result = await Preferences.get({key})
|
||||||
|
|
@ -58,22 +58,18 @@ export const kv = call(() => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const set = async <T>(key: string, value: T): Promise<void> => {
|
const set = async <T>(key: string, value: T): Promise<void> => {
|
||||||
p = p.then(() => Preferences.set({key, value: JSON.stringify(value)}))
|
await enqueue(() => Preferences.set({key, value: JSON.stringify(value)}))
|
||||||
|
|
||||||
await p
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const clear = async () => {
|
const clear = async () => {
|
||||||
p = p.then(() => Preferences.clear())
|
await enqueue(() => Preferences.clear())
|
||||||
|
|
||||||
await p
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {get, set, clear}
|
return {get, set, clear}
|
||||||
})
|
})
|
||||||
|
|
||||||
export const ss = call(() => {
|
export const ss = call(() => {
|
||||||
let p = Promise.resolve()
|
const enqueue = makeQueue()
|
||||||
|
|
||||||
const get = async <T>(key: string): Promise<T | undefined> => {
|
const get = async <T>(key: string): Promise<T | undefined> => {
|
||||||
let value = await SecureStorage.getItem(key)
|
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> => {
|
const set = async <T>(key: string, value: T): Promise<void> => {
|
||||||
p = p.then(() => SecureStorage.setItem(key, JSON.stringify(value)))
|
await enqueue(() =>
|
||||||
|
value === undefined
|
||||||
await p
|
? SecureStorage.removeItem(key)
|
||||||
|
: SecureStorage.setItem(key, JSON.stringify(value)),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const clear = async () => {
|
const clear = async () => {
|
||||||
p = p.then(() => SecureStorage.clear())
|
await enqueue(() => SecureStorage.clear())
|
||||||
|
|
||||||
await p
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {get, set, clear}
|
return {get, set, clear}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,11 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import {page} from "$app/stores"
|
||||||
import {goToHome} from "@app/routes"
|
import {goToHome} from "@app/routes"
|
||||||
|
|
||||||
|
// Depend on the page so the redirect runs again instead of only on mount.
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
|
void $page
|
||||||
|
|
||||||
goToHome()
|
goToHome()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue