diff --git a/web/repertory/lib/helpers.dart b/web/repertory/lib/helpers.dart index 66b57206..c02d9070 100644 --- a/web/repertory/lib/helpers.dart +++ b/web/repertory/lib/helpers.dart @@ -107,6 +107,17 @@ Map createDefaultSettings(String mountType) { return {}; } +void displayAuthError() { + if (constants.navigatorKey.currentContext == null) { + return; + } + + displayErrorMessage( + constants.navigatorKey.currentContext!, + "Authentication failed", + ); +} + void displayErrorMessage(context, String text) { if (!context.mounted) { return; diff --git a/web/repertory/lib/models/mount.dart b/web/repertory/lib/models/mount.dart index 03b1a7a0..7b664786 100644 --- a/web/repertory/lib/models/mount.dart +++ b/web/repertory/lib/models/mount.dart @@ -180,6 +180,11 @@ class Mount with ChangeNotifier { return; } + if (response.statusCode == 500) { + displayAuthError(); + return; + } + if (response.statusCode != 200) { return; } diff --git a/web/repertory/lib/widgets/mount_settings.dart b/web/repertory/lib/widgets/mount_settings.dart index 04170bb5..80cdd391 100644 --- a/web/repertory/lib/widgets/mount_settings.dart +++ b/web/repertory/lib/widgets/mount_settings.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:repertory/constants.dart' as constants; import 'package:repertory/helpers.dart' - show getSettingDescription, getSettingValidators; + show convertAllToString, getSettingDescription, getSettingValidators; import 'package:repertory/models/mount.dart'; import 'package:repertory/models/mount_list.dart'; import 'package:repertory/settings.dart'; @@ -615,24 +615,41 @@ class _MountSettingsWidgetState extends State { void dispose() { if (!widget.isAdd) { var settings = widget.mount.mountConfig.settings; + Map changedSettings = {}; if (!DeepCollectionEquality().equals(widget.settings, settings)) { widget.settings.forEach((key, value) { if (!DeepCollectionEquality().equals(settings[key], value)) { if (value is Map) { + changedSettings[key] = {}; value.forEach((subKey, subValue) { if (!DeepCollectionEquality().equals( settings[key][subKey], subValue, )) { - widget.mount.setValue('$key.$subKey', subValue.toString()); + changedSettings[key][subKey] = subValue; } }); } else { - widget.mount.setValue(key, value.toString()); + changedSettings[key] = value; } } }); } + + if (changedSettings.isNotEmpty) { + convertAllToString(changedSettings).then((map) { + map.forEach((key, value) { + if (value is Map) { + value.forEach((subKey, subValue) { + widget.mount.setValue('$key.$subKey', subValue); + }); + return; + } + + widget.mount.setValue(key, value); + }); + }); + } } super.dispose(); diff --git a/web/repertory/lib/widgets/ui_settings.dart b/web/repertory/lib/widgets/ui_settings.dart index 9d06f912..7a1fac8f 100644 --- a/web/repertory/lib/widgets/ui_settings.dart +++ b/web/repertory/lib/widgets/ui_settings.dart @@ -8,6 +8,7 @@ import 'package:repertory/helpers.dart' show AuthenticationFailedException, convertAllToString, + displayAuthError, displayErrorMessage, getBaseUri, getSettingDescription, @@ -107,15 +108,6 @@ class _UISettingsWidgetState extends State { widget.settings, widget.origSettings, )) { - displayAuthError() { - if (constants.navigatorKey.currentContext != null) { - displayErrorMessage( - constants.navigatorKey.currentContext!, - "Authentication failed", - ); - } - } - convertAllToString(widget.settings) .then((map) async { try {