mirror of
https://github.com/CharaChorder/DeviceManager.git
synced 2026-01-03 08:32:52 +00:00
feat: re-introduce background sync
This commit is contained in:
@@ -23,7 +23,6 @@
|
|||||||
import Footer from "./Footer.svelte"
|
import Footer from "./Footer.svelte"
|
||||||
import {runLayoutDetection} from "$lib/os-layout.js"
|
import {runLayoutDetection} from "$lib/os-layout.js"
|
||||||
import PageTransition from "./PageTransition.svelte"
|
import PageTransition from "./PageTransition.svelte"
|
||||||
import SyncOverlay from "./SyncOverlay.svelte"
|
|
||||||
import {restoreFromFile} from "$lib/backup/backup"
|
import {restoreFromFile} from "$lib/backup/backup"
|
||||||
import {goto} from "$app/navigation"
|
import {goto} from "$app/navigation"
|
||||||
|
|
||||||
@@ -77,8 +76,6 @@
|
|||||||
<meta name="theme-color" content={data.themeColor} />
|
<meta name="theme-color" content={data.themeColor} />
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<SyncOverlay />
|
|
||||||
|
|
||||||
<Navigation />
|
<Navigation />
|
||||||
|
|
||||||
<!-- <PickChangesDialog /> -->
|
<!-- <PickChangesDialog /> -->
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
import {detectLocale, locales} from "../i18n/i18n-util"
|
import {detectLocale, locales} from "../i18n/i18n-util"
|
||||||
import {loadLocaleAsync} from "../i18n/i18n-util.async"
|
import {loadLocaleAsync} from "../i18n/i18n-util.async"
|
||||||
import {tick} from "svelte"
|
import {tick} from "svelte"
|
||||||
|
import SyncOverlay from "./SyncOverlay.svelte"
|
||||||
|
|
||||||
let locale = (browser && (localStorage.getItem("locale") as Locales)) || detectLocale()
|
let locale = (browser && (localStorage.getItem("locale") as Locales)) || detectLocale()
|
||||||
$: if (browser)
|
$: if (browser)
|
||||||
@@ -45,6 +46,9 @@
|
|||||||
>
|
>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<SyncOverlay />
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<input use:action={{title: $LL.profile.theme.COLOR_SCHEME()}} type="color" bind:value={$theme.color} />
|
<input use:action={{title: $LL.profile.theme.COLOR_SCHEME()}} type="color" bind:value={$theme.color} />
|
||||||
|
|||||||
@@ -1,49 +1,30 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import {syncProgress, syncStatus} from "$lib/serial/connection"
|
import {syncProgress, syncStatus} from "$lib/serial/connection"
|
||||||
import LL from "../i18n/i18n-svelte"
|
import LL from "../i18n/i18n-svelte"
|
||||||
|
import {fly} from "svelte/transition"
|
||||||
$: if (dialog) toggleDialog($syncStatus)
|
|
||||||
|
|
||||||
async function toggleDialog(status: "uploading" | "downloading" | string) {
|
|
||||||
// debounce
|
|
||||||
await new Promise(resolve => setTimeout(resolve, 150))
|
|
||||||
if ($syncStatus !== status) return
|
|
||||||
|
|
||||||
if (!dialog.open && ($syncStatus === "uploading" || $syncStatus === "downloading")) {
|
|
||||||
message = $syncStatus
|
|
||||||
dialog.showModal()
|
|
||||||
dialog.animate([{opacity: 0}, {opacity: 1}], {duration: 250, easing: "ease"})
|
|
||||||
} else if (dialog.open) {
|
|
||||||
const animation = dialog.animate([{opacity: 1}, {opacity: 0}], {duration: 250, easing: "ease"})
|
|
||||||
animation.addEventListener("finish", () => {
|
|
||||||
dialog.close()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let message: "downloading" | "uploading"
|
|
||||||
let dialog: HTMLDialogElement
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<dialog bind:this={dialog}>
|
{#if $syncStatus !== "done"}
|
||||||
{#if message === "downloading"}
|
<div transition:fly={{y: 40}}>
|
||||||
<h2>{$LL.sync.TITLE_READ()}</h2>
|
<progress max={$syncProgress?.max ?? 1} value={$syncProgress?.current ?? 1}></progress>
|
||||||
{:else}
|
{#if $syncStatus === "downloading"}
|
||||||
<h2>{$LL.sync.TITLE_WRITE()}</h2>
|
<div>{$LL.sync.TITLE_READ()}</div>
|
||||||
{/if}
|
{:else}
|
||||||
<progress max={$syncProgress?.max ?? 1} value={$syncProgress?.current ?? 1}></progress>
|
<div>{$LL.sync.TITLE_WRITE()}</div>
|
||||||
</dialog>
|
{/if}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
dialog::backdrop {
|
div {
|
||||||
background: rgba(0 0 0 / 70%);
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
progress {
|
progress {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 16px;
|
height: 8px;
|
||||||
border-radius: 8px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
progress::-webkit-progress-bar {
|
progress::-webkit-progress-bar {
|
||||||
@@ -53,15 +34,4 @@
|
|||||||
progress::-webkit-progress-value {
|
progress::-webkit-progress-value {
|
||||||
background: var(--md-sys-color-primary);
|
background: var(--md-sys-color-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
dialog {
|
|
||||||
max-width: 14cm;
|
|
||||||
padding: 2cm;
|
|
||||||
|
|
||||||
color: white;
|
|
||||||
|
|
||||||
background: none;
|
|
||||||
border: none;
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user