diff --git a/src/components/settings_modal/settings_modal.js b/src/components/settings_modal/settings_modal.js
index 7f6ccccb..f88184ca 100644
--- a/src/components/settings_modal/settings_modal.js
+++ b/src/components/settings_modal/settings_modal.js
@@ -19,6 +19,9 @@ import {
faWindowMinimize
} from '@fortawesome/free-regular-svg-icons'
+const PLEROMAFE_SETTINGS_MAJOR_VERSION = 1
+const PLEROMAFE_SETTINGS_MINOR_VERSION = 0
+
library.add(
faTimes,
faWindowMinimize,
@@ -65,12 +68,52 @@ const SettingsModal = {
this.$store.dispatch('togglePeekSettingsModal')
},
importValidator (data) {
- return data._pleroma_settings_version[0] === 1
+ if (!Array.isArray(data._pleroma_settings_version)) {
+ return {
+ messageKey: 'settings.file_import_export.invalid_file'
+ }
+ }
+
+ const [major, minor] = data._pleroma_settings_version
+
+ if (major > PLEROMAFE_SETTINGS_MAJOR_VERSION) {
+ return {
+ messageKey: 'settings.file_export_import.errors.file_too_new',
+ messageArgs: {
+ fileMajor: major,
+ feMajor: PLEROMAFE_SETTINGS_MAJOR_VERSION
+ }
+ }
+ }
+
+ if (major < PLEROMAFE_SETTINGS_MAJOR_VERSION) {
+ return {
+ messageKey: 'settings.file_export_import.errors.file_too_old',
+ messageArgs: {
+ fileMajor: major,
+ feMajor: PLEROMAFE_SETTINGS_MAJOR_VERSION
+ }
+ }
+ }
+
+ if (minor > PLEROMAFE_SETTINGS_MINOR_VERSION) {
+ this.$store.dispatch('pushGlobalNotice', {
+ level: 'warning',
+ messageKey: 'settings.file_export_import.errors.file_slightly_new',
+ })
+ }
+
+ return true
},
- onImportFailure () {
- this.$store.dispatch('pushGlobalNotice', { messageKey: 'settings.invalid_settings_imported', level: 'error' })
+ onImportFailure (result) {
+ if (result.error) {
+ this.$store.dispatch('pushGlobalNotice', { messageKey: 'settings.invalid_settings_imported', level: 'error' })
+ } else {
+ this.$store.dispatch('pushGlobalNotice', { ...result.validationResult, level: 'error' })
+ }
},
onImport (data) {
+ if (data)
this.$store.dispatch('loadSettings', data)
},
restore () {
@@ -99,7 +142,10 @@ const SettingsModal = {
)
}
const clone = cloneDeep(sample)
- clone._pleroma_settings_version = [1, 0]
+ clone._pleroma_settings_version = [
+ PLEROMAFE_SETTINGS_MAJOR_VERSION,
+ PLEROMAFE_SETTINGS_MINOR_VERSION
+ ]
return clone
}
},
diff --git a/src/components/settings_modal/settings_modal.vue b/src/components/settings_modal/settings_modal.vue
index a142bcd1..c37608e2 100644
--- a/src/components/settings_modal/settings_modal.vue
+++ b/src/components/settings_modal/settings_modal.vue
@@ -67,7 +67,7 @@
class="btn button-default"
:title="$t('general.close')"
>
- {{ $t("settings.backup_restore") }}
+ {{ $t("settings.file_export_import.backup_restore") }}
@@ -85,7 +85,7 @@
{{ $t("settings.backup_settings") }}
+ />{{ $t("settings.file_export_import.backup_settings") }}
{{ $t("settings.backup_settings_theme") }}
+ />{{ $t("settings.file_export_import.backup_settings_theme") }}
{{ $t("settings.restore_settings") }}
+ />{{ $t("settings.file_export_import.restore_settings") }}
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 049d3d11..1c7fe943 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -357,7 +357,6 @@
"interface": "Interface",
"interfaceLanguage": "Interface language",
"invalid_theme_imported": "The selected file is not a supported Pleroma theme. No changes to your theme were made.",
- "invalid_settings_imported": "The selected file is not a supported Pleroma settings backup. No changes were made.",
"limited_availability": "Unavailable in your browser",
"links": "Links",
"lock_account_description": "Restrict your account to approved followers only",
@@ -365,10 +364,18 @@
"loop_video_silent_only": "Loop only videos without sound (i.e. Mastodon's \"gifs\")",
"mutes_tab": "Mutes",
"play_videos_in_modal": "Play videos in a popup frame",
- "backup_restore": "Settings backup",
- "backup_settings": "Backup settings to file",
- "backup_settings_theme": "Backup settings and theme to file",
- "restore_settings": "Restore settings from file",
+ "file_export_import": {
+ "backup_restore": "Settings backup",
+ "backup_settings": "Backup settings to file",
+ "backup_settings_theme": "Backup settings and theme to file",
+ "restore_settings": "Restore settings from file",
+ "errors": {
+ "invalid_file": "The selected file is not a supported Pleroma settings backup. No changes were made.",
+ "file_too_new": "Incompatile major version: {fileMajor}, this PleromaFE (settings ver {feMajor}) is too old to handle it",
+ "file_too_old": "Incompatile major version: {fileMajor}, file version is too old and not supported (min. set. ver. {feMajor})",
+ "file_slightly_new": "File minor version is different, some settings might not load"
+ }
+ },
"profile_fields": {
"label": "Profile metadata",
"add_field": "Add Field",