From 55197f22097f4e140bfa8a5fcb92f1ff0506b2b9 Mon Sep 17 00:00:00 2001 From: Qing Date: Sun, 12 Jun 2022 13:01:45 +0800 Subject: [PATCH] frontend: better error handling --- lama_cleaner/app/src/adapters/inpainting.ts | 6 +++++- .../app/src/components/Editor/Editor.tsx | 19 +++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lama_cleaner/app/src/adapters/inpainting.ts b/lama_cleaner/app/src/adapters/inpainting.ts index cac4bb4..fedd6e3 100644 --- a/lama_cleaner/app/src/adapters/inpainting.ts +++ b/lama_cleaner/app/src/adapters/inpainting.ts @@ -34,7 +34,11 @@ export default async function inpaint( method: 'POST', body: fd, }).then(async r => { - return r.blob() + console.log(r) + if (r.ok) { + return r.blob() + } + throw new Error('Something went wrong on server side.') }) return URL.createObjectURL(res) diff --git a/lama_cleaner/app/src/components/Editor/Editor.tsx b/lama_cleaner/app/src/components/Editor/Editor.tsx index 9cebfe2..8d08b8b 100644 --- a/lama_cleaner/app/src/components/Editor/Editor.tsx +++ b/lama_cleaner/app/src/components/Editor/Editor.tsx @@ -15,7 +15,7 @@ import { TransformComponent, TransformWrapper, } from 'react-zoom-pan-pinch' -import { useRecoilValue } from 'recoil' +import { useRecoilState, useRecoilValue } from 'recoil' import { useWindowSize, useKey, useKeyPressEvent } from 'react-use' import inpaint from '../../adapters/inpainting' import Button from '../shared/Button' @@ -28,7 +28,7 @@ import { loadImage, useImage, } from '../../utils' -import { settingState } from '../../store/Atoms' +import { settingState, toastState } from '../../store/Atoms' const TOOLBAR_SIZE = 200 const BRUSH_COLOR = '#ffcc00bb' @@ -73,6 +73,7 @@ function mouseXY(ev: SyntheticEvent) { export default function Editor(props: EditorProps) { const { file } = props const settings = useRecoilValue(settingState) + const [toastVal, setToastState] = useRecoilState(toastState) const [brushSize, setBrushSize] = useState(40) const [original, isOriginalLoaded] = useImage(file) const [renders, setRenders] = useState([]) @@ -144,12 +145,11 @@ export default function Editor(props: EditorProps) { } const newLineGroups = [...lineGroups, curLineGroup] - setLineGroups(newLineGroups) setCurLineGroup([]) setIsDraging(false) setIsInpaintingLoading(true) - drawAllLinesOnMask(newLineGroups) + try { const res = await inpaint( file, @@ -165,9 +165,16 @@ export default function Editor(props: EditorProps) { const newRenders = [...renders, newRender] setRenders(newRenders) draw(newRender, []) + // Only append new LineGroup after inpainting success + setLineGroups(newLineGroups) } catch (e: any) { - // eslint-disable-next-line - alert(e.message ? e.message : e.toString()) + setToastState({ + open: true, + desc: e.message ? e.message : e.toString(), + state: 'error', + duration: 2000, + }) + drawOnCurrentRender([]) } setIsInpaintingLoading(false) }