Add LoadingStatusState and improve tokenizer functionality

This commit is contained in:
Kwaroran
2024-12-26 06:00:07 +09:00
parent 575eb0505e
commit fe47f58c61
7 changed files with 836867 additions and 38 deletions

View File

@@ -16,7 +16,7 @@ import {open} from '@tauri-apps/plugin-shell'
import { setDatabase, type Database, defaultSdDataFunc, getDatabase, type character } from "./storage/database.svelte";
import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow";
import { checkRisuUpdate } from "./update";
import { MobileGUI, botMakerMode, selectedCharID, loadedStore, DBState } from "./stores.svelte";
import { MobileGUI, botMakerMode, selectedCharID, loadedStore, DBState, LoadingStatusState } from "./stores.svelte";
import { loadPlugins } from "./plugins/plugins";
import { alertConfirm, alertError, alertNormal, alertNormalWait, alertSelect, alertTOS, alertWait } from "./alert";
import { checkDriverInit, syncDrive } from "./drive/drive";
@@ -42,6 +42,7 @@ import { updateLorebooks } from "./characters";
import { initMobileGesture } from "./hotkey";
import { fetch as TauriHTTPFetch } from '@tauri-apps/plugin-http';
import { moduleUpdate } from "./process/modules";
import type { AccountStorage } from "./storage/accountStorage";
//@ts-ignore
export const isTauri = !!window.__TAURI_INTERNALS__
@@ -498,6 +499,7 @@ export async function loadData() {
if(!loaded){
try {
if(isTauri){
LoadingStatusState.text = "Checking Files..."
appWindow.maximize()
if(!await exists('', {baseDir: BaseDirectory.AppData})){
await mkdir('', {baseDir: BaseDirectory.AppData})
@@ -512,13 +514,18 @@ export async function loadData() {
await writeFile('database/database.bin', encodeRisuSaveLegacy({}), {baseDir: BaseDirectory.AppData});
}
try {
const decoded = await decodeRisuSave(await readFile('database/database.bin',{baseDir: BaseDirectory.AppData}))
LoadingStatusState.text = "Reading Save File..."
const readed = await readFile('database/database.bin',{baseDir: BaseDirectory.AppData})
LoadingStatusState.text = "Decoding Save File..."
const decoded = await decodeRisuSave(readed)
setDatabase(decoded)
} catch (error) {
LoadingStatusState.text = "Reading Backup Files..."
const backups = await getDbBackups()
let backupLoaded = false
for(const backup of backups){
try {
LoadingStatusState.text = `Reading Backup File ${backup}...`
const backupData = await readFile(`database/dbbackup-${backup}.bin`,{baseDir: BaseDirectory.AppData})
setDatabase(
await decodeRisuSave(backupData)
@@ -532,39 +539,19 @@ export async function loadData() {
throw "Your save file is corrupted"
}
}
LoadingStatusState.text = "Checking Update..."
await checkRisuUpdate()
await changeFullscreen()
}
else{
let gotStorage:Uint8Array = await forageStorage.getItem('database/database.bin') as unknown as Uint8Array
if(checkNullish(gotStorage)){
gotStorage = encodeRisuSaveLegacy({})
await forageStorage.setItem('database/database.bin', gotStorage)
}
try {
const decoded = await decodeRisuSave(gotStorage)
console.log(decoded)
setDatabase(decoded)
} catch (error) {
console.error(error)
const backups = await getDbBackups()
let backupLoaded = false
for(const backup of backups){
try {
const backupData:Uint8Array = await forageStorage.getItem(`database/dbbackup-${backup}.bin`) as unknown as Uint8Array
setDatabase(
await decodeRisuSave(backupData)
)
backupLoaded = true
} catch (error) {}
}
if(!backupLoaded){
throw "Your save file is corrupted"
}
}
await forageStorage.Init()
if(await forageStorage.checkAccountSync()){
let gotStorage:Uint8Array = await forageStorage.getItem('database/database.bin') as unknown as Uint8Array
LoadingStatusState.text = "Checking Account Sync..."
let gotStorage:Uint8Array = await (forageStorage.realStorage as AccountStorage).getItem('database/database.bin', (v) => {
LoadingStatusState.text = `Loading Save File ${(v*100).toFixed(2)}%`
})
if(checkNullish(gotStorage)){
gotStorage = encodeRisuSaveLegacy({})
await forageStorage.setItem('database/database.bin', gotStorage)
@@ -578,6 +565,7 @@ export async function loadData() {
let backupLoaded = false
for(const backup of backups){
try {
LoadingStatusState.text = `Reading Backup File ${backup}...`
const backupData:Uint8Array = await forageStorage.getItem(`database/dbbackup-${backup}.bin`) as unknown as Uint8Array
setDatabase(
await decodeRisuSave(backupData)
@@ -590,10 +578,43 @@ export async function loadData() {
}
}
}
else{
LoadingStatusState.text = "Loading Save File..."
let gotStorage:Uint8Array = await forageStorage.getItem('database/database.bin') as unknown as Uint8Array
LoadingStatusState.text = "Decoding Save File..."
if(checkNullish(gotStorage)){
gotStorage = encodeRisuSaveLegacy({})
await forageStorage.setItem('database/database.bin', gotStorage)
}
try {
const decoded = await decodeRisuSave(gotStorage)
console.log(decoded)
setDatabase(decoded)
} catch (error) {
console.error(error)
const backups = await getDbBackups()
let backupLoaded = false
for(const backup of backups){
try {
LoadingStatusState.text = `Reading Backup File ${backup}...`
const backupData:Uint8Array = await forageStorage.getItem(`database/dbbackup-${backup}.bin`) as unknown as Uint8Array
setDatabase(
await decodeRisuSave(backupData)
)
backupLoaded = true
} catch (error) {}
}
if(!backupLoaded){
throw "Your save file is corrupted"
}
}
}
LoadingStatusState.text = "Checking Drive Sync..."
const isDriverMode = await checkDriverInit()
if(isDriverMode){
return
}
LoadingStatusState.text = "Checking Service Worker..."
if(navigator.serviceWorker && (!Capacitor.isNativePlatform())){
usingSw = true
await registerSw()
@@ -605,13 +626,16 @@ export async function loadData() {
characterURLImport()
}
}
LoadingStatusState.text = "Checking Unnecessary Files..."
try {
await pargeChunks()
} catch (error) {}
LoadingStatusState.text = "Loading Plugins..."
try {
await loadPlugins()
} catch (error) {}
if(getDatabase().account){
LoadingStatusState.text = "Checking Account Data..."
try {
await loadRisuAccountData()
} catch (error) {}
@@ -625,8 +649,11 @@ export async function loadData() {
} catch (error) {
}
LoadingStatusState.text = "Checking For Format Update..."
await checkNewFormat()
const db = getDatabase();
LoadingStatusState.text = "Updating States..."
updateColorScheme()
updateTextThemeAndCSS()
updateAnimationSpeed()