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