mirror of
https://github.com/Yidadaa/ChatGPT-Next-Web.git
synced 2025-08-09 01:08:41 +08:00
using CacheStorage to store image #5013
This commit is contained in:
@@ -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;
|
||||
}
|
||||
});
|
||||
|
Reference in New Issue
Block a user