diff --git a/src/lib/ChatScreens/Suggestion.svelte b/src/lib/ChatScreens/Suggestion.svelte index 2cd0c447..d537fd44 100644 --- a/src/lib/ChatScreens/Suggestion.svelte +++ b/src/lib/ChatScreens/Suggestion.svelte @@ -83,7 +83,7 @@ bias: {}, currentChar : currentChar as character }, 'submodel', abortController.signal).then(rq2=>{ - if(rq2.type !== 'fail' && rq2.type !== 'streaming' && progress){ + if(rq2.type !== 'fail' && rq2.type !== 'streaming' && rq2.type !== 'multiline' && progress){ var suggestMessagesNew = rq2.result.split('\n').filter(msg => msg.startsWith('-')).map(msg => msg.replace('-','').trim()) const db:Database = get(DataBase); db.characters[$selectedCharID].chats[currentChar.chatPage].suggestMessages = suggestMessagesNew diff --git a/src/lib/Setting/Pages/UserSettings.svelte b/src/lib/Setting/Pages/UserSettings.svelte index 977c44f4..7e694354 100644 --- a/src/lib/Setting/Pages/UserSettings.svelte +++ b/src/lib/Setting/Pages/UserSettings.svelte @@ -7,6 +7,7 @@ import Check from "src/lib/Others/Check.svelte"; import { alertSelect } from "src/ts/alert"; import { isTauri } from "src/ts/storage/globalApi"; + import { unMigrationAccount } from "src/ts/storage/accountStorage"; let openIframe = false let openIframeURL = '' let popup:Window = null @@ -54,6 +55,10 @@

Risu Account{#if $DataBase.account} {/if}

diff --git a/src/ts/storage/accountStorage.ts b/src/ts/storage/accountStorage.ts index c02055ee..5eee7fa1 100644 --- a/src/ts/storage/accountStorage.ts +++ b/src/ts/storage/accountStorage.ts @@ -2,8 +2,9 @@ import { get } from "svelte/store" import { DataBase } from "./database" import { hubURL } from "../characterCards" import localforage from "localforage" -import { alertLogin } from "../alert" -import { getUnpargeables } from "./globalApi" +import { alertLogin, alertStore } from "../alert" +import { forageStorage, getUnpargeables, replaceDbResources } from "./globalApi" +import { encodeRisuSave } from "./risuSave" export class AccountStorage{ auth:string @@ -89,4 +90,34 @@ export class AccountStorage{ listItem = this.keys +} + +export async function unMigrationAccount() { + const keys = await forageStorage.keys() + let db = get(DataBase) + db.account = null + let i = 0; + const MigrationStorage = localforage.createInstance({name: "risuai"}) + + for(const key of keys){ + alertStore.set({ + type: "wait", + msg: `Migrating your data...(${i}/${keys.length})` + }) + await MigrationStorage.setItem(key,await forageStorage.getItem(key)) + i += 1 + } + + await MigrationStorage.setItem('database/database.bin', encodeRisuSave(db)) + + this.realStorage = MigrationStorage + alertStore.set({ + type: "none", + msg: "" + }) + + localStorage.removeItem('dosync') + localStorage.removeItem('accountst') + localStorage.removeItem('fallbackRisuToken') + location.reload() } \ No newline at end of file diff --git a/src/ts/storage/globalApi.ts b/src/ts/storage/globalApi.ts index ebd28a96..0efc0197 100644 --- a/src/ts/storage/globalApi.ts +++ b/src/ts/storage/globalApi.ts @@ -11,7 +11,7 @@ import { checkOldDomain, checkUpdate } from "../update"; import { selectedCharID } from "../stores"; import { Body, ResponseType, fetch as TauriFetch } from "@tauri-apps/api/http"; import { loadPlugins } from "../plugins/plugins"; -import { alertError } from "../alert"; +import { alertConfirm, alertError } from "../alert"; import { checkDriverInit, syncDrive } from "../drive/drive"; import { hasher } from "../parser"; import { characterHubImport, hubURL } from "../characterCards"; @@ -211,23 +211,36 @@ export async function saveDb(){ DataBase.subscribe(() => { changed = true }) + let savetrys = 0 while(true){ - if(changed){ - changed = false - const dbData = encodeRisuSave(get(DataBase)) - if(isTauri){ - await writeBinaryFile('database/database.bin', dbData, {dir: BaseDirectory.AppData}) - await writeBinaryFile(`database/dbbackup-${(Date.now()/100).toFixed()}.bin`, dbData, {dir: BaseDirectory.AppData}) + try { + if(changed){ + changed = false + const dbData = encodeRisuSave(get(DataBase)) + if(isTauri){ + await writeBinaryFile('database/database.bin', dbData, {dir: BaseDirectory.AppData}) + await writeBinaryFile(`database/dbbackup-${(Date.now()/100).toFixed()}.bin`, dbData, {dir: BaseDirectory.AppData}) + } + else{ + await forageStorage.setItem('database/database.bin', dbData) + if(!forageStorage.isAccount){ + await forageStorage.setItem(`database/dbbackup-${(Date.now()/100).toFixed()}.bin`, dbData) + } + } + if(!forageStorage.isAccount){ + await getDbBackups() + } + savetrys = 0 + } + await sleep(500) + } catch (error) { + if(savetrys > 4){ + await alertConfirm(`DBSaveError: ${error.message ?? error}. report to the developer.`) } else{ - await forageStorage.setItem('database/database.bin', dbData) - if(!forageStorage.isAccount){ - await forageStorage.setItem(`database/dbbackup-${(Date.now()/100).toFixed()}.bin`, dbData) - } + } - await getDbBackups() } - await sleep(500) } }