From de68f62aefb1d53a144ac5849126aa0e70410ddb Mon Sep 17 00:00:00 2001 From: krille-chan Date: Mon, 15 Apr 2024 09:13:06 +0200 Subject: [PATCH] chore: Follow up manage aliases --- assets/l10n/intl_en.arb | 4 +-- .../chat_access_settings_controller.dart | 14 ++++++--- .../chat_access_settings_page.dart | 30 +++++++++++++++++-- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 146d423d..06b504b4 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -2509,8 +2509,8 @@ "@passwordIsWrong": {}, "publicLink": "Public link", "@publicLink": {}, - "publicLinks": "Public links", - "createNewLink": "Create new link", + "publicChatAddresses": "Public chat addresses", + "createNewAddress": "Create new address", "joinSpace": "Join space", "@joinSpace": {}, "publicSpaces": "Public spaces", diff --git a/lib/pages/chat_access_settings/chat_access_settings_controller.dart b/lib/pages/chat_access_settings/chat_access_settings_controller.dart index 822075f3..c0ab1fa7 100644 --- a/lib/pages/chat_access_settings/chat_access_settings_controller.dart +++ b/lib/pages/chat_access_settings/chat_access_settings_controller.dart @@ -178,6 +178,9 @@ class ChatAccessSettingsController extends State { future: () => room.client.setRoomAlias(alias, room.id), ); if (result.error != null) return; + setState(() {}); + + if (!room.canChangeStateEvent(EventTypes.RoomCanonicalAlias)) return; final canonicalAliasConsent = await showOkCancelAlertDialog( context: context, @@ -217,10 +220,13 @@ class ChatAccessSettingsController extends State { ); } - void deleteAlias(String alias) => showFutureLoadingDialog( - context: context, - future: () => room.client.deleteRoomAlias(alias), - ); + void deleteAlias(String alias) async { + await showFutureLoadingDialog( + context: context, + future: () => room.client.deleteRoomAlias(alias), + ); + setState(() {}); + } void setChatVisibilityOnDirectory(bool? visibility) async { if (visibility == null) return; diff --git a/lib/pages/chat_access_settings/chat_access_settings_page.dart b/lib/pages/chat_access_settings/chat_access_settings_page.dart index 6e9557e0..51b2ce77 100644 --- a/lib/pages/chat_access_settings/chat_access_settings_page.dart +++ b/lib/pages/chat_access_settings/chat_access_settings_page.dart @@ -107,7 +107,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { Divider(color: Theme.of(context).dividerColor), ListTile( title: Text( - L10n.of(context)!.publicLinks, + L10n.of(context)!.publicChatAddresses, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -115,7 +115,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { ), trailing: IconButton( icon: const Icon(Icons.add_outlined), - tooltip: L10n.of(context)!.createNewLink, + tooltip: L10n.of(context)!.createNewAddress, onPressed: controller.addAlias, ), ), @@ -138,6 +138,30 @@ class ChatAccessSettingsPageView extends StatelessWidget { ? () => controller.deleteAlias(alias) : null, ), + FutureBuilder( + future: room.client.getLocalAliases(room.id), + builder: (context, snapshot) { + final localAddresses = snapshot.data; + if (localAddresses == null) { + return const SizedBox.shrink(); + } + localAddresses.remove(room.canonicalAlias); + localAddresses + .removeWhere((alias) => altAliases.contains(alias)); + return Column( + mainAxisSize: MainAxisSize.min, + children: localAddresses + .map( + (alias) => _AliasListTile( + alias: alias, + published: false, + onDelete: () => controller.deleteAlias(alias), + ), + ) + .toList(), + ); + }, + ), Divider(color: Theme.of(context).dividerColor), FutureBuilder( future: room.client.getRoomVisibilityOnDirectory(room.id), @@ -190,11 +214,13 @@ class _AliasListTile extends StatelessWidget { required this.alias, required this.onDelete, this.isCanonicalAlias = false, + this.published = true, }); final String alias; final void Function()? onDelete; final bool isCanonicalAlias; + final bool published; @override Widget build(BuildContext context) {