Compare commits

..

No commits in common. "05f323665ac630e5bab23c4bff0df95342c77e36" and "492ccfbdfb10ff3ccbb60912949e95fb1846203b" have entirely different histories.

5 changed files with 31 additions and 93 deletions

View File

@ -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) {

View File

@ -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)

View File

@ -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 =>

View File

@ -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;

View File

@ -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,
), ),
), ),