Skip to content

Commit

Permalink
Merge pull request #212 from ChenYFan/patch-1
Browse files Browse the repository at this point in the history
[fix] #211简易适配新版本manga-image-translator
  • Loading branch information
hymbz authored Jan 5, 2025
2 parents 1085fec + cd5c0a9 commit a770f17
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 54 deletions.
37 changes: 27 additions & 10 deletions src/components/Manga/actions/translation/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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: detector,
detection_size: SizeLists.find((item) => item[0] === size)?.[1] ?? 0,
},
render: {
direction: direction,
},
translator: {
translator: translator,
target_lang: targetLanguage,
}
}));

}
return formData;
};

Expand Down
96 changes: 52 additions & 44 deletions src/components/Manga/actions/translation/selfhosted.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<resData>(`${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<Blob>(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<resData>(`${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<TaskState>(
`${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<TaskState>(
// `${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<
Expand Down

0 comments on commit a770f17

Please sign in to comment.