From 6bd02248ccfbcb46960a6f39eaad23888d190eb5 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Fri, 15 Sep 2023 09:50:45 +0200 Subject: Some refactoring --- .../Homeservers/AuthenticatedHomeserverGeneric.cs | 52 +++++++++++++++------- 1 file changed, 37 insertions(+), 15 deletions(-) (limited to 'LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs') diff --git a/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs b/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs index 0b3201c..a280c54 100644 --- a/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs +++ b/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs @@ -2,6 +2,7 @@ using System.Net.Http.Json; using System.Text.Json; using System.Text.Json.Nodes; using System.Text.Json.Serialization; +using ArcaneLibs.Extensions; using LibMatrix.Extensions; using LibMatrix.Helpers; using LibMatrix.Responses; @@ -14,21 +15,18 @@ public class AuthenticatedHomeserverGeneric : RemoteHomeServer { public AuthenticatedHomeserverGeneric(TieredStorageService storage, string canonicalHomeServerDomain, string accessToken) : base(canonicalHomeServerDomain) { Storage = storage; AccessToken = accessToken.Trim(); - HomeServerDomain = canonicalHomeServerDomain.Trim(); SyncHelper = new SyncHelper(this, storage); - _httpClient = new MatrixHttpClient(); } - public TieredStorageService Storage { get; set; } - public SyncHelper SyncHelper { get; init; } - public WhoAmIResponse WhoAmI { get; set; } = null!; - public string UserId => WhoAmI.UserId; - public string AccessToken { get; set; } + public virtual TieredStorageService Storage { get; set; } + public virtual SyncHelper SyncHelper { get; init; } + public virtual WhoAmIResponse WhoAmI { get; set; } = null!; + public virtual string UserId => WhoAmI.UserId; + public virtual string AccessToken { get; set; } + public virtual Task GetRoom(string roomId) => Task.FromResult(new(this, roomId)); - public Task GetRoom(string roomId) => Task.FromResult(new(this, roomId)); - - public async Task> GetJoinedRooms() { + public virtual async Task> GetJoinedRooms() { var roomQuery = await _httpClient.GetAsync("/_matrix/client/v3/joined_rooms"); var roomsJson = await roomQuery.Content.ReadFromJsonAsync(); @@ -39,7 +37,7 @@ public class AuthenticatedHomeserverGeneric : RemoteHomeServer { return rooms; } - public async Task UploadFile(string fileName, Stream fileStream, string contentType = "application/octet-stream") { + public virtual async Task UploadFile(string fileName, Stream fileStream, string contentType = "application/octet-stream") { var res = await _httpClient.PostAsync($"/_matrix/media/v3/upload?filename={fileName}", new StreamContent(fileStream)); if (!res.IsSuccessStatusCode) { Console.WriteLine($"Failed to upload file: {await res.Content.ReadAsStringAsync()}"); @@ -50,7 +48,7 @@ public class AuthenticatedHomeserverGeneric : RemoteHomeServer { return resJson.GetProperty("content_uri").GetString()!; } - public async Task CreateRoom(CreateRoomRequest creationEvent) { + public virtual async Task CreateRoom(CreateRoomRequest creationEvent) { creationEvent.CreationContent["creator"] = UserId; var res = await _httpClient.PostAsJsonAsync("/_matrix/client/v3/createRoom", creationEvent, new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull @@ -60,12 +58,36 @@ public class AuthenticatedHomeserverGeneric : RemoteHomeServer { throw new InvalidDataException($"Failed to create room: {await res.Content.ReadAsStringAsync()}"); } - return await GetRoom((await res.Content.ReadFromJsonAsync())!["room_id"]!.ToString()); + var room = await GetRoom((await res.Content.ReadFromJsonAsync())!["room_id"]!.ToString()); + + foreach (var user in creationEvent.Invite) { + await room.InviteUser(user); + } + + return room; + } + +#region Utility Functions + public virtual async IAsyncEnumerable GetJoinedRoomsByType(string type) { + var rooms = await GetJoinedRooms(); + var tasks = rooms.Select(async room => { + var roomType = await room.GetRoomType(); + if (roomType == type) { + return room; + } + + return null; + }).ToAsyncEnumerable(); + + await foreach (var result in tasks) { + if (result is not null) yield return result; + } } +#endregion #region Account Data - public async Task GetAccountData(string key) { + public virtual async Task GetAccountData(string key) { // var res = await _httpClient.GetAsync($"/_matrix/client/v3/user/{UserId}/account_data/{key}"); // if (!res.IsSuccessStatusCode) { // Console.WriteLine($"Failed to get account data: {await res.Content.ReadAsStringAsync()}"); @@ -76,7 +98,7 @@ public class AuthenticatedHomeserverGeneric : RemoteHomeServer { return await _httpClient.GetFromJsonAsync($"/_matrix/client/v3/user/{UserId}/account_data/{key}"); } - public async Task SetAccountData(string key, object data) { + public virtual async Task SetAccountData(string key, object data) { var res = await _httpClient.PutAsJsonAsync($"/_matrix/client/v3/user/{UserId}/account_data/{key}", data); if (!res.IsSuccessStatusCode) { Console.WriteLine($"Failed to set account data: {await res.Content.ReadAsStringAsync()}"); -- cgit 1.4.1