diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 89c2bcea..e723b22c 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -23,6 +23,7 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/chat_view.dart'; import 'package:fluffychat/pages/chat/event_info_dialog.dart'; import 'package:fluffychat/pages/chat/recording_dialog.dart'; +import 'package:fluffychat/utils/matrix_sdk_extensions.dart/event_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions.dart/matrix_locals.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -83,6 +84,18 @@ class ChatController extends State { } } + bool get canSaveSelectedEvent => + selectedEvents.length == 1 && + { + MessageTypes.Video, + MessageTypes.Image, + MessageTypes.Sticker, + MessageTypes.Audio, + MessageTypes.File, + }.contains(selectedEvents.single.messageType); + + void saveSelectedEvent() => selectedEvents.single.saveFile(context); + List selectedEvents = []; List filteredEvents; diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 585e84a3..fa4b487b 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -49,6 +49,12 @@ class ChatView extends StatelessWidget { tooltip: L10n.of(context).copy, onPressed: controller.copyEventsAction, ), + if (controller.canSaveSelectedEvent) + IconButton( + icon: Icon(Icons.adaptive.share), + tooltip: L10n.of(context).share, + onPressed: controller.saveSelectedEvent, + ), if (controller.canRedactSelectedEvents) IconButton( icon: const Icon(Icons.delete_outlined),