From a1223c0e9be7c3a3f8a7cb3567812577eb9992d8 Mon Sep 17 00:00:00 2001 From: Krille Date: Mon, 14 Apr 2025 10:59:53 +0200 Subject: [PATCH] chore: Follow up public rooms dialog Signed-off-by: Krille --- .../adaptive_dialogs/public_room_dialog.dart | 20 +- lib/widgets/public_room_bottom_sheet.dart | 234 ------------------ 2 files changed, 10 insertions(+), 244 deletions(-) delete mode 100644 lib/widgets/public_room_bottom_sheet.dart diff --git a/lib/widgets/adaptive_dialogs/public_room_dialog.dart b/lib/widgets/adaptive_dialogs/public_room_dialog.dart index 3e03ea5a7..ded3fb077 100644 --- a/lib/widgets/adaptive_dialogs/public_room_dialog.dart +++ b/lib/widgets/adaptive_dialogs/public_room_dialog.dart @@ -1,12 +1,11 @@ +import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; - import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_linkify/flutter_linkify.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import '../../config/themes.dart'; import '../../utils/url_launcher.dart'; import '../avatar.dart'; @@ -94,8 +93,8 @@ class PublicRoomDialog extends StatelessWidget { title: ConstrainedBox( constraints: const BoxConstraints(maxWidth: 256), child: Text( - chunk?.name ?? roomAlias ?? chunk?.roomId ?? 'Unknown', - overflow: TextOverflow.fade, + chunk?.name ?? roomAlias?.localpart ?? chunk?.roomId ?? 'Unknown', + textAlign: TextAlign.center, ), ), content: ConstrainedBox( @@ -178,13 +177,14 @@ class PublicRoomDialog extends StatelessWidget { : null, ), ), - Text( - L10n.of(context).countParticipants( - profile?.numJoinedMembers ?? 0, + if (profile?.numJoinedMembers != null) + Text( + L10n.of(context).countParticipants( + profile?.numJoinedMembers ?? 0, + ), + style: const TextStyle(fontSize: 10), + textAlign: TextAlign.center, ), - style: const TextStyle(fontSize: 10), - textAlign: TextAlign.center, - ), if (topic != null && topic.isNotEmpty) SelectableLinkify( text: topic, diff --git a/lib/widgets/public_room_bottom_sheet.dart b/lib/widgets/public_room_bottom_sheet.dart deleted file mode 100644 index 01f1d69d2..000000000 --- a/lib/widgets/public_room_bottom_sheet.dart +++ /dev/null @@ -1,234 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:flutter_linkify/flutter_linkify.dart'; -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/utils/fluffy_share.dart'; -import 'package:fluffychat/utils/url_launcher.dart'; -import 'package:fluffychat/widgets/avatar.dart'; -import 'package:fluffychat/widgets/future_loading_dialog.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import 'package:fluffychat/widgets/qr_code_viewer.dart'; - -@Deprecated('') -class PublicRoomBottomSheet extends StatelessWidget { - final String? roomAlias; - final BuildContext outerContext; - final PublicRoomsChunk? chunk; - final List? via; - - PublicRoomBottomSheet({ - this.roomAlias, - required this.outerContext, - this.chunk, - this.via, - super.key, - }) { - assert(roomAlias != null || chunk != null); - } - - void _joinRoom(BuildContext context) async { - final client = Matrix.of(outerContext).client; - final chunk = this.chunk; - final knock = chunk?.joinRule == 'knock'; - final result = await showFutureLoadingDialog( - context: context, - future: () async { - if (chunk != null && client.getRoomById(chunk.roomId) != null) { - return chunk.roomId; - } - final roomId = chunk != null && knock - ? await client.knockRoom(chunk.roomId, via: via) - : await client.joinRoom( - roomAlias ?? chunk!.roomId, - via: via, - ); - - if (!knock && client.getRoomById(roomId) == null) { - await client.waitForRoomInSync(roomId); - } - return roomId; - }, - ); - if (knock) { - return; - } - if (result.error == null) { - Navigator.of(context).pop(true); - // don't open the room if the joined room is a space - if (chunk?.roomType != 'm.space' && - !client.getRoomById(result.result!)!.isSpace) { - outerContext.go('/rooms/${result.result!}'); - } - return; - } - } - - bool _testRoom(PublicRoomsChunk r) => r.canonicalAlias == roomAlias; - - Future _search() async { - final chunk = this.chunk; - if (chunk != null) return chunk; - final query = await Matrix.of(outerContext).client.queryPublicRooms( - server: roomAlias!.domain, - filter: PublicRoomQueryFilter( - genericSearchTerm: roomAlias, - ), - ); - if (!query.chunk.any(_testRoom)) { - throw (L10n.of(outerContext).noRoomsFound); - } - return query.chunk.firstWhere(_testRoom); - } - - @override - Widget build(BuildContext context) { - final roomAlias = this.roomAlias ?? chunk?.canonicalAlias; - final roomLink = roomAlias ?? chunk?.roomId; - return SafeArea( - child: Scaffold( - appBar: AppBar( - title: Text( - chunk?.name ?? roomAlias ?? chunk?.roomId ?? 'Unknown', - overflow: TextOverflow.fade, - ), - leading: Center( - child: CloseButton( - onPressed: Navigator.of(context, rootNavigator: false).pop, - ), - ), - actions: roomAlias == null - ? null - : [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: IconButton( - icon: const Icon(Icons.qr_code_rounded), - onPressed: () => showQrCodeViewer( - context, - roomAlias, - ), - ), - ), - ], - ), - body: FutureBuilder( - future: _search(), - builder: (context, snapshot) { - final theme = Theme.of(context); - - final profile = snapshot.data; - return ListView( - padding: EdgeInsets.zero, - children: [ - Row( - children: [ - Padding( - padding: const EdgeInsets.all(16.0), - child: profile == null - ? const Center( - child: CircularProgressIndicator.adaptive(), - ) - : Avatar( - client: Matrix.of(outerContext).client, - mxContent: profile.avatarUrl, - name: profile.name ?? roomAlias, - size: Avatar.defaultSize * 3, - ), - ), - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextButton.icon( - onPressed: roomLink != null - ? () => FluffyShare.share( - roomLink, - context, - copyOnly: true, - ) - : null, - icon: const Icon( - Icons.copy_outlined, - size: 14, - ), - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onSurface, - iconColor: theme.colorScheme.onSurface, - ), - label: Text( - roomLink ?? '...', - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), - TextButton.icon( - onPressed: () {}, - icon: const Icon( - Icons.groups_3_outlined, - size: 14, - ), - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onSurface, - iconColor: theme.colorScheme.onSurface, - ), - label: Text( - L10n.of(context).countParticipants( - profile?.numJoinedMembers ?? 0, - ), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), - ], - ), - ), - ], - ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: ElevatedButton.icon( - onPressed: () => _joinRoom(context), - label: Text( - chunk?.joinRule == 'knock' && - Matrix.of(outerContext) - .client - .getRoomById(chunk!.roomId) == - null - ? L10n.of(context).knock - : chunk?.roomType == 'm.space' - ? L10n.of(context).joinSpace - : L10n.of(context).joinRoom, - ), - icon: const Icon(Icons.navigate_next), - ), - ), - const SizedBox(height: 16), - if (profile?.topic?.isNotEmpty ?? false) - ListTile( - subtitle: SelectableLinkify( - text: profile!.topic!, - linkStyle: TextStyle( - color: theme.colorScheme.primary, - decorationColor: theme.colorScheme.primary, - ), - style: TextStyle( - fontSize: 14, - color: theme.textTheme.bodyMedium!.color, - ), - options: const LinkifyOptions(humanize: false), - onOpen: (url) => - UrlLauncher(context, url.url).launchUrl(), - ), - ), - ], - ); - }, - ), - ), - ); - } -}