mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-24 10:40:07 +08:00
* refactor(ocr): streamline OCR service registration and improve image preprocessing - Simplified the registration of the system OCR service by removing the conditional check for Linux. - Updated SystemOcrService to directly import necessary modules, enhancing clarity. - Refactored image preprocessing to use a static import of the 'sharp' library for better performance. * add patch for system-ocr * add patch * add patch again * add patch * delete setting * delete i18n * lint error * add isLinux * Revert "delete i18n" This reverts commit173e65bbd0. * Revert "delete setting" This reverts commitde39c76f83. * fix: add system check for error message --------- Co-authored-by: icarus <eurfelux@gmail.com>
71 lines
2.3 KiB
TypeScript
71 lines
2.3 KiB
TypeScript
import { loggerService } from '@logger'
|
|
import { ErrorTag } from '@renderer/components/Tags/ErrorTag'
|
|
import { isMac, isWin } from '@renderer/config/constant'
|
|
import { useOcrProviders } from '@renderer/hooks/useOcrProvider'
|
|
import { BuiltinOcrProviderIds, ImageOcrProvider, isImageOcrProvider, OcrProvider } from '@renderer/types'
|
|
import { Select } from 'antd'
|
|
import { useEffect, useMemo } from 'react'
|
|
import { useTranslation } from 'react-i18next'
|
|
|
|
import { SettingRow, SettingRowTitle } from '..'
|
|
|
|
const logger = loggerService.withContext('OcrImageSettings')
|
|
|
|
type Props = {
|
|
setProvider: (provider: OcrProvider) => void
|
|
}
|
|
|
|
const OcrImageSettings = ({ setProvider }: Props) => {
|
|
const { t } = useTranslation()
|
|
const { providers, imageProvider, getOcrProviderName, setImageProviderId } = useOcrProviders()
|
|
|
|
const imageProviders = providers.filter((p) => isImageOcrProvider(p))
|
|
|
|
// 挂载时更新外部状态
|
|
useEffect(() => {
|
|
setProvider(imageProvider)
|
|
}, [imageProvider, setProvider])
|
|
|
|
const setImageProvider = (id: string) => {
|
|
const provider = imageProviders.find((p) => p.id === id)
|
|
if (!provider) {
|
|
logger.error(`Failed to find image provider by id: ${id}`)
|
|
window.message.error(t('settings.tool.ocr.image.error.provider_not_found'))
|
|
return
|
|
}
|
|
|
|
setProvider(provider)
|
|
setImageProviderId(id)
|
|
}
|
|
|
|
const platformSupport = isMac || isWin
|
|
const options = useMemo(() => {
|
|
const platformFilter = platformSupport ? () => true : (p: ImageOcrProvider) => p.id !== BuiltinOcrProviderIds.system
|
|
return imageProviders.filter(platformFilter).map((p) => ({
|
|
value: p.id,
|
|
label: getOcrProviderName(p)
|
|
}))
|
|
}, [getOcrProviderName, imageProviders, platformSupport])
|
|
|
|
const isSystem = imageProvider.id === BuiltinOcrProviderIds.system
|
|
|
|
return (
|
|
<>
|
|
<SettingRow>
|
|
<SettingRowTitle>{t('settings.tool.ocr.image_provider')}</SettingRowTitle>
|
|
<div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>
|
|
{!platformSupport && isSystem && <ErrorTag message={t('settings.tool.ocr.error.not_system')} />}
|
|
<Select
|
|
value={imageProvider.id}
|
|
style={{ width: '200px' }}
|
|
onChange={(id: string) => setImageProvider(id)}
|
|
options={options}
|
|
/>
|
|
</div>
|
|
</SettingRow>
|
|
</>
|
|
)
|
|
}
|
|
|
|
export default OcrImageSettings
|