Skip to content

Commit

Permalink
chore: Follow up pick files with file selector
Browse files Browse the repository at this point in the history
  • Loading branch information
krille-chan committed Oct 4, 2024
1 parent 44bd4db commit fe06f2e
Show file tree
Hide file tree
Showing 8 changed files with 36 additions and 25 deletions.
2 changes: 1 addition & 1 deletion lib/pages/chat/chat.dart
Original file line number Diff line number Diff line change
Expand Up @@ -508,7 +508,7 @@ class ChatController extends State<ChatPageWithRoom>
final files = await selectFiles(
context,
allowMultiple: true,
extensions: imageExtensions,
type: FileSelectorType.images,
);
if (files.isEmpty) return;

Expand Down
2 changes: 1 addition & 1 deletion lib/pages/chat_details/chat_details.dart
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ class ChatDetailsController extends State<ChatDetails> {
final picked = await selectFiles(
context,
allowMultiple: false,
extensions: imageExtensions,
type: FileSelectorType.images,
);
final pickedFile = picked.firstOrNull;
if (pickedFile == null) return;
Expand Down
2 changes: 1 addition & 1 deletion lib/pages/new_group/new_group.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class NewGroupController extends State<NewGroup> {
void selectPhoto() async {
final photo = await selectFiles(
context,
extensions: imageExtensions,
type: FileSelectorType.images,
allowMultiple: false,
);
final bytes = await photo.singleOrNull?.readAsBytes();
Expand Down
2 changes: 1 addition & 1 deletion lib/pages/new_space/new_space.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class NewSpaceController extends State<NewSpace> {
void selectPhoto() async {
final photo = await selectFiles(
context,
extensions: imageExtensions,
type: FileSelectorType.images,
);
final bytes = await photo.firstOrNull?.readAsBytes();
setState(() {
Expand Down
5 changes: 4 additions & 1 deletion lib/pages/settings/settings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,10 @@ class SettingsController extends State<Settings> {
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(
Expand Down
10 changes: 5 additions & 5 deletions lib/pages/settings_emotes/settings_emotes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,10 @@ class EmotesSettingsController extends State<EmotesSettings> {
void imagePickerAction(
ValueNotifier<ImagePackImageContent?> 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(
Expand Down Expand Up @@ -278,10 +281,7 @@ class EmotesSettingsController extends State<EmotesSettings> {
future: () async {
final result = await selectFiles(
context,
extensions: [
'zip',
// TODO: add further encoders
],
type: FileSelectorType.zip,
);

if (result.isEmpty) return null;
Expand Down
5 changes: 4 additions & 1 deletion lib/pages/settings_style/settings_style.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ class SettingsStyleController extends State<SettingsStyle> {

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;

Expand Down
33 changes: 19 additions & 14 deletions lib/utils/file_selector.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,16 @@ import 'package:fluffychat/widgets/app_lock.dart';
Future<List<XFile>> selectFiles(
BuildContext context, {
String? title,
List<String>? extensions,
FileSelectorType type = FileSelectorType.any,
bool allowMultiple = false,
}) async {
if (!PlatformInfos.isLinux) {
final result = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
compressionQuality: 0,
allowMultiple: allowMultiple,
allowedExtensions: extensions,
type: type.filePickerType,
allowedExtensions: type.extensions?.toList(),
),
);
return result?.xFiles ?? [];
Expand All @@ -28,7 +29,8 @@ Future<List<XFile>> selectFiles(
openFiles(
confirmButtonText: title,
acceptedTypeGroups: [
if (extensions != null) XTypeGroup(extensions: extensions),
if (type != FileSelectorType.any)
XTypeGroup(extensions: type.extensions?.toList()),
],
),
);
Expand All @@ -37,21 +39,24 @@ Future<List<XFile>> selectFiles(
openFile(
confirmButtonText: title,
acceptedTypeGroups: [
if (extensions != null) XTypeGroup(extensions: extensions),
if (type != FileSelectorType.any)
XTypeGroup(extensions: type.extensions?.toList()),
],
),
);
if (file == null) return [];
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<String>? extensions;
final FileType filePickerType;
}

0 comments on commit fe06f2e

Please sign in to comment.