mirror of
https://gitlab.com/famedly/fluffychat.git
synced 2024-12-24 14:32:37 +01:00
feat: Add remove rooms to and from spaces
This commit is contained in:
parent
3ebf3ed26c
commit
689e298865
@ -6,11 +6,18 @@
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"addToSpace": "Add to space",
|
||||
"accept": "Accept",
|
||||
"chatHasBeenAddedToThisSpace": "Chat has been added to this space",
|
||||
"@accept": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatHasBeenRemovedFromThisSpace": "Chat has been removed from this space",
|
||||
"@chatHasBeenRemovedFromThisSpace": {
|
||||
"type": "text",
|
||||
"placeholders": {}
|
||||
},
|
||||
"cantOpenUri": "Can't open the URI {uri}",
|
||||
"@cantOpenUri": {
|
||||
"type": "text",
|
||||
|
@ -321,6 +321,54 @@ class ChatListController extends State<ChatList> {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> addOrRemoveToSpace() async {
|
||||
if (activeSpaceId != null) {
|
||||
final space = Matrix.of(context).client.getRoomById(activeSpaceId);
|
||||
final result = await showFutureLoadingDialog(
|
||||
context: context,
|
||||
future: () => space.removeSpaceChild(selectedRoomIds.single),
|
||||
);
|
||||
if (result.error == null) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(L10n.of(context).chatHasBeenRemovedFromThisSpace),
|
||||
),
|
||||
);
|
||||
}
|
||||
} else {
|
||||
final selectedSpace = await showConfirmationDialog<String>(
|
||||
context: context,
|
||||
title: L10n.of(context).addToSpace,
|
||||
actions: Matrix.of(context)
|
||||
.client
|
||||
.rooms
|
||||
.where((r) => r.isSpace)
|
||||
.map(
|
||||
(space) => AlertDialogAction(
|
||||
key: space.id,
|
||||
label: space.displayname,
|
||||
),
|
||||
)
|
||||
.toList());
|
||||
if (selectedSpace == null) return;
|
||||
final result = await showFutureLoadingDialog(
|
||||
context: context,
|
||||
future: () => Matrix.of(context)
|
||||
.client
|
||||
.getRoomById(selectedSpace)
|
||||
.setSpaceChild(selectedRoomIds.single),
|
||||
);
|
||||
if (result.error == null) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(L10n.of(context).chatHasBeenAddedToThisSpace),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
setState(() => selectedRoomIds.clear());
|
||||
}
|
||||
|
||||
Future<void> waitForFirstSync() async {
|
||||
final client = Matrix.of(context).client;
|
||||
if (client.prevBatch?.isEmpty ?? true) {
|
||||
|
@ -50,6 +50,13 @@ class ChatListView extends StatelessWidget {
|
||||
? null
|
||||
: selectMode == SelectMode.select
|
||||
? [
|
||||
if (controller.selectedRoomIds.length == 1 &&
|
||||
controller.spaces.isNotEmpty)
|
||||
IconButton(
|
||||
tooltip: L10n.of(context).addToSpace,
|
||||
icon: Icon(Icons.group_work_outlined),
|
||||
onPressed: controller.addOrRemoveToSpace,
|
||||
),
|
||||
if (controller.selectedRoomIds.length == 1)
|
||||
IconButton(
|
||||
tooltip: L10n.of(context).toggleUnread,
|
||||
|
Loading…
Reference in New Issue
Block a user