From 5900ff0c6e2ed1d816853c88f41eec709e01a2ab Mon Sep 17 00:00:00 2001 From: icarus Date: Mon, 20 Oct 2025 02:17:28 +0800 Subject: [PATCH] feat(ocr): add provider availability check and error message Add validation to ensure OCR provider can process images before attempting OCR --- src/renderer/src/hooks/ocr/useOcr.ts | 26 +++++++++++++++++++----- src/renderer/src/i18n/locales/en-us.json | 1 + 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/renderer/src/hooks/ocr/useOcr.ts b/src/renderer/src/hooks/ocr/useOcr.ts index 84db7c5237..e9ab72de8d 100644 --- a/src/renderer/src/hooks/ocr/useOcr.ts +++ b/src/renderer/src/hooks/ocr/useOcr.ts @@ -1,12 +1,12 @@ import { loggerService } from '@logger' import * as OcrService from '@renderer/services/ocr/OcrService' -import type { ImageFileMetadata, SupportedOcrFile } from '@renderer/types' +import type { ImageFileMetadata, ImageOcrProvider, SupportedOcrFile } from '@renderer/types' import { isImageFileMetadata } from '@renderer/types' import { formatErrorMessage } from '@renderer/utils/error' import { useCallback } from 'react' import { useTranslation } from 'react-i18next' -import { useOcrProviders } from './useOcrProvider' +import { useOcrProviders } from './useOcrProviders' const logger = loggerService.withContext('useOcr') @@ -14,6 +14,18 @@ export const useOcr = () => { const { t } = useTranslation() const { imageProvider } = useOcrProviders() + const isProviderAvailable = useCallback( + (provider: ImageOcrProvider | undefined): provider is ImageOcrProvider => { + if (!provider) { + window.toast.error(t('ocr.error.provider.not_found')) + return false + } else { + return true + } + }, + [t] + ) + /** * 对图片文件进行OCR识别 * @param image 图片文件元数据 @@ -22,10 +34,14 @@ export const useOcr = () => { */ const ocrImage = useCallback( async (image: ImageFileMetadata) => { - logger.debug('ocrImage', { config: imageProvider.config }) - return OcrService.ocr(image, imageProvider) + if (isProviderAvailable(imageProvider)) { + logger.debug('ocrImage', { config: imageProvider.config }) + return OcrService.ocr(image, imageProvider) + } else { + throw new Error(t('ocr.error.provider.not_image_provider')) + } }, - [imageProvider] + [imageProvider, isProviderAvailable, t] ) /** diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 9dbdd32dae..a8016c0f10 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -2053,6 +2053,7 @@ "existing": "The provider already exists", "get_providers": "Failed to get available providers", "not_found": "OCR provider does not exist", + "not_image_provider": "This provider cannot process image.", "update_failed": "Failed to update configuration" }, "unknown": "An error occurred during the OCR process"