From 86ec83a2ef7641e77322bde126bd3579a2ae6d0a Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Wed, 1 May 2024 16:56:18 +0200 Subject: [PATCH] Handle missing trackers in backup validation result --- public/locales/en.json | 3 +- src/lib/graphql/generated/apollo-helpers.ts | 13 ++- src/lib/graphql/generated/graphql.ts | 8 +- src/lib/graphql/queries/BackupQuery.ts | 3 + src/screens/settings/Backup.tsx | 106 ++++++++++++++------ versionToServerVersionMapping.json | 2 +- 6 files changed, 97 insertions(+), 38 deletions(-) diff --git a/public/locales/en.json b/public/locales/en.json index 250364dd..e37cf19e 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -826,7 +826,8 @@ "dialog": { "content": { "label": { - "missing_sources": "The following sources are not installed:" + "missing_sources": "The following sources are not installed:", + "missing_trackers": "The following trackers are not logged in:" } }, "title": "Backup validation" diff --git a/src/lib/graphql/generated/apollo-helpers.ts b/src/lib/graphql/generated/apollo-helpers.ts index 935deb8d..e5e0ebd3 100644 --- a/src/lib/graphql/generated/apollo-helpers.ts +++ b/src/lib/graphql/generated/apollo-helpers.ts @@ -1020,15 +1020,20 @@ export type UpdateTrackPayloadFieldPolicy = { clientMutationId?: FieldPolicy | FieldReadFunction, trackRecord?: FieldPolicy | FieldReadFunction }; -export type ValidateBackupResultKeySpecifier = ('missingSources' | ValidateBackupResultKeySpecifier)[]; +export type ValidateBackupResultKeySpecifier = ('missingSources' | 'missingTrackers' | ValidateBackupResultKeySpecifier)[]; export type ValidateBackupResultFieldPolicy = { - missingSources?: FieldPolicy | FieldReadFunction + missingSources?: FieldPolicy | FieldReadFunction, + missingTrackers?: FieldPolicy | FieldReadFunction }; export type ValidateBackupSourceKeySpecifier = ('id' | 'name' | ValidateBackupSourceKeySpecifier)[]; export type ValidateBackupSourceFieldPolicy = { id?: FieldPolicy | FieldReadFunction, name?: FieldPolicy | FieldReadFunction }; +export type ValidateBackupTrackerKeySpecifier = ('name' | ValidateBackupTrackerKeySpecifier)[]; +export type ValidateBackupTrackerFieldPolicy = { + name?: FieldPolicy | FieldReadFunction +}; export type WebUIUpdateCheckKeySpecifier = ('channel' | 'tag' | 'updateAvailable' | WebUIUpdateCheckKeySpecifier)[]; export type WebUIUpdateCheckFieldPolicy = { channel?: FieldPolicy | FieldReadFunction, @@ -1552,6 +1557,10 @@ export type StrictTypedTypePolicies = { keyFields?: false | ValidateBackupSourceKeySpecifier | (() => undefined | ValidateBackupSourceKeySpecifier), fields?: ValidateBackupSourceFieldPolicy, }, + ValidateBackupTracker?: Omit & { + keyFields?: false | ValidateBackupTrackerKeySpecifier | (() => undefined | ValidateBackupTrackerKeySpecifier), + fields?: ValidateBackupTrackerFieldPolicy, + }, WebUIUpdateCheck?: Omit & { keyFields?: false | WebUIUpdateCheckKeySpecifier | (() => undefined | WebUIUpdateCheckKeySpecifier), fields?: WebUIUpdateCheckFieldPolicy, diff --git a/src/lib/graphql/generated/graphql.ts b/src/lib/graphql/generated/graphql.ts index 063d5175..6d2ce81c 100644 --- a/src/lib/graphql/generated/graphql.ts +++ b/src/lib/graphql/generated/graphql.ts @@ -2523,6 +2523,7 @@ export type ValidateBackupInput = { export type ValidateBackupResult = { __typename?: 'ValidateBackupResult'; missingSources: Array; + missingTrackers: Array; }; export type ValidateBackupSource = { @@ -2531,6 +2532,11 @@ export type ValidateBackupSource = { name: Scalars['String']['output']; }; +export type ValidateBackupTracker = { + __typename?: 'ValidateBackupTracker'; + name: Scalars['String']['output']; +}; + export enum WebUiChannel { Bundled = 'BUNDLED', Preview = 'PREVIEW', @@ -3052,7 +3058,7 @@ export type ValidateBackupQueryVariables = Exact<{ }>; -export type ValidateBackupQuery = { __typename?: 'Query', validateBackup: { __typename?: 'ValidateBackupResult', missingSources: Array<{ __typename?: 'ValidateBackupSource', id: string, name: string }> } }; +export type ValidateBackupQuery = { __typename?: 'Query', validateBackup: { __typename?: 'ValidateBackupResult', missingSources: Array<{ __typename?: 'ValidateBackupSource', id: string, name: string }>, missingTrackers: Array<{ __typename?: 'ValidateBackupTracker', name: string }> } }; export type GetRestoreStatusQueryVariables = Exact<{ id: Scalars['String']['input']; diff --git a/src/lib/graphql/queries/BackupQuery.ts b/src/lib/graphql/queries/BackupQuery.ts index b0927045..2bcdff99 100644 --- a/src/lib/graphql/queries/BackupQuery.ts +++ b/src/lib/graphql/queries/BackupQuery.ts @@ -15,6 +15,9 @@ export const VALIDATE_BACKUP = gql` id name } + missingTrackers { + name + } } } `; diff --git a/src/screens/settings/Backup.tsx b/src/screens/settings/Backup.tsx index 95d13658..8b0ffb60 100644 --- a/src/screens/settings/Backup.tsx +++ b/src/screens/settings/Backup.tsx @@ -22,6 +22,7 @@ import DialogActions from '@mui/material/DialogActions'; import Button from '@mui/material/Button'; import ListItem from '@mui/material/ListItem'; import { Link } from 'react-router-dom'; +import Stack from '@mui/material/Stack'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { makeToast } from '@/components/util/Toast'; import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext'; @@ -84,7 +85,7 @@ export function Backup() { const [currentBackupFile, setCurrentBackupFile] = useState(null); const [isInvalidBackupDialogOpen, setIsInvalidBackupDialogOpen] = useState(false); - const [missingSources, setMissingSources] = useState([]); + const [validationResult, setValidationResult] = useState(); const [, setTriggerReRender] = useState(0); @@ -142,8 +143,8 @@ export function Backup() { data: { validateBackup: validateBackupData }, } = await requestManager.validateBackupFile(file, { fetchPolicy: 'network-only' }).response; - if (validateBackupData.missingSources.length) { - setMissingSources([...validateBackupData.missingSources]); + if (validateBackupData.missingSources.length || validateBackupData.missingTrackers.length) { + setValidationResult(validateBackupData); setIsInvalidBackupDialogOpen(true); return false; } @@ -316,38 +317,77 @@ export function Backup() { {t('settings.backup.action.validate.dialog.title')} - - {missingSources.map(({ id, name }) => ( - - {`${name} (${id})`} - - ))} - + {!!validationResult?.missingSources.length && ( + + {validationResult?.missingSources.map(({ id, name }) => ( + + {`${name} (${id})`} + + ))} + + )} + {!!validationResult?.missingTrackers.length && ( + + {validationResult?.missingTrackers.map(({ name }) => ( + + {`${name}`} + + ))} + + )} - - - + + {!!validationResult?.missingSources.length && ( + + )} + {!!validationResult?.missingTrackers.length && ( + + )} + + + + + diff --git a/versionToServerVersionMapping.json b/versionToServerVersionMapping.json index 31580eff..6e57a38a 100644 --- a/versionToServerVersionMapping.json +++ b/versionToServerVersionMapping.json @@ -1,7 +1,7 @@ [ { "uiVersion": "PREVIEW", - "serverVersion": "r1514" + "serverVersion": "r1520" }, { "tag": "v1.0.0",