Skip to content

Commit

Permalink
refactor: Use file selector on linux
Browse files Browse the repository at this point in the history
  • Loading branch information
krille-chan committed Oct 3, 2024
1 parent cdece9b commit fc959ce
Show file tree
Hide file tree
Showing 12 changed files with 144 additions and 89 deletions.
28 changes: 10 additions & 18 deletions lib/pages/chat/chat.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import 'package:collection/collection.dart';
import 'package:desktop_drop/desktop_drop.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:go_router/go_router.dart';
Expand All @@ -29,11 +28,11 @@ import 'package:fluffychat/pages/chat/event_info_dialog.dart';
import 'package:fluffychat/pages/chat/recording_dialog.dart';
import 'package:fluffychat/pages/chat_details/chat_details.dart';
import 'package:fluffychat/utils/error_reporter.dart';
import 'package:fluffychat/utils/file_selector.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/filtered_timeline_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/matrix.dart';
import '../../utils/account_bundles.dart';
import '../../utils/localized_exception_extension.dart';
Expand Down Expand Up @@ -481,17 +480,12 @@ class ChatController extends State<ChatPageWithRoom>
}

void sendFileAction() async {
final result = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
compressionQuality: 0,
allowMultiple: true,
),
);
if (result == null || result.files.isEmpty) return;
final files = await selectFiles(context, allowMultiple: true);
if (files.isEmpty) return;
await showAdaptiveDialog(
context: context,
builder: (c) => SendFileDialog(
files: result.xFiles,
files: files,
room: room,
outerContext: context,
),
Expand All @@ -511,19 +505,17 @@ class ChatController extends State<ChatPageWithRoom>
}

void sendImageAction() async {
final result = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
compressionQuality: 0,
type: FileType.image,
allowMultiple: true,
),
final files = await selectFiles(
context,
allowMultiple: true,
extensions: imageExtensions,
);
if (result == null || result.files.isEmpty) return;
if (files.isEmpty) return;

await showAdaptiveDialog(
context: context,
builder: (c) => SendFileDialog(
files: result.xFiles,
files: files,
room: room,
outerContext: context,
),
Expand Down
16 changes: 7 additions & 9 deletions lib/pages/chat_details/chat_details.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import 'package:flutter/material.dart';

import 'package:adaptive_dialog/adaptive_dialog.dart';
import 'package:collection/collection.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:go_router/go_router.dart';
Expand All @@ -11,9 +10,9 @@ import 'package:matrix/matrix.dart';

import 'package:fluffychat/pages/chat_details/chat_details_view.dart';
import 'package:fluffychat/pages/settings/settings.dart';
import 'package:fluffychat/utils/file_selector.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/matrix.dart';

enum AliasActions { copy, delete, setCanonical }
Expand Down Expand Up @@ -165,16 +164,15 @@ class ChatDetailsController extends State<ChatDetails> {
name: result.path,
);
} else {
final picked = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
),
final picked = await selectFiles(
context,
allowMultiple: false,
extensions: imageExtensions,
);
final pickedFile = picked?.files.firstOrNull;
final pickedFile = picked.firstOrNull;
if (pickedFile == null) return;
file = MatrixFile(
bytes: pickedFile.bytes!,
bytes: await pickedFile.readAsBytes(),
name: pickedFile.name,
);
}
Expand Down
11 changes: 4 additions & 7 deletions lib/pages/homeserver_picker/homeserver_picker.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import 'package:flutter/material.dart';

import 'package:adaptive_dialog/adaptive_dialog.dart';
import 'package:collection/collection.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:flutter_web_auth_2/flutter_web_auth_2.dart';
import 'package:go_router/go_router.dart';
Expand All @@ -15,8 +14,8 @@ import 'package:universal_html/html.dart' as html;

import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pages/homeserver_picker/homeserver_picker_view.dart';
import 'package:fluffychat/utils/file_selector.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/matrix.dart';
import '../../utils/localized_exception_extension.dart';

Expand Down Expand Up @@ -201,18 +200,16 @@ class HomeserverPickerController extends State<HomeserverPicker> {
Widget build(BuildContext context) => HomeserverPickerView(this);

Future<void> restoreBackup() async {
final picked = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(withData: true),
);
final file = picked?.files.firstOrNull;
final picked = await selectFiles(context);
final file = picked.firstOrNull;
if (file == null) return;
setState(() {
error = null;
isLoading = isLoggingIn = true;
});
try {
final client = Matrix.of(context).getLoginClient();
await client.importDump(String.fromCharCodes(file.bytes!));
await client.importDump(String.fromCharCodes(await file.readAsBytes()));
Matrix.of(context).initMatrix();
} catch (e) {
setState(() {
Expand Down
11 changes: 6 additions & 5 deletions lib/pages/new_group/new_group.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import 'dart:typed_data';

import 'package:flutter/material.dart';

import 'package:file_picker/file_picker.dart';
import 'package:go_router/go_router.dart';
import 'package:matrix/matrix.dart' as sdk;

import 'package:fluffychat/pages/new_group/new_group_view.dart';
import 'package:fluffychat/utils/file_selector.dart';
import 'package:fluffychat/widgets/matrix.dart';

class NewGroup extends StatefulWidget {
Expand Down Expand Up @@ -35,15 +35,16 @@ class NewGroupController extends State<NewGroup> {
void setGroupCanBeFound(bool b) => setState(() => groupCanBeFound = b);

void selectPhoto() async {
final photo = await FilePicker.platform.pickFiles(
type: FileType.image,
final photo = await selectFiles(
context,
extensions: imageExtensions,
allowMultiple: false,
withData: true,
);
final bytes = await photo.singleOrNull?.readAsBytes();

setState(() {
avatarUrl = null;
avatar = photo?.files.singleOrNull?.bytes;
avatar = bytes;
});
}

Expand Down
13 changes: 6 additions & 7 deletions lib/pages/new_space/new_space.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ import 'dart:typed_data';

import 'package:flutter/material.dart';

import 'package:file_picker/file_picker.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:go_router/go_router.dart';
import 'package:matrix/matrix.dart' as sdk;
import 'package:matrix/matrix.dart';

import 'package:fluffychat/pages/new_space/new_space_view.dart';
import 'package:fluffychat/utils/file_selector.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/widgets/matrix.dart';

Expand All @@ -32,15 +32,14 @@ class NewSpaceController extends State<NewSpace> {
Uri? avatarUrl;

void selectPhoto() async {
final photo = await FilePicker.platform.pickFiles(
type: FileType.image,
allowMultiple: false,
withData: true,
final photo = await selectFiles(
context,
extensions: imageExtensions,
);

final bytes = await photo.firstOrNull?.readAsBytes();
setState(() {
avatarUrl = null;
avatar = photo?.files.singleOrNull?.bytes;
avatar = bytes;
});
}

Expand Down
14 changes: 4 additions & 10 deletions lib/pages/settings/settings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,13 @@ import 'package:flutter/material.dart';

import 'package:adaptive_dialog/adaptive_dialog.dart';
import 'package:collection/collection.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:image_picker/image_picker.dart';
import 'package:matrix/matrix.dart';

import 'package:fluffychat/utils/file_selector.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import '../../widgets/matrix.dart';
import '../bootstrap/bootstrap_dialog.dart';
import 'settings_view.dart';
Expand Down Expand Up @@ -136,16 +135,11 @@ class SettingsController extends State<Settings> {
name: result.path,
);
} else {
final result = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
),
);
final pickedFile = result?.files.firstOrNull;
final result = await selectFiles(context, extensions: imageExtensions);
final pickedFile = result.firstOrNull;
if (pickedFile == null) return;
file = MatrixFile(
bytes: pickedFile.bytes!,
bytes: await pickedFile.readAsBytes(),
name: pickedFile.name,
);
}
Expand Down
34 changes: 12 additions & 22 deletions lib/pages/settings_emotes/settings_emotes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,15 @@ import 'package:flutter/material.dart';

import 'package:adaptive_dialog/adaptive_dialog.dart';
import 'package:collection/collection.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:go_router/go_router.dart';
import 'package:http/http.dart' hide Client;
import 'package:matrix/matrix.dart';

import 'package:fluffychat/utils/client_manager.dart';
import 'package:fluffychat/utils/file_selector.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import '../../widgets/matrix.dart';
import 'import_archive_dialog.dart';
import 'settings_emotes_view.dart';
Expand Down Expand Up @@ -222,16 +221,11 @@ class EmotesSettingsController extends State<EmotesSettings> {
void imagePickerAction(
ValueNotifier<ImagePackImageContent?> controller,
) async {
final result = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
),
);
final pickedFile = result?.files.firstOrNull;
final result = await selectFiles(context, extensions: imageExtensions);
final pickedFile = result.firstOrNull;
if (pickedFile == null) return;
var file = MatrixImageFile(
bytes: pickedFile.bytes!,
bytes: await pickedFile.readAsBytes(),
name: pickedFile.name,
);
try {
Expand Down Expand Up @@ -282,21 +276,17 @@ class EmotesSettingsController extends State<EmotesSettings> {
final result = await showFutureLoadingDialog<Archive?>(
context: context,
future: () async {
final result = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
type: FileType.custom,
allowedExtensions: [
'zip',
// TODO: add further encoders
],
// TODO: migrate to stream, currently brrrr because of `archive_io`.
withData: true,
),
final result = await selectFiles(
context,
extensions: [
'zip',
// TODO: add further encoders
],
);

if (result == null) return null;
if (result.isEmpty) return null;

final buffer = InputStream(result.files.single.bytes);
final buffer = InputStream(await result.first.readAsBytes());

final archive = ZipDecoder().decodeBuffer(buffer);

Expand Down
14 changes: 4 additions & 10 deletions lib/pages/settings_style/settings_style.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import 'package:flutter/material.dart';

import 'package:file_picker/file_picker.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart';

import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/utils/account_config.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/utils/file_selector.dart';
import 'package:fluffychat/widgets/theme_builder.dart';
import '../../widgets/matrix.dart';
import 'settings_style_view.dart';
Expand All @@ -26,20 +25,15 @@ class SettingsStyleController extends State<SettingsStyle> {

void setWallpaper() async {
final client = Matrix.of(context).client;
final picked = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
),
);
final pickedFile = picked?.files.firstOrNull;
final picked = await selectFiles(context, extensions: imageExtensions);
final pickedFile = picked.firstOrNull;
if (pickedFile == null) return;

await showFutureLoadingDialog(
context: context,
future: () async {
final url = await client.uploadContent(
pickedFile.bytes!,
await pickedFile.readAsBytes(),
filename: pickedFile.name,
);
await client.updateApplicationAccountConfig(
Expand Down
Loading

0 comments on commit fc959ce

Please sign in to comment.