From 9f8d0c85c54b4715974994aea52562072d6f1751 Mon Sep 17 00:00:00 2001 From: "Emma [it/its]@Rory&" Date: Wed, 31 Jan 2024 12:09:28 +0100 Subject: Better sync filter support, named filters, error handling --- LibMatrix/Utilities/CommonSyncFilters.cs | 73 ++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 LibMatrix/Utilities/CommonSyncFilters.cs (limited to 'LibMatrix/Utilities/CommonSyncFilters.cs') diff --git a/LibMatrix/Utilities/CommonSyncFilters.cs b/LibMatrix/Utilities/CommonSyncFilters.cs new file mode 100644 index 0000000..7cf1b41 --- /dev/null +++ b/LibMatrix/Utilities/CommonSyncFilters.cs @@ -0,0 +1,73 @@ +using System.Collections.Frozen; +using LibMatrix.EventTypes.Spec.State; +using LibMatrix.Filters; + +namespace LibMatrix.Utilities; + +public static class CommonSyncFilters { + public const string GetAccountData = "gay.rory.libmatrix.get_account_data.v0"; + public const string GetAccountDataWithRooms = "gay.rory.libmatrix.get_account_data_with_rooms.v0"; + public const string GetBasicRoomInfo = "gay.rory.matrixutils.get_basic_room_info.v0"; + public const string GetSpaceRelations = "gay.rory.matrixutils.get_space_relations.v0"; + + public static readonly SyncFilter GetAccountDataFilter = new() { + Presence = new SyncFilter.EventFilter(notTypes: ["*"]), + Room = new SyncFilter.RoomFilter() { + Rooms = [] + } + }; + + public static readonly SyncFilter GetAccountDataWithRoomsFilter = new() { + Presence = new SyncFilter.EventFilter(notTypes: ["*"]), + Room = new SyncFilter.RoomFilter() { + State = new SyncFilter.RoomFilter.StateFilter(notTypes: ["*"]), + Ephemeral = new SyncFilter.RoomFilter.StateFilter(notTypes: ["*"]), + Timeline = new SyncFilter.RoomFilter.StateFilter(notTypes: ["*"]) + } + }; + + public static readonly SyncFilter GetBasicRoomDataFilter = new() { + AccountData = new SyncFilter.EventFilter(notTypes: ["*"], limit: 1), + Presence = new SyncFilter.EventFilter(notTypes: ["*"], limit: 1), + Room = new SyncFilter.RoomFilter { + AccountData = new SyncFilter.RoomFilter.StateFilter(rooms: []), + Ephemeral = new SyncFilter.RoomFilter.StateFilter(rooms: []), + State = new SyncFilter.RoomFilter.StateFilter { + Types = new List { + "m.room.create", + "m.room.name", + "m.room.avatar", + "org.matrix.mjolnir.shortcode", + "m.room.power_levels", + }, + LazyLoadMembers = true, IncludeRedundantMembers = false + }, + Timeline = new SyncFilter.RoomFilter.StateFilter(rooms: []), + } + }; + + public static readonly SyncFilter GetSpaceRelationsFilter = new() { + AccountData = new SyncFilter.EventFilter(notTypes: ["*"], limit: 1), + Presence = new SyncFilter.EventFilter(notTypes: ["*"], limit: 1), + Room = new SyncFilter.RoomFilter { + AccountData = new SyncFilter.RoomFilter.StateFilter(rooms: []), + Ephemeral = new SyncFilter.RoomFilter.StateFilter(rooms: []), + State = new SyncFilter.RoomFilter.StateFilter { + Types = new List { + "m.space.child", + "m.space.parent" + }, + LazyLoadMembers = true, IncludeRedundantMembers = false + }, + Timeline = new SyncFilter.RoomFilter.StateFilter(rooms: []), + } + }; + + // This must be down here, due to statics load order + public static readonly FrozenDictionary FilterMap = new Dictionary() { + [GetAccountData] = GetAccountDataFilter, + [GetAccountDataWithRooms] = GetAccountDataWithRoomsFilter, + [GetBasicRoomInfo] = GetBasicRoomDataFilter, + [GetSpaceRelations] = GetSpaceRelationsFilter + }.ToFrozenDictionary(); +} \ No newline at end of file -- cgit 1.4.1