diff --git a/apps/readest-app/src/app/reader/components/settings/FontDropDown.tsx b/apps/readest-app/src/app/reader/components/settings/FontDropDown.tsx index 731c330e..29ad8043 100644 --- a/apps/readest-app/src/app/reader/components/settings/FontDropDown.tsx +++ b/apps/readest-app/src/app/reader/components/settings/FontDropDown.tsx @@ -41,7 +41,11 @@ const FontItem: React.FC = ({ index, style, data }) => { )} - + {option.label || option.option} @@ -100,7 +104,7 @@ const FontDropdown: React.FC = ({ >
= ({ bookKey, onRegisterReset }) => { const _ = useTranslation(); - const { envConfig } = useEnv(); + const { envConfig, appService } = useEnv(); const { getView, getViewSettings } = useReaderStore(); const { fontPanelView, setFontPanelView } = useSettingsStore(); - const { fonts: allCustomFonts, getFontFamilies } = useCustomFontStore(); + const { + fonts: allCustomFonts, + getAllFonts, + getFontFamilies, + removeFont, + saveCustomFonts, + } = useCustomFontStore(); const viewSettings = getViewSettings(bookKey)!; const view = getView(bookKey)!; const iconSize18 = useResponsiveSize(18); @@ -159,6 +165,12 @@ const FontPanel: React.FC = ({ bookKey, onRegisterReset monospaceFont: setMonospaceFont, fontWeight: setFontWeight, }); + getAllFonts().forEach((font) => { + if (removeFont(font.id)) { + appService!.fs.removeFile(font.path, 'Fonts'); + } + }); + saveCustomFonts(envConfig); }; const handleManageCustomFonts = () => { @@ -172,7 +184,7 @@ const FontPanel: React.FC = ({ bookKey, onRegisterReset useEffect(() => { onRegisterReset(handleReset); // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }, [appService]); useEffect(() => { setCJKFonts((prev) => { diff --git a/apps/readest-app/src/utils/font.ts b/apps/readest-app/src/utils/font.ts index 7fe3d59d..7f7b182e 100644 --- a/apps/readest-app/src/utils/font.ts +++ b/apps/readest-app/src/utils/font.ts @@ -20,6 +20,8 @@ function parseMacintoshString(dataView: DataView, offset: number, length: number return chars.join(''); } +const NO_STYLE_LANGUAGE_IDS = new Set([0x0404, 0x0804, 0x0c04, 0x1004, 19, 33]); + function getLanguagePriority(platformID: number, languageID: number, userLanguage: string): number { let priority = 0; @@ -160,10 +162,14 @@ export const parseFontName = (fontData: ArrayBuffer, filename: string) => { } fontFamilyNames.sort((a, b) => b.priority - a.priority); fontStyleNames.sort((a, b) => b.priority - a.priority); + const fontStyleName = fontStyleNames[0]; const familyName = fontFamilyNames[0]!.name; - const styleName = fontStyleNames.length > 0 ? fontStyleNames[0]!.name : ''; + const styleName = fontStyleName?.name || ''; return { - name: styleName ? `${familyName} ${styleName}` : familyName, + name: + fontStyleName && !NO_STYLE_LANGUAGE_IDS.has(fontStyleName.languageID) + ? `${familyName} ${styleName}` + : familyName, family: familyName, style: styleName, };