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)
}
}