diff options
author | Emma [it/its]@Rory& <root@rory.gay> | 2024-02-09 16:14:07 +0100 |
---|---|---|
committer | Emma [it/its]@Rory& <root@rory.gay> | 2024-02-09 16:14:18 +0100 |
commit | 621130574be06fd9bccdbf585088aaf1d7e862df (patch) | |
tree | 36686a2bd0648225631de980833f61382e0f9471 /LibMatrix | |
parent | Add submodules for example bots (diff) | |
download | LibMatrix-621130574be06fd9bccdbf585088aaf1d7e862df.tar.xz |
Allow specifying chunk size for GetManyMessages
Diffstat (limited to 'LibMatrix')
-rw-r--r-- | LibMatrix/RoomTypes/GenericRoom.cs | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/LibMatrix/RoomTypes/GenericRoom.cs b/LibMatrix/RoomTypes/GenericRoom.cs index 38ced58..ec14ca9 100644 --- a/LibMatrix/RoomTypes/GenericRoom.cs +++ b/LibMatrix/RoomTypes/GenericRoom.cs @@ -112,7 +112,7 @@ public class GenericRoom { /// Same as <see cref="GetMessagesAsync"/>, except keeps fetching more responses until the beginning of the room is found, or the target message limit is reached /// </summary> public async IAsyncEnumerable<MessagesResponse> GetManyMessagesAsync(string from = "", int limit = 100, string dir = "b", string filter = "", bool includeState = true, - bool fixForward = false) { + bool fixForward = false, int chunkSize = 100) { if (dir == "f" && fixForward) { var concat = new List<MessagesResponse>(); while (true) { @@ -144,7 +144,7 @@ public class GenericRoom { } else { while (limit > 0) { - var resp = await GetMessagesAsync(from, limit, dir, filter); + var resp = await GetMessagesAsync(from, Math.Min(chunkSize, limit), dir, filter); if (!includeState) resp.State.Clear(); @@ -280,21 +280,32 @@ public class GenericRoom { return await GetNameAsync(); } catch { - try { - var members = GetMembersEnumerableAsync(); - var memberList = new List<string>(); - int memberCount = 0; - await foreach (var member in members) - memberList.Add(member.RawContent?["displayname"]?.GetValue<string>() ?? ""); - memberCount = memberList.Count; - memberList.RemoveAll(string.IsNullOrWhiteSpace); - memberList = memberList.OrderBy(x => x).ToList(); - if (memberList.Count > maxMemberNames) - return string.Join(", ", memberList.Take(maxMemberNames)) + " and " + (memberCount - maxMemberNames) + " others."; - return string.Join(", ", memberList); + try + { + var alias = await GetCanonicalAliasAsync(); + if (alias?.Alias is not null) return alias.Alias; + throw new Exception("No name or alias"); } - catch { - return RoomId; + catch + { + try + { + var members = GetMembersEnumerableAsync(); + var memberList = new List<string>(); + int memberCount = 0; + await foreach (var member in members) + memberList.Add(member.RawContent?["displayname"]?.GetValue<string>() ?? ""); + memberCount = memberList.Count; + memberList.RemoveAll(string.IsNullOrWhiteSpace); + memberList = memberList.OrderBy(x => x).ToList(); + if (memberList.Count > maxMemberNames) + return string.Join(", ", memberList.Take(maxMemberNames)) + " and " + (memberCount - maxMemberNames) + " others."; + return string.Join(", ", memberList); + } + catch + { + return RoomId; + } } } } |