From 63543a48e32bc4190064b796691296077b255706 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Tue, 7 May 2024 00:37:01 +0200 Subject: [PATCH] Add option to disable server update checks --- src/components/util/ServerUpdateChecker.tsx | 22 ++++++++- src/lib/metadata/metadata.ts | 1 + src/lib/metadata/metadataServerSettings.ts | 1 + src/screens/settings/ServerSettings.tsx | 52 +++++++++++++++++++-- src/typings.ts | 1 + 5 files changed, 71 insertions(+), 6 deletions(-) diff --git a/src/components/util/ServerUpdateChecker.tsx b/src/components/util/ServerUpdateChecker.tsx index 064515d9..979ef15c 100644 --- a/src/components/util/ServerUpdateChecker.tsx +++ b/src/components/util/ServerUpdateChecker.tsx @@ -11,16 +11,26 @@ import { requestManager } from '@/lib/requests/RequestManager.ts'; import { getVersion } from '@/screens/settings/About.tsx'; import { useUpdateChecker } from '@/util/useUpdateChecker.tsx'; import { VersionUpdateInfoDialog } from '@/components/util/VersionUpdateInfoDialog.tsx'; +import { useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts'; + +const disabledUpdateCheck = () => Promise.resolve(); export const ServerUpdateChecker = () => { const { t } = useTranslation(); + const { + settings: { serverInformAvailableUpdate }, + } = useMetadataServerSettings(); + const { data: serverUpdateCheckData, loading: isCheckingForServerUpdate, error: serverUpdateCheckError, refetch: checkForUpdate, - } = requestManager.useCheckForServerUpdate({ notifyOnNetworkStatusChange: true, fetchPolicy: 'cache-only' }); + } = requestManager.useCheckForServerUpdate({ + notifyOnNetworkStatusChange: true, + fetchPolicy: 'cache-only', + }); const { data } = requestManager.useGetAbout(); const { aboutServer } = data ?? {}; @@ -31,7 +41,15 @@ export const ServerUpdateChecker = () => { const version = aboutServer ? getVersion(aboutServer) : undefined; const isServerUpdateAvailable = !!selectedServerChannelInfo?.tag && selectedServerChannelInfo.tag !== version; - const updateChecker = useUpdateChecker('server', checkForUpdate, selectedServerChannelInfo?.tag); + const updateChecker = useUpdateChecker( + 'server', + serverInformAvailableUpdate ? checkForUpdate : disabledUpdateCheck, + selectedServerChannelInfo?.tag, + ); + + if (!serverInformAvailableUpdate) { + return null; + } if (isCheckingForServerUpdate) { return null; diff --git a/src/lib/metadata/metadata.ts b/src/lib/metadata/metadata.ts index ad7dceff..83a30cce 100644 --- a/src/lib/metadata/metadata.ts +++ b/src/lib/metadata/metadata.ts @@ -53,6 +53,7 @@ const GLOBAL_METADATA_KEYS: AppMetadataKeys[] = [ // updates 'webUIInformAvailableUpdate', + 'serverInformAvailableUpdate', ]; /** diff --git a/src/lib/metadata/metadataServerSettings.ts b/src/lib/metadata/metadataServerSettings.ts index 3945233f..3ffb464d 100644 --- a/src/lib/metadata/metadataServerSettings.ts +++ b/src/lib/metadata/metadataServerSettings.ts @@ -49,6 +49,7 @@ export const getDefaultSettings = (): MetadataServerSettings => ({ // updates webUIInformAvailableUpdate: true, + serverInformAvailableUpdate: true, }); export const convertSettingsToMetadata = ( diff --git a/src/screens/settings/ServerSettings.tsx b/src/screens/settings/ServerSettings.tsx index b1279ec3..40659b23 100644 --- a/src/screens/settings/ServerSettings.tsx +++ b/src/screens/settings/ServerSettings.tsx @@ -18,12 +18,17 @@ import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarC import { requestManager } from '@/lib/requests/RequestManager.ts'; import { useLocalStorage } from '@/util/useStorage.tsx'; import { TextSetting } from '@/components/settings/text/TextSetting.tsx'; -import { ServerSettings as GqlServerSettings } from '@/typings.ts'; +import { MetadataUpdateSettings, ServerSettings as GqlServerSettings } from '@/typings.ts'; import { NumberSetting } from '@/components/settings/NumberSetting.tsx'; import { SelectSetting } from '@/components/settings/SelectSetting.tsx'; import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx'; import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx'; import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts'; +import { + createUpdateMetadataServerSettings, + useMetadataServerSettings, +} from '@/lib/metadata/metadataServerSettings.ts'; +import { makeToast } from '@/components/util/Toast.tsx'; type ServerSettingsType = Pick< GqlServerSettings, @@ -86,7 +91,21 @@ export const ServerSettings = () => { }; }, [t]); - const { data, loading, error, refetch } = requestManager.useGetServerSettings({ + const { + settings: { serverInformAvailableUpdate }, + loading: areMetadataServerSettingsLoading, + request: { error: metadataServerSettingsError, refetch: refetchServerMetadataSettings }, + } = useMetadataServerSettings(); + const updateMetadataServerSettings = createUpdateMetadataServerSettings< + keyof Pick + >(() => makeToast(t('global.error.label.failed_to_save_changes'), 'error')); + + const { + data, + loading: areServerSettingsLoading, + error: serverSettingsError, + refetch: refetchServerSettings, + } = requestManager.useGetServerSettings({ notifyOnNetworkStatusChange: true, }); const [mutateSettings] = requestManager.useUpdateServerSettings(); @@ -121,11 +140,23 @@ export const ServerSettings = () => { value={serverAddress} placeholder="http://localhost:4567" /> + + + updateMetadataServerSettings('serverInformAvailableUpdate', e.target.checked)} + /> + ), - [], + [serverAddress, serverInformAvailableUpdate], ); + const loading = areMetadataServerSettingsLoading || areServerSettingsLoading; if (loading) { return ( <> @@ -135,6 +166,7 @@ export const ServerSettings = () => { ); } + const error = metadataServerSettingsError ?? serverSettingsError; if (error) { return ( <> @@ -142,7 +174,19 @@ export const ServerSettings = () => { refetch().catch(defaultPromiseErrorHandler('ServerSettings::refetch'))} + retry={() => { + if (metadataServerSettingsError) { + refetchServerMetadataSettings().catch( + defaultPromiseErrorHandler('ServerSettings::refetchServerMetadataSettings'), + ); + } + + if (serverSettingsError) { + refetchServerSettings().catch( + defaultPromiseErrorHandler('ServerSettings::refetchServerSettings'), + ); + } + }} /> ); diff --git a/src/typings.ts b/src/typings.ts index 5439fa55..fec0b288 100644 --- a/src/typings.ts +++ b/src/typings.ts @@ -257,6 +257,7 @@ export type MetadataTrackingSettings = { export type MetadataUpdateSettings = { webUIInformAvailableUpdate: boolean; + serverInformAvailableUpdate: boolean; }; export type MetadataServerSettings = MetadataDownloadSettings &