Compare commits
4 Commits
492ccfbdfb
...
05f323665a
Author | SHA1 | Date | |
---|---|---|---|
05f323665a | |||
349bede3b3 | |||
1a7dc51c4b | |||
d209b52848 |
@ -16,6 +16,31 @@ class MountList with ChangeNotifier {
|
||||
UnmodifiableListView<MountConfig> get items =>
|
||||
UnmodifiableListView<MountConfig>(_mountList);
|
||||
|
||||
bool hasBucketName(String mountType, String bucket, {String? excludeName}) {
|
||||
final list = items.where(
|
||||
(item) => item.type.toLowerCase() == mountType.toLowerCase(),
|
||||
);
|
||||
|
||||
return (excludeName == null
|
||||
? list
|
||||
: list.whereNot(
|
||||
(item) =>
|
||||
item.name.toLowerCase() == excludeName.toLowerCase(),
|
||||
))
|
||||
.firstWhereOrNull((MountConfig item) {
|
||||
return item.bucket != null &&
|
||||
item.bucket!.toLowerCase() == bucket.toLowerCase();
|
||||
}) !=
|
||||
null;
|
||||
}
|
||||
|
||||
bool hasConfigName(String name) {
|
||||
return items.firstWhereOrNull(
|
||||
(item) => item.name.toLowerCase() == name.toLowerCase(),
|
||||
) !=
|
||||
null;
|
||||
}
|
||||
|
||||
Future<void> _fetch() async {
|
||||
try {
|
||||
final response = await http.get(
|
||||
@ -66,10 +91,13 @@ class MountList with ChangeNotifier {
|
||||
),
|
||||
);
|
||||
|
||||
return _fetch();
|
||||
_mountList = [];
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
debugPrint('$e');
|
||||
}
|
||||
|
||||
return _fetch();
|
||||
}
|
||||
|
||||
void remove(String name) {
|
||||
|
@ -1,4 +1,3 @@
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
@ -133,11 +132,8 @@ class _AddMountScreenState extends State<AddMountScreen> {
|
||||
Builder(
|
||||
builder: (context) {
|
||||
return ElevatedButton.icon(
|
||||
onPressed: () {
|
||||
final mountList = Provider.of<MountList>(
|
||||
context,
|
||||
listen: false,
|
||||
);
|
||||
onPressed: () async {
|
||||
final mountList = Provider.of<MountList>(context);
|
||||
|
||||
List<String> failed = [];
|
||||
if (!validateSettings(_settings[_mountType]!, failed)) {
|
||||
@ -145,7 +141,7 @@ class _AddMountScreenState extends State<AddMountScreen> {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
"'$key' is not valid",
|
||||
"Setting '$key' is not valid",
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
@ -154,17 +150,11 @@ class _AddMountScreenState extends State<AddMountScreen> {
|
||||
return;
|
||||
}
|
||||
|
||||
final existingMount = mountList.items.firstWhereOrNull(
|
||||
(item) =>
|
||||
item.name.toLowerCase() ==
|
||||
_mountNameController.text.toLowerCase(),
|
||||
);
|
||||
|
||||
if (existingMount != null) {
|
||||
if (mountList.hasConfigName(_mountNameController.text)) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
"'${_mountNameController.text}' already exists",
|
||||
"Configuration name '${_mountNameController.text}' already exists",
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
@ -172,12 +162,32 @@ class _AddMountScreenState extends State<AddMountScreen> {
|
||||
return;
|
||||
}
|
||||
|
||||
mountList.add(
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
await mountList.add(
|
||||
_mountType,
|
||||
_mountNameController.text,
|
||||
_settings[_mountType]!,
|
||||
);
|
||||
|
||||
if (!context.mounted) {
|
||||
return;
|
||||
}
|
||||
Navigator.pop(context);
|
||||
},
|
||||
label: const Text('Add'),
|
||||
@ -196,12 +206,9 @@ class _AddMountScreenState extends State<AddMountScreen> {
|
||||
final changed = _mountType != mountType;
|
||||
|
||||
_mountType = mountType;
|
||||
_mountNameController.text =
|
||||
(mountType == 'Sia' && changed)
|
||||
? 'default'
|
||||
: changed
|
||||
? ''
|
||||
: _mountNameController.text;
|
||||
if (changed) {
|
||||
_mountNameController.text = mountType == 'Sia' ? 'default' : '';
|
||||
}
|
||||
|
||||
_mount =
|
||||
(_mountNameController.text.isEmpty)
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:repertory/helpers.dart' show initialCaps;
|
||||
|
||||
class MountConfig {
|
||||
final String _name;
|
||||
@ -15,6 +16,8 @@ class MountConfig {
|
||||
}
|
||||
}
|
||||
|
||||
String? get bucket =>
|
||||
_settings['${initialCaps(_type)}Config']?["Bucket"] as String;
|
||||
String get name => _name;
|
||||
String get path => _path;
|
||||
UnmodifiableMapView<String, dynamic> get settings =>
|
||||
|
@ -1,9 +1,11 @@
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:repertory/constants.dart' as constants;
|
||||
import 'package:repertory/helpers.dart' show Validator, getSettingValidators;
|
||||
import 'package:repertory/models/mount.dart';
|
||||
import 'package:repertory/models/mount_list.dart';
|
||||
import 'package:settings_ui/settings_ui.dart';
|
||||
|
||||
class MountSettingsWidget extends StatefulWidget {
|
||||
@ -84,7 +86,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
"'$key' is not valid",
|
||||
"Setting '$key' is not valid",
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
@ -219,7 +221,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
"'$key' does not match",
|
||||
"Setting '$key' does not match",
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
@ -234,7 +236,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
"'$key' is not valid",
|
||||
"Setting '$key' is not valid",
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
@ -318,7 +320,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
"'$key' is not valid",
|
||||
"Setting '$key' is not valid",
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
@ -594,7 +596,18 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
subValue,
|
||||
Icons.folder,
|
||||
false,
|
||||
validators: getSettingValidators('$key.$subKey'),
|
||||
validators: [
|
||||
...getSettingValidators('$key.$subKey'),
|
||||
(value) =>
|
||||
!Provider.of<MountList>(
|
||||
context,
|
||||
listen: false,
|
||||
).hasBucketName(
|
||||
widget.mount.type,
|
||||
value,
|
||||
excludeName: widget.mount.name,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
});
|
||||
@ -841,7 +854,18 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
subValue,
|
||||
Icons.folder,
|
||||
false,
|
||||
validators: getSettingValidators('$key.$subKey'),
|
||||
validators: [
|
||||
...getSettingValidators('$key.$subKey'),
|
||||
(value) =>
|
||||
!Provider.of<MountList>(
|
||||
context,
|
||||
listen: false,
|
||||
).hasBucketName(
|
||||
widget.mount.type,
|
||||
value,
|
||||
excludeName: widget.mount.name,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
break;
|
||||
|
@ -102,7 +102,7 @@ class _MountWidgetState extends State<MountWidget> {
|
||||
).showSnackBar(
|
||||
SnackBar(
|
||||
content: const Text(
|
||||
"mount location is not valid",
|
||||
"Mount location is not valid",
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
@ -144,7 +144,7 @@ class _MountWidgetState extends State<MountWidget> {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: const Text(
|
||||
"mount location is not set",
|
||||
"Mount location is not set",
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
|
Loading…
x
Reference in New Issue
Block a user