From a9782d7e384aa855d91402e515b5940766dd9583 Mon Sep 17 00:00:00 2001 From: CyanFalse <53730587+ChenYFan@users.noreply.github.com> Date: Sun, 5 Jan 2025 19:46:34 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=AD=A3Helper.ts=E4=BB=A5?= =?UTF-8?q?=E9=80=82=E9=85=8D=E6=96=B0=E7=89=88=E6=9C=ACSelfHosted?= =?UTF-8?q?=E7=9A=84MangaTran?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manga/actions/translation/helper.ts | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/components/Manga/actions/translation/helper.ts b/src/components/Manga/actions/translation/helper.ts index e31719f0..d1959e5d 100644 --- a/src/components/Manga/actions/translation/helper.ts +++ b/src/components/Manga/actions/translation/helper.ts @@ -37,17 +37,34 @@ export const createFormData = ( }); const { size, detector, direction, translator, targetLanguage } = store.option.translation.options; - + let SizeLists = [['S', 1024], ['M', 1536], ['L', 2048], ['X', 2560]] const formData = new FormData(); - formData.append('file', file); - formData.append('mime', file.type); - formData.append('size', size); - formData.append('detector', detector); - formData.append('direction', direction); - formData.append('translator', translator); - if (type === 'cotrans') formData.append('target_language', targetLanguage); - else formData.append('target_lang', targetLanguage); - formData.append('retry', `${store.option.translation.forceRetry}`); + if (type === 'cotrans') { + formData.append('file', file); + formData.append('mime', file.type); + formData.append('size', size); + formData.append('detector', detector); + formData.append('direction', direction); + formData.append('translator', translator); + formData.append('target_language', targetLanguage); + formData.append('retry', `${store.option.translation.forceRetry}`); + }else if (type === 'selfhosted') { + formData.append('image', file); + formData.append('config', JSON.stringify({ + detector: { + detector: 'default', + detection_size: SizeLists.find((item) => item[0] === size)?.[1] ?? 0, + }, + render: { + direction: direction, + }, + translator: { + translator: translator, + target_lang: targetLanguage, + } + })); + + } return formData; }; From 4f436cc161257b14925992a19f81e7964f263a14 Mon Sep 17 00:00:00 2001 From: CyanFalse <53730587+ChenYFan@users.noreply.github.com> Date: Sun, 5 Jan 2025 19:47:19 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E7=AE=80=E6=98=93=E9=80=82=E9=85=8DMangaTr?= =?UTF-8?q?an?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manga/actions/translation/selfhosted.ts | 96 ++++++++++--------- 1 file changed, 52 insertions(+), 44 deletions(-) diff --git a/src/components/Manga/actions/translation/selfhosted.ts b/src/components/Manga/actions/translation/selfhosted.ts index efeaa499..94071eaa 100644 --- a/src/components/Manga/actions/translation/selfhosted.ts +++ b/src/components/Manga/actions/translation/selfhosted.ts @@ -24,10 +24,11 @@ const apiUrl = () => /** 使用自部署服务器翻译指定图片 */ export const selfhostedTranslation = async (url: string) => { - await request(`${apiUrl()}`, { - method: 'HEAD', - errorText: t('alert.server_connect_failed'), - }); + // await request(`${apiUrl()}`, { + // method: 'HEAD', + // errorText: t('alert.server_connect_failed'), + // }); + // 新版本的 selfhosted 服务无法使用head请求检查是否健康,此处需要引入其他方式检查 setMessage(url, t('translation.tip.img_downloading')); let imgBlob: Blob; @@ -39,48 +40,55 @@ export const selfhostedTranslation = async (url: string) => { } setMessage(url, t('translation.tip.upload')); - let task_id: string; - // 上传图片取得任务 id - try { - type resData = { - task_id: string; - status: string; - }; - const res = await request(`${apiUrl()}/submit`, { - method: 'POST', - responseType: 'json', - data: createFormData(imgBlob, 'selfhosted'), - }); - task_id = res.response.task_id; - } catch (error) { - log.error(error); - throw new Error(t('translation.tip.upload_error')); - } + const uploadUrl = `${apiUrl()}/translate/with-form/image`; + const res = await request(uploadUrl, { + method: 'POST', + responseType: 'blob', + data: createFormData(imgBlob, 'selfhosted'), + }); + return URL.createObjectURL(res.response); + // let task_id: string; + // // 上传图片取得任务 id + // try { + // type resData = { + // task_id: string; + // status: string; + // }; + // const res = await request(`${apiUrl()}/submit`, { + // method: 'POST', + // responseType: 'json', + // data: createFormData(imgBlob, 'selfhosted'), + // }); + // task_id = res.response.task_id; + // } catch (error) { + // log.error(error); + // throw new Error(t('translation.tip.upload_error')); + // } - let errorNum = 0; - let taskState: TaskState | undefined; - // 等待翻译完成 - while (!taskState?.finished) { - try { - await sleep(200); - const res = await request( - `${apiUrl()}/task-state?taskid=${task_id}`, - { responseType: 'json' }, - ); - taskState = res.response; - setMessage( - url, - `${t(`translation.status.${taskState.state}`) || taskState.state}`, - ); - } catch (error) { - log.error(error); - if (errorNum > 5) - throw new Error(t('translation.tip.check_img_status_failed')); - errorNum += 1; - } - } + // let errorNum = 0; + // let taskState: TaskState | undefined; + // // 等待翻译完成 + // while (!taskState?.finished) { + // try { + // await sleep(200); + // const res = await request( + // `${apiUrl()}/task-state?taskid=${task_id}`, + // { responseType: 'json' }, + // ); + // taskState = res.response; + // setMessage( + // url, + // `${t(`translation.status.${taskState.state}`) || taskState.state}`, + // ); + // } catch (error) { + // log.error(error); + // if (errorNum > 5) + // throw new Error(t('translation.tip.check_img_status_failed')); + // errorNum += 1; + // } + // } - return URL.createObjectURL(await download(`${apiUrl()}/result/${task_id}`)); + }; export const [selfhostedOptions, setSelfOptions] = createEqualsSignal< From cd5c0a958b773d2e66dbbc99ef3bb6bf66de9adc Mon Sep 17 00:00:00 2001 From: CyanFalse <53730587+ChenYFan@users.noreply.github.com> Date: Sun, 5 Jan 2025 19:51:22 +0800 Subject: [PATCH 3/3] fix --- src/components/Manga/actions/translation/helper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Manga/actions/translation/helper.ts b/src/components/Manga/actions/translation/helper.ts index d1959e5d..60ad83d6 100644 --- a/src/components/Manga/actions/translation/helper.ts +++ b/src/components/Manga/actions/translation/helper.ts @@ -52,7 +52,7 @@ export const createFormData = ( formData.append('image', file); formData.append('config', JSON.stringify({ detector: { - detector: 'default', + detector: detector, detection_size: SizeLists.find((item) => item[0] === size)?.[1] ?? 0, }, render: {