diff --git a/src/App.svelte b/src/App.svelte index 105c7b69..f372579b 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -17,7 +17,8 @@ import MobileBody from './lib/Mobile/MobileBody.svelte'; import MobileFooter from './lib/Mobile/MobileFooter.svelte'; import CustomGUISettingMenu from './lib/Setting/Pages/CustomGUISettingMenu.svelte'; - import { checkCharOrder } from './ts/globalApi.svelte'; + import { checkCharOrder } from './ts/globalApi.svelte'; + import Googli from './lib/UI/Googli.svelte'; let didFirstSetup: boolean = $derived(DBState.db?.didFirstSetup) @@ -35,7 +36,7 @@ await importCharacterProcess({ name: file.name, data: file - }) + }) checkCharOrder() } }}> @@ -51,6 +52,8 @@ {LoadingStatusState.text} + + {:else if $CustomGUISettingMenuStore} diff --git a/src/lib/Setting/Pages/UserSettings.svelte b/src/lib/Setting/Pages/UserSettings.svelte index bd1a48a2..95a4a6c5 100644 --- a/src/lib/Setting/Pages/UserSettings.svelte +++ b/src/lib/Setting/Pages/UserSettings.svelte @@ -1,7 +1,7 @@ + +{#if !import.meta.env.VITE_AD_CLIENT} +
+ +
+{/if} \ No newline at end of file diff --git a/src/preload.ts b/src/preload.ts index 456316f2..c3ae625f 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -29,12 +29,5 @@ export function preLoadCheck(){ }) } - - // Redirect to the main page if the user has not visited the main page - if(localStorage.getItem('mainpage') !== 'visited') { - localStorage.setItem('mainpage', 'visited'); - location.replace('https://risuai.net'); - return false; - } return true; } \ No newline at end of file diff --git a/src/ts/drive/accounter.ts b/src/ts/drive/accounter.ts index d333dcc9..0fbdf077 100644 --- a/src/ts/drive/accounter.ts +++ b/src/ts/drive/accounter.ts @@ -1,6 +1,8 @@ import { hubURL } from "../characterCards" -import { getDatabase } from "../storage/database.svelte" -import { alertError, alertSelect } from "../alert" +import { getDatabase, setDatabase } from "../storage/database.svelte" +import { alertError, alertMd, alertNormal, alertSelect, alertWait } from "../alert" +import { AppendableBuffer } from "../globalApi.svelte" +import { decodeRisuSave } from "../storage/risuSave" export async function risuLogin() { const win = window.open(hubURL + '/hub/login') @@ -63,19 +65,72 @@ export async function loadRisuAccountBackup() { } }) if(s.status !== 200){ - alertError(await s.text()) + alertMd(await s.text()) return } - const backups = await s.json() + const backups = await s.json() as string[] if(!backups.length){ alertError("No backups found") return } - const backupIdStr = await alertSelect(backups) + const backupIdStr = await alertSelect([...backups.map((v) => { + const int = parseInt(v) + + if(!isNaN(int)){ + const intl = new Intl.DateTimeFormat([ + navigator.language, + 'en-US' + ], { + dateStyle: 'short', + timeStyle: 'short' + }).format(new Date(int)) + return intl + } + + return v + }), "Cancel"]) const backupIdNum = parseInt(backupIdStr) + if(backupIdNum === backups.length){ + return + } if(isNaN(backupIdNum)){ alertError("Invalid backup id") return } const backupId = backups[backupIdNum] + + const backup = await fetch(hubURL + '/hub/backup/get', { + method: "GET", + headers: { + "x-risu-auth": db.account.token, + 'x-risu-key': backupId + } + }) + + if(backup.status !== 200){ + alertError(await backup.text()) + return + } + else{ + const buf = new AppendableBuffer() + const reader = backup.body.getReader() + + while(true){ + const {done, value} = await reader.read() + if(done){ + break + } + alertWait("Downloading backup: " + buf.buffer.byteLength) + buf.append(value) + } + + alertWait("Loading backup") + + setDatabase( + await decodeRisuSave(buf.buffer) + ) + + await alertNormal('Loaded backup') + } + } \ No newline at end of file