diff --git a/src/renderer/components/DataSettings/DataSettings.vue b/src/renderer/components/DataSettings/DataSettings.vue index f4b1dd004d4d1..97b284e7ed5cd 100644 --- a/src/renderer/components/DataSettings/DataSettings.vue +++ b/src/renderer/components/DataSettings/DataSettings.vue @@ -65,6 +65,24 @@ @click="showExportSearchHistoryPrompt = true" /> +

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

+ + + + { + const entry = JSON.parse(rawEntry) + if (typeof entry._id !== 'string' || !Object.hasOwn(entry, 'value')) { + showToast(t('Settings.Data Settings.Setting object has insufficient data, skipping item')) + console.error('Missing keys:', entry) + } else if (!Object.hasOwn(currentSettings, entry._id)) { + const message = t('Settings.Data Settings.Unknown setting key', { key: entry._id }) + showToast(message) + } else if (NON_TRANSFERABLE_SETTINGS.has(entry._id)) { + const message = t('Settings.Data Settings.Non-transferable setting key', { key: entry._id }) + showToast(message) + } else { + const currentValue = currentSettings[entry._id] + const areValuesEqual = currentValue === entry.value || + (typeof entry.value === 'object' && JSON.stringify(currentValue) === JSON.stringify(entry.value)) + if (!areValuesEqual) { + const updaterId = defaultUpdaterId(entry._id) + store.dispatch(updaterId, entry.value) + } + } + }) + + showToast(t('Settings.Data Settings.All settings have been successfully imported')) +} + +async function exportSettings() { + const settingDb = Object.entries(store.state.settings) + .filter(([_id]) => !NON_TRANSFERABLE_SETTINGS.has(_id)) + .map(([_id, value]) => JSON.stringify({ _id, value })) + .join('\n') + '\n' + const dateStr = getTodayDateStrLocalTimezone() + const exportFileName = 'freetube-settings-' + dateStr + '.db' + + await promptAndWriteToFile( + exportFileName, + settingDb, + t('Settings.Data Settings.Settings File'), + 'application/x-freetube-db', + '.db', + t('Settings.Data Settings.All settings have been successfully exported') + ) +} + +// #endregion settings +