mirror of
https://github.com/lobehub/lobehub.git
synced 2026-03-27 13:29:15 +07:00
🐛 fix: resolve server version check issue for desktop app (#11834)
- Fix version check to only run for self-hosted remote server mode - Get remote server URL from electron store for proper origin detection - Remove unnecessary isDesktop parameter from useCheckServerVersion hook
This commit is contained in:
@@ -6,7 +6,7 @@ import { useTranslation } from 'react-i18next';
|
||||
|
||||
import { ProductLogo } from '@/components/Branding';
|
||||
import { CHANGELOG_URL, MANUAL_UPGRADE_URL, OFFICIAL_SITE } from '@/const/url';
|
||||
import { CURRENT_VERSION, isDesktop } from '@/const/version';
|
||||
import { CURRENT_VERSION } from '@/const/version';
|
||||
import { useNewVersion } from '@/features/User/UserPanel/useNewVersion';
|
||||
import { useGlobalStore } from '@/store/global';
|
||||
|
||||
@@ -25,7 +25,7 @@ const Version = memo<{ mobile?: boolean }>(({ mobile }) => {
|
||||
]);
|
||||
const { t } = useTranslation('common');
|
||||
|
||||
useCheckServerVersion(isDesktop);
|
||||
useCheckServerVersion();
|
||||
|
||||
const showServerVersion = serverVersion && serverVersion !== CURRENT_VERSION;
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import { memo } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { createStoreUpdater } from 'zustand-utils';
|
||||
|
||||
import { isDesktop } from '@/const/version';
|
||||
import { useIsMobile } from '@/hooks/useIsMobile';
|
||||
import { useAgentStore } from '@/store/agent';
|
||||
import { useAiInfraStore } from '@/store/aiInfra';
|
||||
@@ -44,7 +43,7 @@ const StoreInitialization = memo(() => {
|
||||
useInitSystemStatus();
|
||||
|
||||
// check server version in desktop app
|
||||
useCheckServerVersion(isDesktop);
|
||||
useCheckServerVersion();
|
||||
|
||||
// fetch server config
|
||||
const useFetchServerConfig = useServerConfigStore((s) => s.useInitServerConfig);
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { isDesktop } from '@lobechat/const';
|
||||
import type { PartialDeep } from 'type-fest';
|
||||
|
||||
import type { VersionResponseData } from '@/app/(backend)/api/version/route';
|
||||
import { BusinessGlobalService } from '@/business/client/services/BusinessGlobalService';
|
||||
import { lambdaClient } from '@/libs/trpc/client';
|
||||
import { getElectronStoreState } from '@/store/electron';
|
||||
import { electronSyncSelectors } from '@/store/electron/selectors';
|
||||
import { type LobeAgentConfig } from '@/types/agent';
|
||||
import { type GlobalRuntimeConfig } from '@/types/serverConfig';
|
||||
|
||||
@@ -26,7 +29,26 @@ class GlobalService extends BusinessGlobalService {
|
||||
* @throws Error for other failures (network errors, 500s, etc.) to allow SWR retry
|
||||
*/
|
||||
getServerVersion = async (): Promise<string | null> => {
|
||||
const res = await fetch(SERVER_VERSION_URL);
|
||||
const origin = (() => {
|
||||
if (isDesktop) {
|
||||
const remoteServerUrl = electronSyncSelectors.remoteServerUrl(getElectronStoreState());
|
||||
if (!remoteServerUrl) return undefined;
|
||||
|
||||
try {
|
||||
return new URL(remoteServerUrl).origin;
|
||||
} catch {
|
||||
// fallback: use as-is; URL construction below will throw if invalid
|
||||
return remoteServerUrl;
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
})();
|
||||
|
||||
if (!origin) return null;
|
||||
|
||||
const url = new URL(SERVER_VERSION_URL, origin).toString();
|
||||
const res = await fetch(url);
|
||||
|
||||
// Only treat 404 as "server doesn't support version API"
|
||||
// Other errors (500, network issues) should throw to allow retry
|
||||
|
||||
@@ -6,6 +6,8 @@ import type { StateCreator } from 'zustand/vanilla';
|
||||
import { CURRENT_VERSION, isDesktop } from '@/const/version';
|
||||
import { useOnlyFetchOnceSWR } from '@/libs/swr';
|
||||
import { globalService } from '@/services/global';
|
||||
import { getElectronStoreState } from '@/store/electron';
|
||||
import { electronSyncSelectors } from '@/store/electron/selectors';
|
||||
import type { SystemStatus } from '@/store/global/initialState';
|
||||
import { type LocaleMode } from '@/types/locale';
|
||||
import { switchLang } from '@/utils/client/switchLang';
|
||||
@@ -23,7 +25,7 @@ export interface GlobalGeneralAction {
|
||||
updateResourceManagerColumnWidth: (column: 'name' | 'date' | 'size', width: number) => void;
|
||||
updateSystemStatus: (status: Partial<SystemStatus>, action?: any) => void;
|
||||
useCheckLatestVersion: (enabledCheck?: boolean) => SWRResponse<string>;
|
||||
useCheckServerVersion: (enabledCheck?: boolean) => SWRResponse<string | null>;
|
||||
useCheckServerVersion: () => SWRResponse<string | null>;
|
||||
useInitSystemStatus: () => SWRResponse;
|
||||
}
|
||||
|
||||
@@ -161,9 +163,13 @@ export const generalActionSlice: StateCreator<
|
||||
},
|
||||
),
|
||||
|
||||
useCheckServerVersion: (enabledCheck = true) =>
|
||||
useCheckServerVersion: () =>
|
||||
useOnlyFetchOnceSWR(
|
||||
enabledCheck ? 'checkServerVersion' : null,
|
||||
isDesktop &&
|
||||
// only check server version for self-hosted remote server
|
||||
electronSyncSelectors.storageMode(getElectronStoreState()) !== 'cloud'
|
||||
? 'checkServerVersion'
|
||||
: null,
|
||||
async () => globalService.getServerVersion(),
|
||||
{
|
||||
onSuccess: (data: string | null) => {
|
||||
|
||||
Reference in New Issue
Block a user