diff --git a/src/ts/exif.ts b/src/ts/exif.ts index 6d01035b..629a6ce6 100644 --- a/src/ts/exif.ts +++ b/src/ts/exif.ts @@ -20,6 +20,23 @@ export const PngMetadata = { const encoded = encode(chunks); return encoded }, + writeStream:(pngBuffer: Uint8Array, metadata: Record): Buffer => { + let chunks:{ + name:string + data:Uint8Array + }[] = extract(Buffer.from(pngBuffer)); + + chunks = chunks.filter((v) => { + return v.name.toLocaleLowerCase() !== 'text' + }) + + for (const key in metadata) { + const value = metadata[key]; + chunks.splice(-1, 0, textKey.encode(key, value)) + } + const encoded = encode(chunks); + return encoded + }, filter: (pngBuffer: Uint8Array) => { let chunks:{ name:string diff --git a/src/ts/storage/risuSave.ts b/src/ts/storage/risuSave.ts index 3ecb5dfb..60cab3dc 100644 --- a/src/ts/storage/risuSave.ts +++ b/src/ts/storage/risuSave.ts @@ -1,11 +1,16 @@ import { decode, encode } from "@msgpack/msgpack"; import { isEqual } from "lodash"; import pako from "pako"; +import { isTauri } from "./globalApi"; export function encodeRisuSave(data:any){ const risuSaveHeader = new Uint8Array(Buffer.from("\u0000\u0000RISU",'utf-8')) const encoded = encode(data) + + if(isTauri){ + return pako.deflate(encoded) + } const mergedArray = new Uint8Array(risuSaveHeader.length + encoded.length); mergedArray.set(risuSaveHeader); mergedArray.set(encoded, risuSaveHeader.length); @@ -22,7 +27,12 @@ export function decodeRisuSave(data:Uint8Array){ } else{ try { - return JSON.parse(Buffer.from(pako.inflate(Buffer.from(data))).toString('utf-8')) + const buf = Buffer.from(pako.inflate(Buffer.from(data))) + try { + return JSON.parse(buf.toString('utf-8')) + } catch (error) { + return decode(buf) + } } catch (error) { const realData = data.subarray(risuSaveHeader.length) const dec = decode(realData)