diff --git a/packages/origine2/src/components/Assets/Assets.tsx b/packages/origine2/src/components/Assets/Assets.tsx index f14b6b5d..1a369095 100644 --- a/packages/origine2/src/components/Assets/Assets.tsx +++ b/packages/origine2/src/components/Assets/Assets.tsx @@ -58,6 +58,7 @@ import Upload from './Upload'; import naturalCompare from 'natural-compare-lite'; import useEditorStore from '@/store/useEditorStore'; import useTrashFailedToast from '@/hooks/useTrashFailedToast'; +import { isLocalBrowserHost } from '@/utils/isLocalBrowserHost'; export interface IFile { extName: string; @@ -136,6 +137,7 @@ export default function Assets({ const updateSortOrder = useEditorStore.use.updateSortOrder(); const isTrash = useEditorStore.use.isTrash(); const toastTrashFailed = useTrashFailedToast(); + const canOpenLocalFolder = isLocalBrowserHost(); const currentPath = useValue([...basePath, ...selectedFilePath.slice(0, -1)]); const currentFullPath = useMemo(() => [...rootPath, ...currentPath.value], [currentPath.value]); @@ -589,7 +591,9 @@ export default function Assets({ } onClick={handleRefresh}>{t`刷新`} - } onClick={handleOpenFolder}>{t`在文件管理器中打开`} + {canOpenLocalFolder && ( + } onClick={handleOpenFolder}>{t`在文件管理器中打开`} + )} }>{t`排序方式`} diff --git a/packages/origine2/src/components/UserDataSettings/UserDataSettingsDialog.tsx b/packages/origine2/src/components/UserDataSettings/UserDataSettingsDialog.tsx index af6a1e2e..f1510cf1 100644 --- a/packages/origine2/src/components/UserDataSettings/UserDataSettingsDialog.tsx +++ b/packages/origine2/src/components/UserDataSettings/UserDataSettingsDialog.tsx @@ -15,6 +15,7 @@ import useSWR, { mutate } from 'swr'; import { t } from '@lingui/macro'; import useEditorStore from '@/store/useEditorStore'; import { getMigrationGuideUrl } from '@/utils/language'; +import { isLocalBrowserHost } from '@/utils/isLocalBrowserHost'; import styles from './UserDataSettingsDialog.module.scss'; declare global { @@ -72,6 +73,7 @@ export function UserDataSettingsPanel() { const [busy, setBusy] = useState(false); const language = useEditorStore.use.language(); const migrationGuideUrl = getMigrationGuideUrl(language); + const canOpenLocalFolder = isLocalBrowserHost(); useEffect(() => { if (status) setTargetPath(status.configuredUserDataRoot); @@ -207,17 +209,19 @@ export function UserDataSettingsPanel() { {status.configRoot} -
- - - -
+ {canOpenLocalFolder && ( +
+ + + +
+ )}
diff --git a/packages/origine2/src/pages/dashboard/GameElement.tsx b/packages/origine2/src/pages/dashboard/GameElement.tsx index 6c66afcd..24cef36c 100644 --- a/packages/origine2/src/pages/dashboard/GameElement.tsx +++ b/packages/origine2/src/pages/dashboard/GameElement.tsx @@ -38,6 +38,7 @@ import { t } from '@lingui/macro'; import { GameInfoDto } from '@/api/Api'; import useEditorStore from '@/store/useEditorStore'; import useTrashFailedToast from '@/hooks/useTrashFailedToast'; +import { isLocalBrowserHost } from '@/utils/isLocalBrowserHost'; interface IGameElementProps { gameInfo: GameInfoDto; @@ -74,6 +75,7 @@ export default function GameElement(props: IGameElementProps) { const deleteChecked = useValue(false); const isTrash = useEditorStore.use.isTrash(); const toastTrashFailed = useTrashFailedToast(); + const canOpenLocalFolder = isLocalBrowserHost(); const openInFileExplorer = () => { api.manageGameControllerOpenGameDict(props.gameInfo.dir); @@ -130,10 +132,12 @@ export default function GameElement(props: IGameElementProps) { - } - onClick={() => openInFileExplorer()} - >{t`在文件管理器中打开`} + {canOpenLocalFolder && ( + } + onClick={() => openInFileExplorer()} + >{t`在文件管理器中打开`} + )} } onClick={() => previewInNewTab()}>{t`在新标签页中预览`} } diff --git a/packages/origine2/src/pages/dashboard/TemplateElement.tsx b/packages/origine2/src/pages/dashboard/TemplateElement.tsx index 125f2ba3..e629f453 100644 --- a/packages/origine2/src/pages/dashboard/TemplateElement.tsx +++ b/packages/origine2/src/pages/dashboard/TemplateElement.tsx @@ -40,6 +40,7 @@ import { localStorageRename } from '@/utils/localStorageRename'; import { TemplateInfoDto } from '@/api/Api'; import useEditorStore from '@/store/useEditorStore'; import useTrashFailedToast from '@/hooks/useTrashFailedToast'; +import { isLocalBrowserHost } from '@/utils/isLocalBrowserHost'; interface ITemplateElementProps { templateInfo: TemplateInfoDto; @@ -75,6 +76,7 @@ export default function TemplateElement(props: ITemplateElementProps) { const newTemplateName = useValue(props.templateInfo.dir); const isTrash = useEditorStore.use.isTrash(); const toastTrashFailed = useTrashFailedToast(); + const canOpenLocalFolder = isLocalBrowserHost(); const openInFileExplorer = () => { api.assetsControllerOpenDict(`templates/${props.templateInfo.dir}`); @@ -146,10 +148,12 @@ export default function TemplateElement(props: ITemplateElementProps) { - } - onClick={() => openInFileExplorer()} - >{t`在文件管理器中打开`} + {canOpenLocalFolder && ( + } + onClick={() => openInFileExplorer()} + >{t`在文件管理器中打开`} + )} } onClick={() => previewInNewTab()}>{t`在新标签页中预览`}