From c7b7dbe3d929d787fe0c76015082a117c4222278 Mon Sep 17 00:00:00 2001 From: "Emma [it/its]@Rory&" Date: Fri, 23 Feb 2024 12:33:45 +0100 Subject: Unknown changes --- LibMatrix/Extensions/HttpClientExtensions.cs | 2 +- LibMatrix/Helpers/SyncHelper.cs | 9 ++++- .../Homeservers/AuthenticatedHomeserverGeneric.cs | 24 ++++++++++- LibMatrix/RoomTypes/GenericRoom.cs | 2 +- LibMatrix/RoomTypes/SpaceRoom.cs | 5 +++ LibMatrix/Utilities/CommonSyncFilters.cs | 47 ++++++++++++++++------ 6 files changed, 70 insertions(+), 19 deletions(-) (limited to 'LibMatrix') diff --git a/LibMatrix/Extensions/HttpClientExtensions.cs b/LibMatrix/Extensions/HttpClientExtensions.cs index b2f45bd..60b1fc1 100644 --- a/LibMatrix/Extensions/HttpClientExtensions.cs +++ b/LibMatrix/Extensions/HttpClientExtensions.cs @@ -57,7 +57,7 @@ public class MatrixHttpClient : HttpClient { HttpResponseMessage responseMessage; // try { - responseMessage = await base.SendAsync(request, cancellationToken); + responseMessage = await base.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken); // } // catch (Exception e) { // if (requestSettings is { Retries: 0 }) throw; diff --git a/LibMatrix/Helpers/SyncHelper.cs b/LibMatrix/Helpers/SyncHelper.cs index 47e5b1e..f9a7cb7 100644 --- a/LibMatrix/Helpers/SyncHelper.cs +++ b/LibMatrix/Helpers/SyncHelper.cs @@ -120,7 +120,7 @@ public class SyncHelper(AuthenticatedHomeserverGeneric homeserver, ILogger? logg } public async Task RunSyncLoopAsync(bool skipInitialSyncEvents = true, CancellationToken? cancellationToken = null) { - var sw = Stopwatch.StartNew(); + // var sw = Stopwatch.StartNew(); var emptyInitialSyncCount = 0; var syncCount = 0; var oldTimeout = Timeout; @@ -153,7 +153,7 @@ public class SyncHelper(AuthenticatedHomeserverGeneric homeserver, ILogger? logg Timeout = oldTimeout; } } - else if (syncCount > 15) + else if (syncCount > 15 && IsInitialSync) Console.WriteLine(sync.ToJson(ignoreNull: true, indent: true)); await RunSyncLoopCallbacksAsync(sync, IsInitialSync && skipInitialSyncEvents); @@ -212,4 +212,9 @@ public class SyncHelper(AuthenticatedHomeserverGeneric homeserver, ILogger? logg /// Event fired when an account data event is received /// public List> AccountDataReceivedHandlers { get; } = new(); + + private void Log(string message) { + if (logger is null) Console.WriteLine(message); + else logger.LogInformation(message); + } } \ No newline at end of file diff --git a/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs b/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs index 02f3e3a..1c93235 100644 --- a/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs +++ b/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs @@ -295,6 +295,27 @@ public class AuthenticatedHomeserverGeneric(string serverName, string accessToke } public async Task UploadFilterAsync(SyncFilter filter) { + List?> senderLists = [ + filter.AccountData?.Senders, + filter.AccountData?.NotSenders, + filter.Presence?.Senders, + filter.Presence?.NotSenders, + filter.Room?.AccountData?.Senders, + filter.Room?.AccountData?.NotSenders, + filter.Room?.Ephemeral?.Senders, + filter.Room?.Ephemeral?.NotSenders, + filter.Room?.State?.Senders, + filter.Room?.State?.NotSenders, + filter.Room?.Timeline?.Senders, + filter.Room?.Timeline?.NotSenders + ]; + + foreach (var list in senderLists) + if (list is { Count: > 0 } && list.Contains("@me")) { + list.Remove("@me"); + list.Add(UserId); + } + var resp = await ClientHttpClient.PostAsJsonAsync("/_matrix/client/v3/user/" + UserId + "/filter", filter); return await resp.Content.ReadFromJsonAsync() ?? throw new Exception("Failed to upload filter?"); } @@ -327,8 +348,7 @@ public class AuthenticatedHomeserverGeneric(string serverName, string accessToke /// Filter ID response /// public async Task UploadNamedFilterAsync(string filterName, SyncFilter filter) { - var resp = await ClientHttpClient.PostAsJsonAsync("/_matrix/client/v3/user/" + UserId + "/filter", filter); - var idResp = await resp.Content.ReadFromJsonAsync() ?? throw new Exception("Failed to upload filter?"); + var idResp = await UploadFilterAsync(filter); var filterList = await GetNamedFilterListOrNullAsync() ?? new Dictionary(); filterList[filterName] = idResp.FilterId; diff --git a/LibMatrix/RoomTypes/GenericRoom.cs b/LibMatrix/RoomTypes/GenericRoom.cs index eee6041..cf32df8 100644 --- a/LibMatrix/RoomTypes/GenericRoom.cs +++ b/LibMatrix/RoomTypes/GenericRoom.cs @@ -435,7 +435,7 @@ public class GenericRoom { #region Disband room - public async Task DisbandRoomAsync() { + public async Task PermanentlyBrickRoomAsync() { var states = GetFullStateAsync(); List stateTypeIgnore = new() { "m.room.create", diff --git a/LibMatrix/RoomTypes/SpaceRoom.cs b/LibMatrix/RoomTypes/SpaceRoom.cs index 9bd1173..49e751d 100644 --- a/LibMatrix/RoomTypes/SpaceRoom.cs +++ b/LibMatrix/RoomTypes/SpaceRoom.cs @@ -1,5 +1,6 @@ using ArcaneLibs.Extensions; using LibMatrix.Homeservers; +using Microsoft.Extensions.Logging; namespace LibMatrix.RoomTypes; @@ -31,4 +32,8 @@ public class SpaceRoom(AuthenticatedHomeserverGeneric homeserver, string roomId) }); return resp; } + + public async Task AddChildByIdAsync(string id) { + return await AddChildAsync(Homeserver.GetRoom(id)); + } } \ No newline at end of file diff --git a/LibMatrix/Utilities/CommonSyncFilters.cs b/LibMatrix/Utilities/CommonSyncFilters.cs index 8e727be..bf8b987 100644 --- a/LibMatrix/Utilities/CommonSyncFilters.cs +++ b/LibMatrix/Utilities/CommonSyncFilters.cs @@ -1,5 +1,7 @@ using System.Collections.Frozen; +using LibMatrix.EventTypes.Common; using LibMatrix.EventTypes.Spec.State; +using LibMatrix.EventTypes.Spec.State.RoomInfo; using LibMatrix.Filters; namespace LibMatrix.Utilities; @@ -9,15 +11,16 @@ public static class CommonSyncFilters { 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 const string GetOwnMemberEvents = "gay.rory.matrixutils.get_own_member_events.v0"; - public static readonly SyncFilter GetAccountDataFilter = new() { + public static SyncFilter GetAccountDataFilter => new() { Presence = new SyncFilter.EventFilter(notTypes: ["*"]), Room = new SyncFilter.RoomFilter() { Rooms = [] } }; - public static readonly SyncFilter GetAccountDataWithRoomsFilter = new() { + public static SyncFilter GetAccountDataWithRoomsFilter => new() { Presence = new SyncFilter.EventFilter(notTypes: ["*"]), Room = new SyncFilter.RoomFilter() { State = new SyncFilter.RoomFilter.StateFilter(notTypes: ["*"]), @@ -26,7 +29,7 @@ public static class CommonSyncFilters { } }; - public static readonly SyncFilter GetBasicRoomDataFilter = new() { + public static SyncFilter GetBasicRoomDataFilter => new() { AccountData = new SyncFilter.EventFilter(notTypes: ["*"], limit: 1), Presence = new SyncFilter.EventFilter(notTypes: ["*"], limit: 1), Room = new SyncFilter.RoomFilter { @@ -34,11 +37,11 @@ public static class CommonSyncFilters { 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" + RoomCreateEventContent.EventId, + RoomNameEventContent.EventId, + RoomAvatarEventContent.EventId, + MjolnirShortcodeEventContent.EventId, + RoomPowerLevelEventContent.EventId }, LazyLoadMembers = true, IncludeRedundantMembers = false }, @@ -46,7 +49,7 @@ public static class CommonSyncFilters { } }; - public static readonly SyncFilter GetSpaceRelationsFilter = new() { + public static SyncFilter GetSpaceRelationsFilter => new() { AccountData = new SyncFilter.EventFilter(notTypes: ["*"], limit: 1), Presence = new SyncFilter.EventFilter(notTypes: ["*"], limit: 1), Room = new SyncFilter.RoomFilter { @@ -54,8 +57,8 @@ public static class CommonSyncFilters { Ephemeral = new SyncFilter.RoomFilter.StateFilter(rooms: []), State = new SyncFilter.RoomFilter.StateFilter { Types = new List { - "m.space.child", - "m.space.parent" + SpaceChildEventContent.EventId, + SpaceParentEventContent.EventId }, LazyLoadMembers = true, IncludeRedundantMembers = false }, @@ -63,11 +66,29 @@ public static class CommonSyncFilters { } }; + public static SyncFilter GetOwnMemberEventsFilter => new() { + AccountData = new SyncFilter.EventFilter(types: ["m.room.member"], 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 { + RoomMemberEventContent.EventId + }, + LazyLoadMembers = true, IncludeRedundantMembers = false, + Senders = ["@me"] + }, + Timeline = new SyncFilter.RoomFilter.StateFilter(rooms: []) + } + }; + // This must be down here, due to statics load order - public static readonly FrozenDictionary FilterMap = new Dictionary() { + public static FrozenDictionary FilterMap => new Dictionary() { [GetAccountData] = GetAccountDataFilter, [GetAccountDataWithRooms] = GetAccountDataWithRoomsFilter, [GetBasicRoomInfo] = GetBasicRoomDataFilter, - [GetSpaceRelations] = GetSpaceRelationsFilter + [GetSpaceRelations] = GetSpaceRelationsFilter, + [GetOwnMemberEvents] = GetOwnMemberEventsFilter }.ToFrozenDictionary(); } \ No newline at end of file -- cgit 1.4.1