From ddfaafb7cfd94ad7f8d17ef6b2a7e273e635c785 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Sun, 2 Jul 2023 20:09:43 +0900 Subject: [PATCH] [feat] added account sync option --- src/lang/en.ts | 8 ++++++-- src/lib/Setting/Pages/UserSettings.svelte | 17 ++++++++++++++--- src/ts/storage/accountStorage.ts | 10 ++++++++-- src/ts/storage/autoStorage.ts | 21 +++++++++++++++++++-- src/ts/storage/globalApi.ts | 6 +++--- 5 files changed, 50 insertions(+), 12 deletions(-) diff --git a/src/lang/en.ts b/src/lang/en.ts index a960c1c0..f0ff9762 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -319,6 +319,10 @@ export const languageEnglish = { notLoggedIn: "Not Logged in to Risu Account", googleDriveInfo: "Connect to google drive to sync your data.", googleDriveConnection: "Google Drive Connection", - googleDriveConnected: "Google Drive Connected" - + googleDriveConnected: "Google Drive Connected", + SaveDataInAccount: "Save Data in Account", + dataSavingInAccount: "Saving Data in Account", + logout: "Logout", + loadDataFromAccount: "Load Data from Account", + saveCurrentDataToAccount: "Save Current Data to Account" } \ No newline at end of file diff --git a/src/lib/Setting/Pages/UserSettings.svelte b/src/lib/Setting/Pages/UserSettings.svelte index b8ba955f..bc99c919 100644 --- a/src/lib/Setting/Pages/UserSettings.svelte +++ b/src/lib/Setting/Pages/UserSettings.svelte @@ -5,6 +5,8 @@ import { loadRisuAccountData, saveRisuAccountData } from "src/ts/drive/accounter"; import { DataBase } from "src/ts/storage/database"; import Check from "src/lib/Others/Check.svelte"; + import { alertSelect } from "src/ts/alert"; + import { isTauri } from "src/ts/storage/globalApi"; let openIframe = false let openIframeURL = '' let popup:Window = null @@ -53,14 +55,23 @@

Risu Account{#if $DataBase.account} + }}>{language.logout} {/if}

{#if $DataBase.account} ID: {$DataBase.account.id} - {#if $DataBase.useExperimental && localStorage.getItem('ac_flag!') === "able"} + {#if $DataBase.useExperimental && (!isTauri)}
- + {#if $DataBase.account.useSync} + {language.dataSavingInAccount} + {:else} + { + if(v){ + localStorage.setItem('dosync', 'sync') + location.reload() + } + }}/> + {/if}
{/if} diff --git a/src/ts/storage/accountStorage.ts b/src/ts/storage/accountStorage.ts index 73f09364..b291a3ed 100644 --- a/src/ts/storage/accountStorage.ts +++ b/src/ts/storage/accountStorage.ts @@ -3,6 +3,7 @@ import { DataBase } from "./database" import { hubURL } from "../characterCards" import localforage from "localforage" import { alertLogin } from "../alert" +import { getUnpargeables } from "./globalApi" export class AccountStorage{ auth:string @@ -21,6 +22,9 @@ export class AccountStorage{ 'x-risu-auth': this.auth } }) + if(da.status === 304){ + return key + } if(da.status === 403){ localStorage.setItem("fallbackRisuToken",await alertLogin()) this.checkAuth() @@ -66,10 +70,11 @@ export class AccountStorage{ return Buffer.from(ab) } async keys():Promise{ - throw "Error: You cannot list in account. report this to dev if you found this." + let db = get(DataBase) + return getUnpargeables(db, 'pure') } async removeItem(key:string){ - throw "Error: You remove data in account. report this to dev if you found this." + throw "Error: You cannot remove data in account. report this to dev if you found this." } private checkAuth(){ @@ -78,6 +83,7 @@ export class AccountStorage{ if(!this.auth){ db.account = JSON.parse(localStorage.getItem("fallbackRisuToken")) this.auth = db?.account?.token + db.account.useSync = true } } diff --git a/src/ts/storage/autoStorage.ts b/src/ts/storage/autoStorage.ts index f27e4e23..6a18d80a 100644 --- a/src/ts/storage/autoStorage.ts +++ b/src/ts/storage/autoStorage.ts @@ -2,11 +2,12 @@ import localforage from "localforage" import { getUnpargeables, isNodeServer, replaceDbResources } from "./globalApi" import { NodeStorage } from "./nodeStorage" import { OpfsStorage } from "./opfsStorage" -import { alertConfirm, alertStore } from "../alert" +import { alertConfirm, alertSelect, alertStore } from "../alert" import { get } from "svelte/store" import { DataBase } from "./database" import { AccountStorage } from "./accountStorage" import { encodeRisuSave } from "./risuSave"; +import { language } from "src/lang" export class AutoStorage{ isAccount:boolean = false @@ -41,12 +42,28 @@ export class AutoStorage{ if(this.isAccount){ return true } - if(db.account?.useSync && (localStorage.getItem('accountst') !== 'able')){ + if((localStorage.getItem('dosync') === 'sync' || db.account?.useSync) && (localStorage.getItem('accountst') !== 'able')){ getUnpargeables(db) console.log("migrating") const keys = await this.realStorage.keys() let i = 0; const accountStorage = new AccountStorage() + + const a = accountStorage.getItem('database/database.bin') + if(a){ + const sel = await alertSelect([language.loadDataFromAccount, language.saveCurrentDataToAccount]) + if(sel === "0"){ + this.realStorage = accountStorage + alertStore.set({ + type: "none", + msg: "" + }) + localStorage.setItem('accountst', 'able') + localStorage.setItem('fallbackRisuToken',JSON.stringify(db.account)) + this.isAccount = true + return true + } + } let replaced:{[key:string]:string} = {} for(const key of keys){ diff --git a/src/ts/storage/globalApi.ts b/src/ts/storage/globalApi.ts index 21491f19..ebd28a96 100644 --- a/src/ts/storage/globalApi.ts +++ b/src/ts/storage/globalApi.ts @@ -677,7 +677,7 @@ function getBasename(data:string){ return lasts } -export function getUnpargeables(db:Database) { +export function getUnpargeables(db:Database, uptype:'basename'|'pure' = 'basename') { let unpargeable:string[] = [] function addUnparge(data:string){ @@ -687,9 +687,9 @@ export function getUnpargeables(db:Database) { if(data === ''){ return } - const bn = getBasename(data) + const bn = uptype === 'basename' ? getBasename(data) : data if(!unpargeable.includes(bn)){ - unpargeable.push(getBasename(data)) + unpargeable.push(bn) } }