diff --git a/src/ts/characterCards.ts b/src/ts/characterCards.ts index 8ab8bf66..025169f2 100644 --- a/src/ts/characterCards.ts +++ b/src/ts/characterCards.ts @@ -1,9 +1,9 @@ import { get, writable, type Writable } from "svelte/store" import { alertCardExport, alertConfirm, alertError, alertInput, alertMd, alertNormal, alertSelect, alertStore, alertTOS, alertWait } from "./alert" -import { DataBase, defaultSdDataFunc, type character, setDatabase, type customscript, type loreSettings, type loreBook, type triggerscript } from "./storage/database" +import { DataBase, defaultSdDataFunc, type character, setDatabase, type customscript, type loreSettings, type loreBook, type triggerscript, importPreset } from "./storage/database" import { checkNullish, decryptBuffer, encryptBuffer, isKnownUri, selectFileByDom, selectMultipleFile, sleep } from "./util" import { language } from "src/lang" -import { v4 as uuidv4 } from 'uuid'; +import { v4 as uuidv4, v4 } from 'uuid'; import { characterFormatUpdate } from "./characters" import { AppendableBuffer, checkCharOrder, downloadFile, loadAsset, LocalWriter, openURL, readImage, saveAsset, VirtualWriter } from "./storage/globalApi" import { CurrentCharacter, selectedCharID } from "./stores" @@ -242,6 +242,35 @@ export async function characterURLImport() { alertError(language.errors.noData) return null } + + + const hash = location.hash + if(hash.startsWith('#import_module=')){ + const data = hash.replace('#import_module=', '') + const importData = JSON.parse(Buffer.from(decodeURIComponent(data), 'base64').toString('utf-8')) + importData.id = v4() + + const db = get(DataBase) + if(importData.lowLevelAccess){ + const conf = await alertConfirm(language.lowLevelAccessConfirm) + if(!conf){ + return false + } + } + db.modules.push(importData) + setDatabase(db) + return + } + if(hash.startsWith('#import_preset=')){ + const data = hash.replace('#import_preset=', '') + const importData =Buffer.from(decodeURIComponent(data), 'base64') + await importPreset({ + name: 'imported.risupreset', + data: importData + }) + return + + } } diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts index 044c6f71..0996c85d 100644 --- a/src/ts/storage/database.ts +++ b/src/ts/storage/database.ts @@ -1301,8 +1301,13 @@ export async function downloadPreset(id:number, type:'json'|'risupreset'|'return } -export async function importPreset(){ - const f = await selectSingleFile(["json", "preset", "risupreset"]) +export async function importPreset(f:{ + name:string + data:Uint8Array +}|null = null){ + if(!f){ + f = await selectSingleFile(["json", "preset", "risupreset"]) + } if(!f){ return }