[ui] Add auto-mount on first launch functionality #52

This commit is contained in:
2025-09-06 12:07:07 -05:00
parent 30633aa4ff
commit 1904bd868d
8 changed files with 142 additions and 3 deletions

View File

@@ -21,6 +21,7 @@ class Mount with ChangeNotifier {
refresh();
}
bool get autoStart => mountConfig.autoStart;
String? get bucket => mountConfig.bucket;
String get id => '${type}_$name';
bool? get mounted => mountConfig.mounted;
@@ -101,6 +102,35 @@ class Mount with ChangeNotifier {
}
}
Future<void> setMountAutoStart(bool autoStart) async {
try {
mountConfig.autoStart = autoStart;
final auth = await _auth.createAuth();
final response = await http.put(
Uri.parse(
Uri.encodeFull(
'${getBaseUri()}/api/v1/mount_location?auth=$auth&name=$name&type=$type&auto_start=$autoStart',
),
),
);
if (response.statusCode == 401) {
_auth.logoff();
return;
}
if (response.statusCode == 404) {
_mountList?.reset();
return;
}
return refresh();
} catch (e) {
debugPrint('$e');
}
}
Future<void> setMountLocation(String location) async {
try {
mountConfig.path = location;

View File

@@ -3,6 +3,7 @@ import 'package:repertory/helpers.dart' show initialCaps;
class MountConfig {
bool? mounted;
bool autoStart = false;
final String _name;
String path = '';
Map<String, dynamic> _settings = {};
@@ -30,6 +31,9 @@ class MountConfig {
}
void updateStatus(Map<String, dynamic> status) {
autoStart = status.containsKey('AutoStart')
? status['AutoStart'] as bool
: false;
path = status['Location'] as String;
mounted = status['Active'] as bool;
}

View File

@@ -35,6 +35,11 @@ class _MountWidgetState extends State<MountWidget>
);
final subStyle = textTheme.bodyMedium?.copyWith(color: scheme.onSurface);
final visualDensity = VisualDensity(
horizontal: -VisualDensity.maximumDensity,
vertical: -(VisualDensity.maximumDensity * 2.0),
);
return ConstrainedBox(
constraints: const BoxConstraints(minHeight: 120),
child: Card(
@@ -141,6 +146,43 @@ class _MountWidgetState extends State<MountWidget>
style: subStyle,
),
),
IntrinsicWidth(
child: Theme(
data: Theme.of(context).copyWith(
listTileTheme: const ListTileThemeData(
contentPadding: EdgeInsets.zero,
horizontalTitleGap: 0,
minLeadingWidth: 0,
minVerticalPadding: 0,
),
checkboxTheme: CheckboxThemeData(
materialTapTargetSize:
MaterialTapTargetSize.shrinkWrap,
visualDensity: visualDensity,
),
),
child: CheckboxListTile(
contentPadding: EdgeInsets.zero,
materialTapTargetSize:
MaterialTapTargetSize.shrinkWrap,
onChanged: (_) {},
title: Row(
mainAxisSize: MainAxisSize.min,
children: const [
Icon(
Icons.auto_mode,
size: constants.smallIconSize,
),
SizedBox(width: constants.paddingSmall),
Text('Auto-mount'),
SizedBox(width: constants.paddingSmall),
],
),
value: mount.autoStart,
visualDensity: visualDensity,
),
),
),
],
),
],