refactor(ocr): simplify provider fallback logic and remove unused methods

Remove unused provider management methods (add/remove) and simplify the fallback logic in useOcrProvider to always use Tesseract when provider is not found
This commit is contained in:
icarus 2025-10-20 02:30:57 +08:00
parent ed8501961a
commit 94ed39ab27
2 changed files with 6 additions and 59 deletions

View File

@ -1,7 +1,6 @@
import { loggerService } from '@logger'
import { updateOcrProviderConfig } from '@renderer/store/ocr'
import type { OcrProviderConfig } from '@renderer/types'
import { isBuiltinOcrProviderId } from '@renderer/types'
import { BUILTIN_OCR_PROVIDERS_MAP } from '@shared/config/ocr'
import { useTranslation } from 'react-i18next'
import { useDispatch } from 'react-redux'
@ -13,27 +12,16 @@ const logger = loggerService.withContext('useOcrProvider')
export const useOcrProvider = (id: string) => {
const { t } = useTranslation()
const dispatch = useDispatch()
const { providers, addProvider } = useOcrProviders()
const { providers } = useOcrProviders()
let provider = providers.find((p) => p.id === id)
// safely fallback
if (!provider) {
logger.error(`Ocr Provider ${id} not found`)
logger.warn(`Fallback to tesseract`)
window.toast.error(t('ocr.error.provider.not_found'))
if (isBuiltinOcrProviderId(id)) {
try {
addProvider(BUILTIN_OCR_PROVIDERS_MAP[id])
} catch (e) {
logger.warn(`Add ${BUILTIN_OCR_PROVIDERS_MAP[id].name} failed. Just use temp provider from config.`)
window.toast.warning(t('ocr.warning.provider.fallback', { name: BUILTIN_OCR_PROVIDERS_MAP[id].name }))
} finally {
provider = BUILTIN_OCR_PROVIDERS_MAP[id]
}
} else {
logger.warn(`Fallback to tesseract`)
window.toast.warning(t('ocr.warning.provider.fallback', { name: 'Tesseract' }))
provider = BUILTIN_OCR_PROVIDERS_MAP.tesseract
}
window.toast.warning(t('ocr.warning.provider.fallback', { name: 'Tesseract' }))
provider = BUILTIN_OCR_PROVIDERS_MAP.tesseract
}
const updateConfig = (update: Partial<OcrProviderConfig>) => {

View File

@ -1,13 +1,10 @@
import { useQuery } from '@data/hooks/useDataApi'
import { loggerService } from '@logger'
import { getBuiltinOcrProviderLabel } from '@renderer/i18n/label'
import { addOcrProvider, removeOcrProvider } from '@renderer/store/ocr'
import type { OcrProvider } from '@renderer/types'
import { isBuiltinOcrProvider, isBuiltinOcrProviderId } from '@renderer/types'
import { isBuiltinOcrProvider } from '@renderer/types'
import { BUILTIN_OCR_PROVIDERS } from '@shared/config/ocr'
import { useCallback, useMemo } from 'react'
import { useTranslation } from 'react-i18next'
import { useDispatch } from 'react-redux'
import { useMemo } from 'react'
const logger = loggerService.withContext('useOcrProviders')
@ -17,42 +14,6 @@ export const useOcrProviders = () => {
() => BUILTIN_OCR_PROVIDERS.filter((p) => validProviderIds?.includes(p.id)),
[validProviderIds]
)
const dispatch = useDispatch()
const { t } = useTranslation()
/**
* OCR服务提供者
* @param provider - OCR提供者对象id和其他配置信息
* @throws {Error} ID的提供者时抛出错误
*/
const addProvider = useCallback(
(provider: OcrProvider) => {
if (providers.some((p) => p.id === provider.id)) {
const msg = `Provider with id ${provider.id} already exists`
logger.error(msg)
window.toast.error(t('ocr.error.provider.existing'))
throw new Error(msg)
}
dispatch(addOcrProvider(provider))
},
[dispatch, providers, t]
)
/**
* OCR服务提供者
* @param id - OCR提供者ID
* @throws {Error}
*/
const removeProvider = (id: string) => {
if (isBuiltinOcrProviderId(id)) {
const msg = `Cannot remove builtin provider ${id}`
logger.error(msg)
window.toast.error(t('ocr.error.provider.cannot_remove_builtin'))
throw new Error(msg)
}
dispatch(removeOcrProvider(id))
}
const getOcrProviderName = (p: OcrProvider) => {
return isBuiltinOcrProvider(p) ? getBuiltinOcrProviderLabel(p.id) : p.name
@ -62,8 +23,6 @@ export const useOcrProviders = () => {
providers,
loading,
error,
addProvider,
removeProvider,
getOcrProviderName
}
}