From 6512474c24ff99b997f7d5f018fc0b10662bb138 Mon Sep 17 00:00:00 2001 From: Rory& Date: Sat, 26 Jul 2025 16:59:18 +0200 Subject: Add support for bulk event sending, back off on server failure --- LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs') diff --git a/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs b/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs index 4185353..e5095f1 100644 --- a/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs +++ b/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs @@ -4,6 +4,7 @@ using System.Text.Json; using System.Text.Json.Nodes; using System.Text.Json.Serialization; using System.Web; +using ArcaneLibs.Collections; using ArcaneLibs.Extensions; using LibMatrix.EventTypes.Spec; using LibMatrix.EventTypes.Spec.State.RoomInfo; @@ -409,15 +410,12 @@ public class AuthenticatedHomeserverGeneric : RemoteHomeserver { private Dictionary? _namedFilterCache; private Dictionary _filterCache = new(); - public async Task GetCapabilitiesAsync() { - var res = await ClientHttpClient.GetAsync("/_matrix/client/v3/capabilities"); - if (!res.IsSuccessStatusCode) { - Console.WriteLine($"Failed to get capabilities: {await res.Content.ReadAsStringAsync()}"); - throw new InvalidDataException($"Failed to get capabilities: {await res.Content.ReadAsStringAsync()}"); - } + private static readonly SemaphoreCache CapabilitiesCache = new(); - return await res.Content.ReadFromJsonAsync(); - } + public async Task GetCapabilitiesAsync() => + await CapabilitiesCache.GetOrAdd(ServerName, async () => + await ClientHttpClient.GetFromJsonAsync("/_matrix/client/v3/capabilities") + ); public class HsNamedCaches { internal HsNamedCaches(AuthenticatedHomeserverGeneric hs) { @@ -609,6 +607,9 @@ public class AuthenticatedHomeserverGeneric : RemoteHomeserver { [JsonPropertyName("m.set_displayname")] public BooleanCapability? SetDisplayName { get; set; } + [JsonPropertyName("gay.rory.bulk_send_events")] + public BooleanCapability? BulkSendEvents { get; set; } + [JsonExtensionData] public Dictionary? AdditionalCapabilities { get; set; } } -- cgit 1.5.1