diff --git a/src/lib/UI/ModelList.svelte b/src/lib/UI/ModelList.svelte
index 9feecb1a..cf290ca7 100644
--- a/src/lib/UI/ModelList.svelte
+++ b/src/lib/UI/ModelList.svelte
@@ -63,10 +63,11 @@
-
-
+
+
+
@@ -80,6 +81,7 @@
{#if isTauri ||isNodeServer}
+
{/if}
{#await getHordeModels()}
diff --git a/src/ts/drive/drive.ts b/src/ts/drive/drive.ts
index e1278d7a..88ce9f33 100644
--- a/src/ts/drive/drive.ts
+++ b/src/ts/drive/drive.ts
@@ -2,7 +2,6 @@ import { get } from "svelte/store";
import { alertError, alertInput, alertNormal, alertSelect, alertStore } from "../alert";
import { DataBase, setDatabase, type Database } from "../storage/database";
import { forageStorage, getUnpargeables, isNodeServer, isTauri, openURL } from "../storage/globalApi";
-import pako from "pako";
import { BaseDirectory, exists, readBinaryFile, readDir, writeBinaryFile } from "@tauri-apps/api/fs";
import { language } from "../../lang";
import { relaunch } from '@tauri-apps/api/process';
@@ -10,6 +9,7 @@ import { open } from '@tauri-apps/api/shell';
import { cloneDeep, isEqual, last } from "lodash";
import { sleep } from "../util";
import { hubURL } from "../characterCards";
+import { decodeRisuSave, encodeRisuSave } from "../storage/risuSave";
export async function checkDriver(type:'save'|'load'|'loadtauri'|'savetauri'|'reftoken'){
const CLIENT_ID = '580075990041-l26k2d3c0nemmqiu3d3aag01npfrkn76.apps.googleusercontent.com';
@@ -245,10 +245,7 @@ async function backupDrive(ACCESS_TOKEN:string) {
}
}
- const dbjson = JSON.stringify(get(DataBase))
- const dbData = pako.deflate(
- Buffer.from(dbjson, 'utf-8')
- )
+ const dbData = encodeRisuSave(get(DataBase))
alertStore.set({
type: "wait",
@@ -355,7 +352,7 @@ async function loadDrive(ACCESS_TOKEN:string, mode: 'backup'|'sync'):Promise {
+ changed = true
+ })
while(true){
- const dbjson = JSON.stringify(get(DataBase))
- if(dbjson !== lastSave){
- lastSave = dbjson
- const dbData = pako.deflate(
- Buffer.from(dbjson, 'utf-8')
- )
+ if(changed){
+ 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})
@@ -275,13 +275,13 @@ export async function loadData() {
}
if(!await exists('database/database.bin', {dir: BaseDirectory.AppData})){
await writeBinaryFile('database/database.bin',
- pako.deflate(Buffer.from(JSON.stringify({}), 'utf-8'))
+ encodeRisuSave({})
,{dir: BaseDirectory.AppData})
}
try {
setDatabase(
- JSON.parse(Buffer.from(pako.inflate(Buffer.from(await readBinaryFile('database/database.bin',{dir: BaseDirectory.AppData})))).toString('utf-8'))
- )
+ decodeRisuSave(await readBinaryFile('database/database.bin',{dir: BaseDirectory.AppData}))
+ )
} catch (error) {
const backups = await getDbBackups()
let backupLoaded = false
@@ -289,7 +289,7 @@ export async function loadData() {
try {
const backupData = await readBinaryFile(`database/dbbackup-${backup}.bin`,{dir: BaseDirectory.AppData})
setDatabase(
- JSON.parse(Buffer.from(pako.inflate(Buffer.from(backupData))).toString('utf-8'))
+ decodeRisuSave(backupData)
)
backupLoaded = true
} catch (error) {}
@@ -305,12 +305,11 @@ export async function loadData() {
else{
let gotStorage:Uint8Array = await forageStorage.getItem('database/database.bin')
if(checkNullish(gotStorage)){
- gotStorage = pako.deflate(Buffer.from(JSON.stringify({}), 'utf-8'))
- await forageStorage.setItem('database/database.bin', gotStorage)
+ await forageStorage.setItem('database/database.bin', encodeRisuSave({}))
}
try {
setDatabase(
- JSON.parse(Buffer.from(pako.inflate(Buffer.from(gotStorage))).toString('utf-8'))
+ decodeRisuSave(gotStorage)
)
} catch (error) {
const backups = await getDbBackups()
@@ -319,7 +318,7 @@ export async function loadData() {
try {
const backupData:Uint8Array = await forageStorage.getItem(`database/dbbackup-${backup}.bin`)
setDatabase(
- JSON.parse(Buffer.from(pako.inflate(Buffer.from(backupData))).toString('utf-8'))
+ decodeRisuSave(backupData)
)
backupLoaded = true
} catch (error) {}
diff --git a/src/ts/storage/risuSave.ts b/src/ts/storage/risuSave.ts
new file mode 100644
index 00000000..4c56d8d8
--- /dev/null
+++ b/src/ts/storage/risuSave.ts
@@ -0,0 +1,31 @@
+import { decode, encode } from "@msgpack/msgpack";
+import { isEqual } from "lodash";
+import pako from "pako";
+
+
+export function encodeRisuSave(data:any){
+ const risuSaveHeader = new Uint8Array(Buffer.from("\u0000\u0000RISU",'utf-8'))
+ const encoded = encode(data)
+ const mergedArray = new Uint8Array(risuSaveHeader.length + encoded.length);
+ mergedArray.set(risuSaveHeader);
+ mergedArray.set(encoded, risuSaveHeader.length);
+ return mergedArray
+}
+
+export function decodeRisuSave(data:Uint8Array){
+ const risuSaveHeader = new Uint8Array(Buffer.from("\u0000\u0000RISU",'utf-8'))
+ const sub = data.subarray(0, risuSaveHeader.length)
+ if(isEqual(sub, risuSaveHeader)){
+ try {
+ const realData = data.subarray(risuSaveHeader.length)
+ const dec = decode(realData)
+ return dec
+ } catch (error) {
+ console.error(error)
+ throw error
+ }
+ }
+ else{
+ return JSON.parse(Buffer.from(pako.inflate(Buffer.from(data))).toString('utf-8'))
+ }
+}
\ No newline at end of file