From bffdca308d7edc9a21b8a271831f25b7ebe8ff4f Mon Sep 17 00:00:00 2001 From: David Date: Sun, 10 May 2026 17:27:02 +0200 Subject: [PATCH 01/19] Add import/export settings buttons --- .../components/DataSettings/DataSettings.vue | 78 +++++++++++++++++++ src/renderer/store/modules/settings.js | 7 ++ static/locales/en-US.yaml | 8 ++ 3 files changed, 93 insertions(+) diff --git a/src/renderer/components/DataSettings/DataSettings.vue b/src/renderer/components/DataSettings/DataSettings.vue index 9228ded2fd876..310be0d796e61 100644 --- a/src/renderer/components/DataSettings/DataSettings.vue +++ b/src/renderer/components/DataSettings/DataSettings.vue @@ -65,6 +65,19 @@ @click="showExportSearchHistoryPrompt = true" /> +

+ {{ t('Settings') }} +

+ + + + } */ +const settingsEntries = computed(() => { + return store.getters.getUserSettings +}) + +async function importSettings() { + let response + try { + response = await readFileWithPicker( + t('Settings.Data Settings.Settings File'), + { + 'application/x-freetube-db': '.db', + 'application/json': '.json' + }, + IMPORT_DIRECTORY_ID, + START_IN_DIRECTORY + ) + } catch (err) { + const message = t('Settings.Data Settings.Unable to read file') + showToast(`${message}: ${err}`) + return + } + + if (response === null) { + return + } + + const { content } = response + const settings = JSON.parse(content) + + const settingsDb = settingsEntries.value + + for (const [key, value] of Object.entries(settings)) { + if (Object.hasOwn(settingsDb, key)) { + const updaterId = await store.dispatch('getDefaultUpdaterId', key) + await store.dispatch(updaterId, value) + } else { + const message = `${t('Settings.Data Settings.Unknown setting key')}: ${key}` + showToast(message) + } + } + + showToast(t('Settings.Data Settings.All settings have been successfully imported')) +} + +async function exportSettings() { + const settingsDb = JSON.stringify(settingsEntries.value) + const dateStr = getTodayDateStrLocalTimezone() + const exportFileName = 'freetube-settings-' + dateStr + '.db' + + await promptAndWriteToFile( + exportFileName, + settingsDb, + t('Settings.Data Settings.Settings File'), + 'application/x-freetube-db', + '.db', + t('Settings.Data Settings.All settings have been successfully exported') + ) +} + +// #endregion settings +