prevent duplicates
This commit is contained in:
parent
492ccfbdfb
commit
d209b52848
@ -16,6 +16,29 @@ class MountList with ChangeNotifier {
|
|||||||
UnmodifiableListView<MountConfig> get items =>
|
UnmodifiableListView<MountConfig> get items =>
|
||||||
UnmodifiableListView<MountConfig>(_mountList);
|
UnmodifiableListView<MountConfig>(_mountList);
|
||||||
|
|
||||||
|
bool hasBucketName(String mountType, String name, {String? excludeName}) {
|
||||||
|
return (excludeName == null
|
||||||
|
? items
|
||||||
|
: items.whereNot(
|
||||||
|
(item) =>
|
||||||
|
item.name.toLowerCase() == excludeName.toLowerCase(),
|
||||||
|
))
|
||||||
|
.firstWhereOrNull(
|
||||||
|
(item) =>
|
||||||
|
(item.settings["${mountType}Config"]["Bucket"] as String)
|
||||||
|
.toLowerCase() ==
|
||||||
|
name.toLowerCase(),
|
||||||
|
) !=
|
||||||
|
null;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hasConfigName(String name) {
|
||||||
|
return items.firstWhereOrNull(
|
||||||
|
(item) => item.name.toLowerCase() == name.toLowerCase(),
|
||||||
|
) !=
|
||||||
|
null;
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> _fetch() async {
|
Future<void> _fetch() async {
|
||||||
try {
|
try {
|
||||||
final response = await http.get(
|
final response = await http.get(
|
||||||
|
@ -145,7 +145,7 @@ class _AddMountScreenState extends State<AddMountScreen> {
|
|||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: Text(
|
content: Text(
|
||||||
"'$key' is not valid",
|
"Setting '$key' is not valid",
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -154,17 +154,11 @@ class _AddMountScreenState extends State<AddMountScreen> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final existingMount = mountList.items.firstWhereOrNull(
|
if (mountList.hasConfigName(_mountNameController.text)) {
|
||||||
(item) =>
|
|
||||||
item.name.toLowerCase() ==
|
|
||||||
_mountNameController.text.toLowerCase(),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (existingMount != null) {
|
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: Text(
|
content: Text(
|
||||||
"'${_mountNameController.text}' already exists",
|
"Configuration '${_mountNameController.text}' already exists",
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -172,6 +166,23 @@ class _AddMountScreenState extends State<AddMountScreen> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_mountType == "Sia" || _mountType == "S3") {
|
||||||
|
final bucket =
|
||||||
|
_settings[_mountType]!["${_mountType}Config"]["Bucket"]
|
||||||
|
as String;
|
||||||
|
if (mountList.hasBucketName(_mountType, bucket)) {
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(
|
||||||
|
content: Text(
|
||||||
|
"Bucket '$bucket' already exists",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mountList.add(
|
mountList.add(
|
||||||
_mountType,
|
_mountType,
|
||||||
_mountNameController.text,
|
_mountNameController.text,
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
import 'package:repertory/constants.dart' as constants;
|
import 'package:repertory/constants.dart' as constants;
|
||||||
import 'package:repertory/helpers.dart' show Validator, getSettingValidators;
|
import 'package:repertory/helpers.dart' show Validator, getSettingValidators;
|
||||||
import 'package:repertory/models/mount.dart';
|
import 'package:repertory/models/mount.dart';
|
||||||
|
import 'package:repertory/models/mount_list.dart';
|
||||||
import 'package:settings_ui/settings_ui.dart';
|
import 'package:settings_ui/settings_ui.dart';
|
||||||
|
|
||||||
class MountSettingsWidget extends StatefulWidget {
|
class MountSettingsWidget extends StatefulWidget {
|
||||||
@ -84,7 +86,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
|||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: Text(
|
content: Text(
|
||||||
"'$key' is not valid",
|
"Setting '$key' is not valid",
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -219,7 +221,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
|||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: Text(
|
content: Text(
|
||||||
"'$key' does not match",
|
"Setting '$key' does not match",
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -234,7 +236,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
|||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: Text(
|
content: Text(
|
||||||
"'$key' is not valid",
|
"Setting '$key' is not valid",
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -318,7 +320,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
|||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: Text(
|
content: Text(
|
||||||
"'$key' is not valid",
|
"Setting '$key' is not valid",
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -594,7 +596,18 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
|||||||
subValue,
|
subValue,
|
||||||
Icons.folder,
|
Icons.folder,
|
||||||
false,
|
false,
|
||||||
validators: getSettingValidators('$key.$subKey'),
|
validators: [
|
||||||
|
...getSettingValidators('$key.$subKey'),
|
||||||
|
(value) =>
|
||||||
|
!Provider.of<MountList>(
|
||||||
|
context,
|
||||||
|
listen: false,
|
||||||
|
).hasBucketName(
|
||||||
|
widget.mount.type,
|
||||||
|
subValue,
|
||||||
|
excludeName: widget.mount.name,
|
||||||
|
),
|
||||||
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -841,7 +854,18 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
|||||||
subValue,
|
subValue,
|
||||||
Icons.folder,
|
Icons.folder,
|
||||||
false,
|
false,
|
||||||
validators: getSettingValidators('$key.$subKey'),
|
validators: [
|
||||||
|
...getSettingValidators('$key.$subKey'),
|
||||||
|
(value) =>
|
||||||
|
!Provider.of<MountList>(
|
||||||
|
context,
|
||||||
|
listen: false,
|
||||||
|
).hasBucketName(
|
||||||
|
widget.mount.type,
|
||||||
|
subValue,
|
||||||
|
excludeName: widget.mount.name,
|
||||||
|
),
|
||||||
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -102,7 +102,7 @@ class _MountWidgetState extends State<MountWidget> {
|
|||||||
).showSnackBar(
|
).showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: const Text(
|
content: const Text(
|
||||||
"mount location is not valid",
|
"Mount location is not valid",
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -144,7 +144,7 @@ class _MountWidgetState extends State<MountWidget> {
|
|||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: const Text(
|
content: const Text(
|
||||||
"mount location is not set",
|
"Mount location is not set",
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user