using CacheStorage to store image #5013

This commit is contained in:
lloydzhou
2024-07-16 01:19:40 +08:00
parent b3a324b6f5
commit bab3e0bc9b
10 changed files with 115 additions and 141 deletions

View File

@@ -3,7 +3,7 @@ import { showToast } from "@/app/components/ui-lib";
import { getHeaders } from "@/app/client/api";
import { createPersistStore } from "@/app/utils/store";
import { nanoid } from "nanoid";
import { saveFileData, base64Image2Blob } from "@/app/utils/file";
import { uploadImage, base64Image2Blob } from "@/app/utils/chat";
export const useSdStore = createPersistStore<
{
@@ -12,7 +12,7 @@ export const useSdStore = createPersistStore<
},
{
getNextId: () => number;
sendTask: (data: any, db: any, okCall?: Function) => void;
sendTask: (data: any, okCall?: Function) => void;
updateDraw: (draw: any) => void;
}
>(
@@ -34,15 +34,14 @@ export const useSdStore = createPersistStore<
set({ currentId: id });
return id;
},
sendTask(data: any, db: any, okCall?: Function) {
sendTask(data: any, okCall?: Function) {
data = { ...data, id: nanoid(), status: "running" };
set({ draw: [data, ..._get().draw] });
// db.update(data);
this.getNextId();
this.stabilityRequestCall(data, db);
this.stabilityRequestCall(data);
okCall?.();
},
stabilityRequestCall(data: any, db: any) {
stabilityRequestCall(data: any) {
const formData = new FormData();
for (let paramsKey in data.params) {
formData.append(paramsKey, data.params[paramsKey]);
@@ -69,18 +68,26 @@ export const useSdStore = createPersistStore<
return;
}
if (resData.finish_reason === "SUCCESS") {
this.updateDraw({
...data,
status: "success",
// save blob to indexeddb instead of base64 image string
img_data: saveFileData(
db,
data.id,
base64Image2Blob(resData.image, "image/png"),
),
});
const self = this;
uploadImage(base64Image2Blob(resData.image, "image/png"))
.then((img_data) => {
console.debug("uploadImage success", img_data, self);
self.updateDraw({
...data,
status: "success",
img_data,
});
})
.catch((e) => {
console.error("uploadImage error", e);
self.updateDraw({
...data,
status: "error",
error: JSON.stringify(resData),
});
});
} else {
this.updateDraw({
self.updateDraw({
...data,
status: "error",
error: JSON.stringify(resData),
@@ -94,10 +101,12 @@ export const useSdStore = createPersistStore<
this.getNextId();
});
},
updateDraw(draw: any) {
_get().draw.some((item, index) => {
if (item.id === draw.id) {
_get().draw[index] = draw;
updateDraw(_draw: any) {
const draw = _get().draw || [];
draw.some((item, index) => {
if (item.id === _draw.id) {
draw[index] = _draw;
set(() => ({ draw }));
return true;
}
});