[feat] compressed data for local

This commit is contained in:
kwaroran
2023-06-23 22:19:04 +09:00
parent 40b54ad88d
commit 281e0bec63
2 changed files with 28 additions and 1 deletions

View File

@@ -20,6 +20,23 @@ export const PngMetadata = {
const encoded = encode(chunks);
return encoded
},
writeStream:(pngBuffer: Uint8Array, metadata: Record<string, string>): 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

View File

@@ -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)