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