import { BaseDirectory, readBinaryFile, readDir, writeBinaryFile } from "@tauri-apps/api/fs"; import { alertError, alertNormal, alertStore, alertWait } from "../alert"; import { LocalWriter, forageStorage, isTauri } from "../storage/globalApi"; import { decodeRisuSave, encodeRisuSave } from "../storage/risuSave"; import { get } from "svelte/store"; import { DataBase } from "../storage/database"; import { save } from "@tauri-apps/api/dialog"; import { relaunch } from "@tauri-apps/api/process"; import { sleep } from "../util"; import { hubURL } from "../characterCards"; function getBasename(data:string){ const baseNameRegex = /\\/g const splited = data.replace(baseNameRegex, '/').split('/') const lasts = splited[splited.length-1] return lasts } export async function SaveLocalBackup(){ alertWait("Saving local backup...") const writer = new LocalWriter() const r = await writer.init() if(!r){ alertError('Failed') return } //check backup data is corrupted const corrupted = await fetch(hubURL + '/backupcheck', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(get(DataBase)), }) if(corrupted.status === 400){ alertError('Failed, Backup data is corrupted') return } if(isTauri){ const assets = await readDir('assets', {dir: BaseDirectory.AppData}) let i = 0; for(let asset of assets){ i += 1; alertWait(`Saving local Backup... (${i} / ${assets.length})`) const key = asset.name if(!key || !key.endsWith('.png')){ continue } await writer.writeBackup(key, await readBinaryFile(asset.path)) } } else{ const keys = await forageStorage.keys() for(let i=0;i { if(!input.files || input.files.length === 0){ input.remove() return } const file = input.files[0] const reader = new FileReader() input.remove() reader.onload = async () => { const buffer = reader.result as ArrayBuffer const bufferLength = buffer.byteLength for(let i=0;i