feat(ocr): add provider availability check and error message

Add validation to ensure OCR provider can process images before attempting OCR
This commit is contained in:
icarus 2025-10-20 02:17:28 +08:00
parent b310ea1407
commit 5900ff0c6e
2 changed files with 22 additions and 5 deletions

View File

@ -1,12 +1,12 @@
import { loggerService } from '@logger' import { loggerService } from '@logger'
import * as OcrService from '@renderer/services/ocr/OcrService' 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 { isImageFileMetadata } from '@renderer/types'
import { formatErrorMessage } from '@renderer/utils/error' import { formatErrorMessage } from '@renderer/utils/error'
import { useCallback } from 'react' import { useCallback } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { useOcrProviders } from './useOcrProvider' import { useOcrProviders } from './useOcrProviders'
const logger = loggerService.withContext('useOcr') const logger = loggerService.withContext('useOcr')
@ -14,6 +14,18 @@ export const useOcr = () => {
const { t } = useTranslation() const { t } = useTranslation()
const { imageProvider } = useOcrProviders() 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识别 * OCR识别
* @param image * @param image
@ -22,10 +34,14 @@ export const useOcr = () => {
*/ */
const ocrImage = useCallback( const ocrImage = useCallback(
async (image: ImageFileMetadata) => { async (image: ImageFileMetadata) => {
logger.debug('ocrImage', { config: imageProvider.config }) if (isProviderAvailable(imageProvider)) {
return OcrService.ocr(image, 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]
) )
/** /**

View File

@ -2053,6 +2053,7 @@
"existing": "The provider already exists", "existing": "The provider already exists",
"get_providers": "Failed to get available providers", "get_providers": "Failed to get available providers",
"not_found": "OCR provider does not exist", "not_found": "OCR provider does not exist",
"not_image_provider": "This provider cannot process image.",
"update_failed": "Failed to update configuration" "update_failed": "Failed to update configuration"
}, },
"unknown": "An error occurred during the OCR process" "unknown": "An error occurred during the OCR process"