mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-08 14:29:15 +08:00
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:
parent
ed8501961a
commit
94ed39ab27
@ -1,7 +1,6 @@
|
|||||||
import { loggerService } from '@logger'
|
import { loggerService } from '@logger'
|
||||||
import { updateOcrProviderConfig } from '@renderer/store/ocr'
|
import { updateOcrProviderConfig } from '@renderer/store/ocr'
|
||||||
import type { OcrProviderConfig } from '@renderer/types'
|
import type { OcrProviderConfig } from '@renderer/types'
|
||||||
import { isBuiltinOcrProviderId } from '@renderer/types'
|
|
||||||
import { BUILTIN_OCR_PROVIDERS_MAP } from '@shared/config/ocr'
|
import { BUILTIN_OCR_PROVIDERS_MAP } from '@shared/config/ocr'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { useDispatch } from 'react-redux'
|
import { useDispatch } from 'react-redux'
|
||||||
@ -13,27 +12,16 @@ const logger = loggerService.withContext('useOcrProvider')
|
|||||||
export const useOcrProvider = (id: string) => {
|
export const useOcrProvider = (id: string) => {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const dispatch = useDispatch()
|
const dispatch = useDispatch()
|
||||||
const { providers, addProvider } = useOcrProviders()
|
const { providers } = useOcrProviders()
|
||||||
let provider = providers.find((p) => p.id === id)
|
let provider = providers.find((p) => p.id === id)
|
||||||
|
|
||||||
// safely fallback
|
// safely fallback
|
||||||
if (!provider) {
|
if (!provider) {
|
||||||
logger.error(`Ocr Provider ${id} not found`)
|
logger.error(`Ocr Provider ${id} not found`)
|
||||||
|
logger.warn(`Fallback to tesseract`)
|
||||||
window.toast.error(t('ocr.error.provider.not_found'))
|
window.toast.error(t('ocr.error.provider.not_found'))
|
||||||
if (isBuiltinOcrProviderId(id)) {
|
window.toast.warning(t('ocr.warning.provider.fallback', { name: 'Tesseract' }))
|
||||||
try {
|
provider = BUILTIN_OCR_PROVIDERS_MAP.tesseract
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const updateConfig = (update: Partial<OcrProviderConfig>) => {
|
const updateConfig = (update: Partial<OcrProviderConfig>) => {
|
||||||
|
|||||||
@ -1,13 +1,10 @@
|
|||||||
import { useQuery } from '@data/hooks/useDataApi'
|
import { useQuery } from '@data/hooks/useDataApi'
|
||||||
import { loggerService } from '@logger'
|
import { loggerService } from '@logger'
|
||||||
import { getBuiltinOcrProviderLabel } from '@renderer/i18n/label'
|
import { getBuiltinOcrProviderLabel } from '@renderer/i18n/label'
|
||||||
import { addOcrProvider, removeOcrProvider } from '@renderer/store/ocr'
|
|
||||||
import type { OcrProvider } from '@renderer/types'
|
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 { BUILTIN_OCR_PROVIDERS } from '@shared/config/ocr'
|
||||||
import { useCallback, useMemo } from 'react'
|
import { useMemo } from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
|
||||||
import { useDispatch } from 'react-redux'
|
|
||||||
|
|
||||||
const logger = loggerService.withContext('useOcrProviders')
|
const logger = loggerService.withContext('useOcrProviders')
|
||||||
|
|
||||||
@ -17,42 +14,6 @@ export const useOcrProviders = () => {
|
|||||||
() => BUILTIN_OCR_PROVIDERS.filter((p) => validProviderIds?.includes(p.id)),
|
() => BUILTIN_OCR_PROVIDERS.filter((p) => validProviderIds?.includes(p.id)),
|
||||||
[validProviderIds]
|
[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) => {
|
const getOcrProviderName = (p: OcrProvider) => {
|
||||||
return isBuiltinOcrProvider(p) ? getBuiltinOcrProviderLabel(p.id) : p.name
|
return isBuiltinOcrProvider(p) ? getBuiltinOcrProviderLabel(p.id) : p.name
|
||||||
@ -62,8 +23,6 @@ export const useOcrProviders = () => {
|
|||||||
providers,
|
providers,
|
||||||
loading,
|
loading,
|
||||||
error,
|
error,
|
||||||
addProvider,
|
|
||||||
removeProvider,
|
|
||||||
getOcrProviderName
|
getOcrProviderName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user