Skip to content

Commit 4715892

Browse files
committed
Drive list QoL improvements
1 parent 5d59840 commit 4715892

File tree

5 files changed

+27
-13
lines changed

5 files changed

+27
-13
lines changed

devtools_options.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
description: This file stores settings for Dart & Flutter DevTools.
2+
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
3+
extensions:

lib/backend/drive_provider.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ class DriveProvider with ChangeNotifier {
1515

1616
List<UDisksBlockDevice> get blockDevices => List.of(_blockDevices);
1717
List<UDisksDrive> get drives => List.of(_drives);
18+
List<String> get supportedFilesystems =>
19+
List.of(_client.supportedFilesystems);
1820

1921
Future<void> init() async {
2022
await _client.connect();

lib/widgets/drive_list.dart

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@ import 'dart:async';
22
import 'dart:convert';
33

44
import 'package:files/backend/providers.dart';
5+
import 'package:files/backend/workspace.dart';
56
import 'package:files/widgets/separated_flex.dart';
67
import 'package:filesize/filesize.dart';
78
import 'package:flutter/material.dart';
9+
import 'package:path/path.dart' as p;
810
import 'package:udisks/udisks.dart';
911
import 'package:yaru/yaru.dart';
1012

1113
class DriveList extends StatelessWidget {
12-
const DriveList({this.onDriveTap, super.key});
14+
const DriveList({required this.workspace, super.key});
1315

14-
final ValueChanged<String>? onDriveTap;
16+
final WorkspaceController workspace;
1517

1618
@override
1719
Widget build(BuildContext context) {
@@ -29,11 +31,11 @@ class DriveList extends StatelessWidget {
2931
!e.userspaceMountOptions.contains('x-gvfs-hide'),
3032
)
3133
.where((e) => !e.hintIgnore && e.filesystem != null)
34+
.where(
35+
(e) => driveProvider.supportedFilesystems.contains(e.idType),
36+
)
3237
.map(
33-
(e) => _DriveTile(
34-
blockDevice: e,
35-
onTap: onDriveTap,
36-
),
38+
(e) => _DriveTile(blockDevice: e, workspace: workspace),
3739
)
3840
.toList(),
3941
);
@@ -45,10 +47,11 @@ class DriveList extends StatelessWidget {
4547
class _DriveTile extends StatefulWidget {
4648
const _DriveTile({
4749
required this.blockDevice,
48-
this.onTap,
50+
required this.workspace,
4951
});
52+
5053
final UDisksBlockDevice blockDevice;
51-
final ValueChanged<String>? onTap;
54+
final WorkspaceController workspace;
5255

5356
@override
5457
State<_DriveTile> createState() => _DriveTileState();
@@ -118,6 +121,13 @@ class _DriveTileState extends State<_DriveTile> {
118121
? YaruOptionButton(
119122
onPressed: () async {
120123
await widget.blockDevice.filesystem!.unmount();
124+
if (p.isWithin(mountPoint!, widget.workspace.currentDir) ||
125+
p.equals(mountPoint!, widget.workspace.currentDir)) {
126+
await widget.workspace.changeCurrentDir(
127+
folderProvider.destinations.first.path,
128+
);
129+
}
130+
121131
setState(() {});
122132
},
123133
style: OutlinedButton.styleFrom(
@@ -132,7 +142,7 @@ class _DriveTileState extends State<_DriveTile> {
132142
setState(() {});
133143
}
134144

135-
widget.onTap?.call(mountPoint!);
145+
await widget.workspace.changeCurrentDir(mountPoint!);
136146
},
137147
),
138148
);

lib/widgets/side_pane.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,11 @@ class _SidePaneState extends State<SidePane> {
5858
child: Material(
5959
color: Theme.of(context).colorScheme.surface,
6060
child: ListView.separated(
61-
padding: const EdgeInsets.only(top: 16),
61+
padding: const EdgeInsets.only(top: 16, bottom: 16),
6262
itemCount: widget.destinations.length + 1,
6363
separatorBuilder: (context, index) {
6464
if (index == widget.destinations.length - 1) {
65-
return const Divider();
65+
return const Divider(height: 32);
6666
}
6767

6868
return SizedBox(
@@ -71,7 +71,7 @@ class _SidePaneState extends State<SidePane> {
7171
},
7272
itemBuilder: (context, index) {
7373
if (index == widget.destinations.length) {
74-
return DriveList(onDriveTap: widget.workspace.changeCurrentDir);
74+
return DriveList(workspace: widget.workspace);
7575
}
7676

7777
return ContextMenu(

lib/widgets/workspace.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,6 @@ class _WorkspaceTopbar extends StatelessWidget {
466466
case WorkspaceView.grid:
467467
return YaruIcons.app_grid;
468468
case WorkspaceView.table:
469-
default:
470469
return YaruIcons.unordered_list;
471470
}
472471
}

0 commit comments

Comments
 (0)