refactor(translate): add markdown toggle preference and refactor state management

Move markdown toggle state to preferences system and remove direct database operations
This commit is contained in:
icarus 2025-10-15 00:22:43 +08:00
parent 9b7094ea4a
commit c2ee3fff33
3 changed files with 10 additions and 11 deletions

View File

@ -399,6 +399,7 @@ export interface PreferenceSchemas {
'translate.settings.auto_copy': boolean 'translate.settings.auto_copy': boolean
// indexedDB/translate // indexedDB/translate
'translate.settings.auto_detection_method': PreferenceTypes.AutoDetectionMethod 'translate.settings.auto_detection_method': PreferenceTypes.AutoDetectionMethod
'translate.settings.enable_markdown': boolean
// redux/settings/customCss // redux/settings/customCss
'ui.custom_css': string 'ui.custom_css': string
// redux/settings/navbarPosition // redux/settings/navbarPosition
@ -660,6 +661,7 @@ export const DefaultPreferences: PreferenceSchemas = {
'topic.tab.show_time': false, 'topic.tab.show_time': false,
'translate.settings.auto_copy': false, 'translate.settings.auto_copy': false,
'translate.settings.auto_detection_method': 'franc', 'translate.settings.auto_detection_method': 'franc',
'translate.settings.enable_markdown': false,
'ui.custom_css': '', 'ui.custom_css': '',
'ui.navbar.position': 'top', 'ui.navbar.position': 'top',
'ui.sidebar.icons.invisible': [], 'ui.sidebar.icons.invisible': [],

View File

@ -59,11 +59,16 @@ const TranslatePage: FC = () => {
const { t } = useTranslation() const { t } = useTranslation()
const { translateModel, setTranslateModel } = useDefaultModel() const { translateModel, setTranslateModel } = useDefaultModel()
const { prompt, getLanguageByLangcode, getLanguageLabel } = useTranslate() const { prompt, getLanguageByLangcode, getLanguageLabel } = useTranslate()
const [autoCopy] = usePreference('translate.settings.auto_copy')
const { shikiMarkdownIt } = useCodeStyle() const { shikiMarkdownIt } = useCodeStyle()
const { onSelectFile, selecting, clearFiles } = useFiles({ extensions: [...imageExts, ...textExts] }) const { onSelectFile, selecting, clearFiles } = useFiles({ extensions: [...imageExts, ...textExts] })
const { ocr } = useOcr() const { ocr } = useOcr()
const { setTimeoutTimer } = useTimer() const { setTimeoutTimer } = useTimer()
// Preferences
const [autoCopy] = usePreference('translate.settings.auto_copy')
const [enableMarkdown, setEnableMarkdown] = usePreference('translate.settings.enable_markdown')
// Cache
const [text, setText] = useCache('translate.input') const [text, setText] = useCache('translate.input')
const [output, setOutput] = useCache('translate.output') const [output, setOutput] = useCache('translate.output')
const [isDetecting, setIsDetecting] = useCache('translate.detecting') const [isDetecting, setIsDetecting] = useCache('translate.detecting')
@ -77,7 +82,6 @@ const TranslatePage: FC = () => {
const [copied, setCopied] = useTemporaryValue(false, 2000) const [copied, setCopied] = useTemporaryValue(false, 2000)
const [historyDrawerVisible, setHistoryDrawerVisible] = useState(false) const [historyDrawerVisible, setHistoryDrawerVisible] = useState(false)
const [isScrollSyncEnabled, setIsScrollSyncEnabled] = useState(false) const [isScrollSyncEnabled, setIsScrollSyncEnabled] = useState(false)
const [enableMarkdown, setEnableMarkdown] = useState(false)
const [settingsVisible, setSettingsVisible] = useState(false) const [settingsVisible, setSettingsVisible] = useState(false)
const [detectedLanguage, setDetectedLanguage] = useState<TranslateLanguage | null>(null) const [detectedLanguage, setDetectedLanguage] = useState<TranslateLanguage | null>(null)
const [sourceLanguage, setSourceLanguage] = useState<TranslateLanguage | 'auto'>(_sourceLanguage) const [sourceLanguage, setSourceLanguage] = useState<TranslateLanguage | 'auto'>(_sourceLanguage)
@ -327,9 +331,6 @@ const TranslatePage: FC = () => {
const scrollSyncSetting = await db.settings.get({ id: 'translate:scroll:sync' }) const scrollSyncSetting = await db.settings.get({ id: 'translate:scroll:sync' })
setIsScrollSyncEnabled(scrollSyncSetting ? scrollSyncSetting.value : false) setIsScrollSyncEnabled(scrollSyncSetting ? scrollSyncSetting.value : false)
const markdownSetting = await db.settings.get({ id: 'translate:markdown:enabled' })
setEnableMarkdown(markdownSetting ? markdownSetting.value : false)
}) })
}, [getLanguageByLangcode]) }, [getLanguageByLangcode])
@ -735,8 +736,6 @@ const TranslatePage: FC = () => {
onClose={() => setSettingsVisible(false)} onClose={() => setSettingsVisible(false)}
isScrollSyncEnabled={isScrollSyncEnabled} isScrollSyncEnabled={isScrollSyncEnabled}
setIsScrollSyncEnabled={setIsScrollSyncEnabled} setIsScrollSyncEnabled={setIsScrollSyncEnabled}
enableMarkdown={enableMarkdown}
setEnableMarkdown={setEnableMarkdown}
translateModel={translateModel} translateModel={translateModel}
/> />
</Container> </Container>

View File

@ -17,13 +17,12 @@ const TranslateSettings: FC<{
onClose: () => void onClose: () => void
isScrollSyncEnabled: boolean isScrollSyncEnabled: boolean
setIsScrollSyncEnabled: (value: boolean) => void setIsScrollSyncEnabled: (value: boolean) => void
enableMarkdown: boolean
setEnableMarkdown: (value: boolean) => void
translateModel: Model | undefined translateModel: Model | undefined
}> = ({ visible, onClose, isScrollSyncEnabled, setIsScrollSyncEnabled, enableMarkdown, setEnableMarkdown }) => { }> = ({ visible, onClose, isScrollSyncEnabled, setIsScrollSyncEnabled }) => {
const { t } = useTranslation() const { t } = useTranslation()
const [autoCopy, setAutoCopy] = usePreference('translate.settings.auto_copy') const [autoCopy, setAutoCopy] = usePreference('translate.settings.auto_copy')
const [autoDetectionMethod, setAutoDetectionMethod] = usePreference('translate.settings.auto_detection_method') const [autoDetectionMethod, setAutoDetectionMethod] = usePreference('translate.settings.auto_detection_method')
const [enableMarkdown, setEnableMarkdown] = usePreference('translate.settings.enable_markdown')
const [bidirectional, setBidirectional] = useCache('translate.bidirectional') const [bidirectional, setBidirectional] = useCache('translate.bidirectional')
const { enabled: isBidirectional } = bidirectional const { enabled: isBidirectional } = bidirectional
const onMoreSetting = () => { const onMoreSetting = () => {
@ -48,7 +47,6 @@ const TranslateSettings: FC<{
isSelected={enableMarkdown} isSelected={enableMarkdown}
onValueChange={(checked) => { onValueChange={(checked) => {
setEnableMarkdown(checked) setEnableMarkdown(checked)
db.settings.put({ id: 'translate:markdown:enabled', value: checked })
}} }}
/> />
</Flex> </Flex>