From aa5309c54fd53d6f5ea494e375d948081ca52b73 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Thu, 16 Jul 2026 21:26:35 -0700 Subject: [PATCH] persist rescan toggle --- .../tag-editor/hooks/use-metadata-editor.ts | 24 +++++++++++++++---- src/renderer/store/settings.store.ts | 2 ++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/renderer/features/tag-editor/hooks/use-metadata-editor.ts b/src/renderer/features/tag-editor/hooks/use-metadata-editor.ts index 665e13b41..1517215fa 100644 --- a/src/renderer/features/tag-editor/hooks/use-metadata-editor.ts +++ b/src/renderer/features/tag-editor/hooks/use-metadata-editor.ts @@ -50,7 +50,7 @@ interface UseMetadataEditorArgs { export const useMetadataEditor = ({ browser, songs: songsProp, utils }: UseMetadataEditorArgs) => { const { t } = useTranslation(); const server = useCurrentServer(); - const { favoriteValues, multiValueFields } = useTagEditorSettings(); + const { favoriteValues, multiValueFields, triggerRescan } = useTagEditorSettings(); const { setSettings } = useSettingsStoreActions(); const [isLoading, setIsLoading] = useState(true); @@ -58,7 +58,6 @@ export const useMetadataEditor = ({ browser, songs: songsProp, utils }: UseMetad const [error, setError] = useState(null); const [readWarning, setReadWarning] = useState(null); const [resolvedSongs, setResolvedSongs] = useState([]); - const [rescan, setRescan] = useState(true); const [isSaving, setIsSaving] = useState(false); const [tagSummary, setTagSummary] = useState>({}); const [editedFields, setEditedFields] = useState>({}); @@ -68,6 +67,11 @@ export const useMetadataEditor = ({ browser, songs: songsProp, utils }: UseMetad const [artworkDisplayUrl, setArtworkDisplayUrl] = useState(null); const [artworkOp, setArtworkOp] = useState(null); + const setRescan = useCallback( + (value: boolean) => setSettings({ tagEditor: { triggerRescan: value } }), + [setSettings], + ); + /** * Merges `tagSummary` (on-disk values) and `editedFields` (unsaved edits) into * `displayFields`. Keys present in `tagSummary` with a `null` value (differing @@ -331,7 +335,7 @@ export const useMetadataEditor = ({ browser, songs: songsProp, utils }: UseMetad await browser?.clearCache(); } - if (rescan && server) { + if (triggerRescan && server) { try { await controller.refreshItems({ apiClientProps: { serverId: server.id }, @@ -347,7 +351,17 @@ export const useMetadataEditor = ({ browser, songs: songsProp, utils }: UseMetad setLoadProgress(null); setIsSaving(false); } - }, [artworkOp, browser, editedFields, removedKeys, rescan, resolvedSongs, server, t, utils]); + }, [ + artworkOp, + browser, + editedFields, + removedKeys, + resolvedSongs, + server, + t, + triggerRescan, + utils, + ]); /** Known tags not yet present in `displayFields`, sorted alphabetically for the add-field dropdown. */ const availableToAdd = useMemo( @@ -387,7 +401,7 @@ export const useMetadataEditor = ({ browser, songs: songsProp, utils }: UseMetad mixedPlaceholder, multiValueKeys, readWarning, - rescan, + rescan: triggerRescan, setRescan, showRemoveArtworkButton, sortedFieldEntries, diff --git a/src/renderer/store/settings.store.ts b/src/renderer/store/settings.store.ts index 04667ed64..7c3a66a7d 100644 --- a/src/renderer/store/settings.store.ts +++ b/src/renderer/store/settings.store.ts @@ -747,6 +747,7 @@ const AutoDJSettingsSchema = z.object({ const TagEditorSettingsSchema = z.object({ favoriteValues: z.record(z.string(), z.array(z.string())), multiValueFields: z.array(z.string()), + triggerRescan: z.boolean(), }); /** @@ -1997,6 +1998,7 @@ const initialState: SettingsState = { tagEditor: { favoriteValues: {}, multiValueFields: ['artist', 'albumArtist', 'genre', 'composer', 'lyricist'], + triggerRescan: true, }, visualizer: { audiomotionanalyzer: {