diff --git a/commet/lib/client/components/sidebar_component/sidebar_entries_component.dart b/commet/lib/client/components/sidebar_component/sidebar_entries_component.dart index fbac51ffd..06b4c2d4f 100644 --- a/commet/lib/client/components/sidebar_component/sidebar_entries_component.dart +++ b/commet/lib/client/components/sidebar_component/sidebar_entries_component.dart @@ -110,6 +110,8 @@ abstract class SidebarEntriesComponent String createFolder(Space space); + void save(); + addToFolder(Space space, String folderId, int index); removeFromFolder(Space space, String folderId); diff --git a/commet/lib/client/matrix/components/sidebar_entries/matrix_sidebar_entries_component.dart b/commet/lib/client/matrix/components/sidebar_entries/matrix_sidebar_entries_component.dart index 58a80b656..01fa51ade 100644 --- a/commet/lib/client/matrix/components/sidebar_entries/matrix_sidebar_entries_component.dart +++ b/commet/lib/client/matrix/components/sidebar_entries/matrix_sidebar_entries_component.dart @@ -5,6 +5,7 @@ import 'package:commet/client/space.dart'; import 'package:commet/debug/log.dart'; import 'package:commet/utils/debounce.dart'; import 'package:commet/utils/rng.dart'; +import 'package:matrix/matrix_api_lite/model/sync_update.dart'; import 'package:matrix/matrix_api_lite/utils/try_get_map_extension.dart'; import 'package:uuid/uuid.dart'; @@ -36,7 +37,18 @@ class MatrixSidebarEntriesComponent } catch (e, s) { Log.onError(e, s); } - SidebarEntriesComponent.onOrderChanged.listen(onChanged); + + client.matrixClient.onSync.stream.listen(_onSync); + } + + void _onSync(SyncUpdate event) { + if (event.accountData == null) return; + + for (var ev in event.accountData!) { + if (ev.type == key) { + loadFromContent(ev.content); + } + } } void loadOrderFromAccountData() { @@ -45,7 +57,10 @@ class MatrixSidebarEntriesComponent if (data == null) return; var content = data.content as Map; + loadFromContent(content); + } + void loadFromContent(Map content) { var spaceData = content.tryGetMap("spaces"); if (spaceData != null) { @@ -102,10 +117,6 @@ class MatrixSidebarEntriesComponent static const key = "chat.commet.sidebar_ordering"; - void onChanged(event) { - serializeDebouncer.run(serialize); - } - void serialize() { var spaces = client.spaces.where((i) => i.isTopLevel); @@ -149,8 +160,6 @@ class MatrixSidebarEntriesComponent client.matrixClient .setAccountData(client.matrixClient.userID!, key, result); - - Log.i("Order data: ${result}"); } @override @@ -233,4 +242,9 @@ class MatrixSidebarEntriesComponent spaceToFolder.remove(space.identifier); getOrder(space); } + + @override + void save() { + serializeDebouncer.run(serialize); + } } diff --git a/commet/lib/ui/molecules/space_group_widget.dart b/commet/lib/ui/molecules/space_group_widget.dart index 596ab68dd..fb88b8e9d 100644 --- a/commet/lib/ui/molecules/space_group_widget.dart +++ b/commet/lib/ui/molecules/space_group_widget.dart @@ -342,6 +342,8 @@ class _SpaceGroupWidgetState extends State { "Adding ${space.space.displayName} to folder at index: $i"); component!.addToFolder( space.space, widget.folderId, index); + + component.save(); } } } diff --git a/commet/lib/ui/molecules/space_selector.dart b/commet/lib/ui/molecules/space_selector.dart index 18a274a08..8a8257d14 100644 --- a/commet/lib/ui/molecules/space_selector.dart +++ b/commet/lib/ui/molecules/space_selector.dart @@ -168,6 +168,7 @@ class SpaceSelectorState extends State { var component = space.client.getComponent()!; component.removeFromFolder(space, data.currentFolder!); + component.save(); } int i = adjustIndex(index, data.entry.id); @@ -217,12 +218,17 @@ class SpaceSelectorState extends State { var componentA = i.space.client.getComponent()!; + var folderId = componentA.createFolder(i.space); var space = (details.data.entry as SpaceSidebarEntry).space; var componentB = space.client.getComponent()!; + componentB.addToFolder(space, folderId, 1); + + componentA.save(); + componentB.save(); }, builder: (context, candidateData, rejectedData) { return tiamat.Tooltip( text: i.space.displayName, @@ -269,6 +275,7 @@ class SpaceSelectorState extends State { var component = space.client.getComponent()!; component.addToFolder(space, i.id, 0); + component.save(); }, builder: (BuildContext context, List candidateData, List rejectedData) {