diff --git a/lib/rclone/overrides.ts b/lib/rclone/overrides.ts index 274ddb1..e13f5e6 100644 --- a/lib/rclone/overrides.ts +++ b/lib/rclone/overrides.ts @@ -1,3 +1,5 @@ +export const OWN_OAUTH_TYPES = ['drive', 'google photos'] + export const OVERRIDES = { alias: { Description: 'ALIAS', diff --git a/src/components/RemoteCreateDrawer.tsx b/src/components/RemoteCreateDrawer.tsx index 9e0cf63..59782e1 100644 --- a/src/components/RemoteCreateDrawer.tsx +++ b/src/components/RemoteCreateDrawer.tsx @@ -6,7 +6,7 @@ import { platform } from '@tauri-apps/plugin-os' import { ChevronDown, ChevronUp, RefreshCcwIcon } from 'lucide-react' import { type Key, startTransition, useCallback, useMemo, useState } from 'react' import rclone from '../../lib/rclone/client' -import { OVERRIDES } from '../../lib/rclone/overrides' +import { OVERRIDES, OWN_OAUTH_TYPES } from '../../lib/rclone/overrides' import type { BackendOption } from '../../types/rclone' import RemoteField from './RemoteField' @@ -67,6 +67,16 @@ export default function RemoteCreateDrawer({ [currentBackend, config.provider, config.type] ) + // Google Drive / Google Photos require the user's own OAuth credentials (rclone is retiring its + // shared client-id). Block creation until they're supplied. + const missingCredentials = useMemo( + () => + OWN_OAUTH_TYPES.includes(config.type) + ? ['client_id', 'client_secret'].filter((f) => !(config[f] || '').trim()) + : [], + [config] + ) + const createRemoteMutation = useMutation({ mutationFn: async ({ name, @@ -269,6 +279,7 @@ export default function RemoteCreateDrawer({ ) } - isRequired={option.Required} + isRequired={option.Required || requiresOwnCredentials} defaultValue={initialFieldValue} autoComplete="off" autoCapitalize="off" autoCorrect="off" spellCheck="false" - description={helpDescription} + description={requiresOwnCredentials ? undefined : helpDescription} isDisabled={isDisabled} /> )