From fe06f2efb3a101a2c5d8a33587c85deb4f3d170c Mon Sep 17 00:00:00 2001 From: Krille Date: Fri, 4 Oct 2024 10:04:09 +0200 Subject: [PATCH] chore: Follow up pick files with file selector --- lib/pages/chat/chat.dart | 2 +- lib/pages/chat_details/chat_details.dart | 2 +- lib/pages/new_group/new_group.dart | 2 +- lib/pages/new_space/new_space.dart | 2 +- lib/pages/settings/settings.dart | 5 ++- .../settings_emotes/settings_emotes.dart | 10 +++--- lib/pages/settings_style/settings_style.dart | 5 ++- lib/utils/file_selector.dart | 33 +++++++++++-------- 8 files changed, 36 insertions(+), 25 deletions(-) diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 4e45f01c7..69fd67062 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -508,7 +508,7 @@ class ChatController extends State final files = await selectFiles( context, allowMultiple: true, - extensions: imageExtensions, + type: FileSelectorType.images, ); if (files.isEmpty) return; diff --git a/lib/pages/chat_details/chat_details.dart b/lib/pages/chat_details/chat_details.dart index 3b1ea8da3..526d1261e 100644 --- a/lib/pages/chat_details/chat_details.dart +++ b/lib/pages/chat_details/chat_details.dart @@ -167,7 +167,7 @@ class ChatDetailsController extends State { final picked = await selectFiles( context, allowMultiple: false, - extensions: imageExtensions, + type: FileSelectorType.images, ); final pickedFile = picked.firstOrNull; if (pickedFile == null) return; diff --git a/lib/pages/new_group/new_group.dart b/lib/pages/new_group/new_group.dart index 393e88372..31beb6779 100644 --- a/lib/pages/new_group/new_group.dart +++ b/lib/pages/new_group/new_group.dart @@ -37,7 +37,7 @@ class NewGroupController extends State { void selectPhoto() async { final photo = await selectFiles( context, - extensions: imageExtensions, + type: FileSelectorType.images, allowMultiple: false, ); final bytes = await photo.singleOrNull?.readAsBytes(); diff --git a/lib/pages/new_space/new_space.dart b/lib/pages/new_space/new_space.dart index 0190f15ce..1f484cda8 100644 --- a/lib/pages/new_space/new_space.dart +++ b/lib/pages/new_space/new_space.dart @@ -34,7 +34,7 @@ class NewSpaceController extends State { void selectPhoto() async { final photo = await selectFiles( context, - extensions: imageExtensions, + type: FileSelectorType.images, ); final bytes = await photo.firstOrNull?.readAsBytes(); setState(() { diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index 455de997b..1d930910a 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -135,7 +135,10 @@ class SettingsController extends State { name: result.path, ); } else { - final result = await selectFiles(context, extensions: imageExtensions); + final result = await selectFiles( + context, + type: FileSelectorType.images, + ); final pickedFile = result.firstOrNull; if (pickedFile == null) return; file = MatrixFile( diff --git a/lib/pages/settings_emotes/settings_emotes.dart b/lib/pages/settings_emotes/settings_emotes.dart index 8a8eca430..59dade669 100644 --- a/lib/pages/settings_emotes/settings_emotes.dart +++ b/lib/pages/settings_emotes/settings_emotes.dart @@ -221,7 +221,10 @@ class EmotesSettingsController extends State { void imagePickerAction( ValueNotifier controller, ) async { - final result = await selectFiles(context, extensions: imageExtensions); + final result = await selectFiles( + context, + type: FileSelectorType.images, + ); final pickedFile = result.firstOrNull; if (pickedFile == null) return; var file = MatrixImageFile( @@ -278,10 +281,7 @@ class EmotesSettingsController extends State { future: () async { final result = await selectFiles( context, - extensions: [ - 'zip', - // TODO: add further encoders - ], + type: FileSelectorType.zip, ); if (result.isEmpty) return null; diff --git a/lib/pages/settings_style/settings_style.dart b/lib/pages/settings_style/settings_style.dart index 62ba84bf1..e63cb3d16 100644 --- a/lib/pages/settings_style/settings_style.dart +++ b/lib/pages/settings_style/settings_style.dart @@ -25,7 +25,10 @@ class SettingsStyleController extends State { void setWallpaper() async { final client = Matrix.of(context).client; - final picked = await selectFiles(context, extensions: imageExtensions); + final picked = await selectFiles( + context, + type: FileSelectorType.images, + ); final pickedFile = picked.firstOrNull; if (pickedFile == null) return; diff --git a/lib/utils/file_selector.dart b/lib/utils/file_selector.dart index 3bdcd82f9..27209f6d8 100644 --- a/lib/utils/file_selector.dart +++ b/lib/utils/file_selector.dart @@ -9,7 +9,7 @@ import 'package:fluffychat/widgets/app_lock.dart'; Future> selectFiles( BuildContext context, { String? title, - List? extensions, + FileSelectorType type = FileSelectorType.any, bool allowMultiple = false, }) async { if (!PlatformInfos.isLinux) { @@ -17,7 +17,8 @@ Future> selectFiles( FilePicker.platform.pickFiles( compressionQuality: 0, allowMultiple: allowMultiple, - allowedExtensions: extensions, + type: type.filePickerType, + allowedExtensions: type.extensions?.toList(), ), ); return result?.xFiles ?? []; @@ -28,7 +29,8 @@ Future> selectFiles( openFiles( confirmButtonText: title, acceptedTypeGroups: [ - if (extensions != null) XTypeGroup(extensions: extensions), + if (type != FileSelectorType.any) + XTypeGroup(extensions: type.extensions?.toList()), ], ), ); @@ -37,7 +39,8 @@ Future> selectFiles( openFile( confirmButtonText: title, acceptedTypeGroups: [ - if (extensions != null) XTypeGroup(extensions: extensions), + if (type != FileSelectorType.any) + XTypeGroup(extensions: type.extensions?.toList()), ], ), ); @@ -45,13 +48,15 @@ Future> selectFiles( return [file]; } -const imageExtensions = [ - 'png', - 'PNG', - 'jpg', - 'JPG', - 'jpeg', - 'JPEG', - 'webp', - 'WebP', -]; +enum FileSelectorType { + any(null, FileType.any), + images( + {'png', 'PNG', 'jpg', 'JPG', 'jpeg', 'JPEG', 'webp', 'WebP'}, + FileType.image, + ), + zip({'zip', 'ZIP'}, FileType.custom); + + const FileSelectorType(this.extensions, this.filePickerType); + final Set? extensions; + final FileType filePickerType; +}