From 59960a1bb8ca4b0a2adaafe4f43fdacd4d9060eb Mon Sep 17 00:00:00 2001 From: SlimeQ Date: Tue, 9 May 2023 06:38:21 -0400 Subject: [PATCH] some refactoring, fixed crash when an event fails to concretize --- Matrix.Sdk.Sample.Console/Sample.cs | 2 +- .../Core/Domain/MatrixRoom/MatrixRoom.cs | 36 ++++++----- .../MatrixRoom/MatrixRoomEventFactory.cs | 62 ------------------- .../Domain/MatrixRoom/MatrixRoomFactory.cs | 33 ---------- .../Domain/MatrixRoom/MatrixRoomStatus.cs | 2 +- .../Core/Domain/RoomEvent/BaseRoomEvent.cs | 58 ++++++++++++++++- .../Core/Domain/RoomEvent/CreateRoomEvent.cs | 2 +- .../Domain/RoomEvent/ImageMessageEvent.cs | 2 +- .../Domain/RoomEvent/InviteToRoomEvent.cs | 2 +- .../Core/Domain/RoomEvent/JoinRoomEvent.cs | 2 +- .../Core/Domain/RoomEvent/ReactionEvent.cs | 2 +- .../Core/Domain/RoomEvent/RedactionEvent.cs | 2 +- .../Core/Domain/RoomEvent/TextMessageEvent.cs | 2 +- .../Core/Domain/Services/IPollingService.cs | 2 +- .../Core/Domain/Services/PollingService.cs | 2 +- Matrix.Sdk/Core/Domain/SyncBatch.cs | 25 ++++---- .../{RoomEvent.cs => RoomEventResponse.cs} | 2 +- .../Dto/Sync/Event/Room/RoomStateEvent.cs | 2 +- .../Infrastructure/Dto/Sync/SyncResponse.cs | 2 +- .../Infrastructure/Services/EventService.cs | 45 +++++++------- Matrix.Sdk/IMatrixClient.cs | 2 +- Matrix.Sdk/MatrixClient.cs | 2 +- Matrix.Sdk/MatrixUtil.cs | 26 -------- 23 files changed, 127 insertions(+), 190 deletions(-) delete mode 100644 Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomEventFactory.cs delete mode 100644 Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomFactory.cs rename Matrix.Sdk/Core/Infrastructure/Dto/Sync/Event/Room/{RoomEvent.cs => RoomEventResponse.cs} (96%) delete mode 100644 Matrix.Sdk/MatrixUtil.cs diff --git a/Matrix.Sdk.Sample.Console/Sample.cs b/Matrix.Sdk.Sample.Console/Sample.cs index 07bb6fb..6ffde82 100644 --- a/Matrix.Sdk.Sample.Console/Sample.cs +++ b/Matrix.Sdk.Sample.Console/Sample.cs @@ -3,7 +3,7 @@ namespace Matrix.Sdk.Sample.Console using System; using System.Threading; using System.Threading.Tasks; - using Core.Domain.MatrixRoom; + using Core.Domain.Room; using Core.Domain.RoomEvent; using Core.Infrastructure.Dto.Room.Create; using Serilog; diff --git a/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoom.cs b/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoom.cs index 6084527..75ec868 100644 --- a/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoom.cs +++ b/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoom.cs @@ -1,27 +1,31 @@ -namespace Matrix.Sdk.Core.Domain.MatrixRoom +namespace Matrix.Sdk.Core.Domain.Room { using System.Collections.Generic; + using Infrastructure.Dto.Sync; + using Infrastructure.Dto.Sync.Event.Room; + using RoomEvent; - public record MatrixRoom + public record MatrixRoom(string Id, MatrixRoomStatus Status, List JoinedUserIds) { - public MatrixRoom(string id, MatrixRoomStatus status, List joinedUserIds) + public static MatrixRoom Create(string roomId, RoomResponse joinedRoom, MatrixRoomStatus status) { - Id = id; - Status = status; - JoinedUserIds = joinedUserIds; - } + var joinedUserIds = new List(); + foreach (RoomEventResponse timelineEvent in joinedRoom.Timeline.Events) + if (JoinRoomEvent.Factory.TryCreateFrom(timelineEvent, roomId, out JoinRoomEvent joinRoomEvent)) + joinedUserIds.Add(joinRoomEvent!.SenderUserId); - public MatrixRoom(string id, MatrixRoomStatus status) - { - Id = id; - Status = status; - JoinedUserIds = new List(); + return new MatrixRoom(roomId, status, joinedUserIds); } - public string Id { get; } - - public MatrixRoomStatus Status { get; } + public static MatrixRoom CreateInvite(string roomId, InvitedRoom invitedRoom) + { + var joinedUserIds = new List(); + foreach (RoomStrippedState timelineEvent in invitedRoom.InviteState.Events) + if (JoinRoomEvent.Factory.TryCreateFromStrippedState(timelineEvent, roomId, + out JoinRoomEvent joinRoomEvent)) + joinedUserIds.Add(joinRoomEvent!.SenderUserId); - public List JoinedUserIds { get; } + return new MatrixRoom(roomId, MatrixRoomStatus.Invited, joinedUserIds); + } } } \ No newline at end of file diff --git a/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomEventFactory.cs b/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomEventFactory.cs deleted file mode 100644 index 25a4d79..0000000 --- a/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomEventFactory.cs +++ /dev/null @@ -1,62 +0,0 @@ -namespace Matrix.Sdk.Core.Domain.MatrixRoom -{ - using System.Collections.Generic; - using Infrastructure.Dto.Sync; - using Infrastructure.Dto.Sync.Event.Room; - using RoomEvent; - - public class MatrixRoomEventFactory - { - public List CreateFromJoined(string roomId, RoomResponse joinedRoom) - { - var roomEvents = new List(); - - foreach (RoomEvent timelineEvent in joinedRoom.Timeline.Events) - { - var e = CreateFromJoined(roomId, timelineEvent); - if (e != null) roomEvents.Add(e); - - } - return roomEvents; - } - - public BaseRoomEvent CreateFromJoined(string roomId, RoomEvent timelineEvent) - { - if (JoinRoomEvent.Factory.TryCreateFrom(timelineEvent, roomId, out JoinRoomEvent joinRoomEvent)) return joinRoomEvent; - if (CreateRoomEvent.Factory.TryCreateFrom(timelineEvent, roomId, out var createRoomEvent)) return createRoomEvent; - if (InviteToRoomEvent.Factory.TryCreateFrom(timelineEvent, roomId, out var inviteToRoomEvent)) return inviteToRoomEvent; - if (TextMessageEvent.Factory.TryCreateFrom(timelineEvent, roomId, out var textMessageEvent)) return textMessageEvent; - if (ImageMessageEvent.Factory.TryCreateFrom(timelineEvent, roomId, out var imageMessageEvent)) return imageMessageEvent; - if (RedactionEvent.Factory.TryCreateFrom(timelineEvent, roomId, out var redactionEvent)) return redactionEvent; - if (ReactionEvent.Factory.TryCreateFrom(timelineEvent, roomId, out var reactionEvent)) return reactionEvent; - return null; - } - - public List CreateFromInvited(string roomId, InvitedRoom invitedRoom) - { - var roomEvents = new List(); - - foreach (RoomStrippedState inviteStateEvent in invitedRoom.InviteState.Events) - { - var e = CreateFromInvited(roomId, inviteStateEvent); - if (e != null) - { - roomEvents.Add(e); - } - } - return roomEvents; - } - - public BaseRoomEvent CreateFromInvited(string roomId, RoomStrippedState inviteStateEvent) - { - if (JoinRoomEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var joinRoomEvent)) return joinRoomEvent; - if (CreateRoomEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var createRoomEvent)) return createRoomEvent; - if (InviteToRoomEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var inviteToRoomEvent)) return inviteToRoomEvent; - if (TextMessageEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var textMessageEvent)) return textMessageEvent; - if (ImageMessageEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var imageMessageEvent)) return imageMessageEvent; - if (RedactionEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var redactionEvent)) return redactionEvent; - if (ReactionEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var reactionEvent)) return reactionEvent; - return null; - } - } -} \ No newline at end of file diff --git a/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomFactory.cs b/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomFactory.cs deleted file mode 100644 index 3671418..0000000 --- a/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomFactory.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; - -namespace Matrix.Sdk.Core.Domain.MatrixRoom -{ - using System.Collections.Generic; - using Infrastructure.Dto.Sync; - using Infrastructure.Dto.Sync.Event.Room; - using RoomEvent; - - public class MatrixRoomFactory - { - public MatrixRoom Create(string roomId, RoomResponse joinedRoom, MatrixRoomStatus status) - { - var joinedUserIds = new List(); - foreach (RoomEvent timelineEvent in joinedRoom.Timeline.Events) - if (JoinRoomEvent.Factory.TryCreateFrom(timelineEvent, roomId, out JoinRoomEvent joinRoomEvent)) - joinedUserIds.Add(joinRoomEvent!.SenderUserId); - - return new MatrixRoom(roomId, status, joinedUserIds); - } - - public MatrixRoom CreateInvite(string roomId, InvitedRoom invitedRoom) - { - var joinedUserIds = new List(); - foreach (RoomStrippedState timelineEvent in invitedRoom.InviteState.Events) - if (JoinRoomEvent.Factory.TryCreateFromStrippedState(timelineEvent, roomId, - out JoinRoomEvent joinRoomEvent)) - joinedUserIds.Add(joinRoomEvent!.SenderUserId); - - return new MatrixRoom(roomId, MatrixRoomStatus.Invited, joinedUserIds); - } - } -} \ No newline at end of file diff --git a/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomStatus.cs b/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomStatus.cs index ad21eb4..d3ca495 100644 --- a/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomStatus.cs +++ b/Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomStatus.cs @@ -1,4 +1,4 @@ -namespace Matrix.Sdk.Core.Domain.MatrixRoom +namespace Matrix.Sdk.Core.Domain.Room { public enum MatrixRoomStatus { diff --git a/Matrix.Sdk/Core/Domain/RoomEvent/BaseRoomEvent.cs b/Matrix.Sdk/Core/Domain/RoomEvent/BaseRoomEvent.cs index 2f9e664..de51998 100644 --- a/Matrix.Sdk/Core/Domain/RoomEvent/BaseRoomEvent.cs +++ b/Matrix.Sdk/Core/Domain/RoomEvent/BaseRoomEvent.cs @@ -1,6 +1,62 @@ using System; +using System.Collections.Generic; +using Matrix.Sdk.Core.Infrastructure.Dto.Sync; +using Matrix.Sdk.Core.Infrastructure.Dto.Sync.Event.Room; namespace Matrix.Sdk.Core.Domain.RoomEvent { - public abstract record BaseRoomEvent(string EventId, string RoomId, string SenderUserId, DateTimeOffset Timestamp); + public abstract record BaseRoomEvent(string EventId, string RoomId, string SenderUserId, DateTimeOffset Timestamp) + { + public static List Create(string roomId, RoomResponse joinedRoom) + { + var roomEvents = new List(); + + foreach (RoomEventResponse timelineEvent in joinedRoom.Timeline.Events) + { + var e = Create(roomId, timelineEvent); + if (e != null) roomEvents.Add(e); + + } + return roomEvents; + } + + public static BaseRoomEvent Create(string roomId, RoomEventResponse timelineEvent) + { + if (JoinRoomEvent.Factory.TryCreateFrom(timelineEvent, roomId, out JoinRoomEvent joinRoomEvent)) return joinRoomEvent; + if (CreateRoomEvent.Factory.TryCreateFrom(timelineEvent, roomId, out var createRoomEvent)) return createRoomEvent; + if (InviteToRoomEvent.Factory.TryCreateFrom(timelineEvent, roomId, out var inviteToRoomEvent)) return inviteToRoomEvent; + if (TextMessageEvent.Factory.TryCreateFrom(timelineEvent, roomId, out var textMessageEvent)) return textMessageEvent; + if (ImageMessageEvent.Factory.TryCreateFrom(timelineEvent, roomId, out var imageMessageEvent)) return imageMessageEvent; + if (RedactionEvent.Factory.TryCreateFrom(timelineEvent, roomId, out var redactionEvent)) return redactionEvent; + if (ReactionEvent.Factory.TryCreateFrom(timelineEvent, roomId, out var reactionEvent)) return reactionEvent; + return null; + } + + public static List CreateFromInvited(string roomId, InvitedRoom invitedRoom) + { + var roomEvents = new List(); + + foreach (RoomStrippedState inviteStateEvent in invitedRoom.InviteState.Events) + { + var e = CreateFromInvited(roomId, inviteStateEvent); + if (e != null) + { + roomEvents.Add(e); + } + } + return roomEvents; + } + + public static BaseRoomEvent CreateFromInvited(string roomId, RoomStrippedState inviteStateEvent) + { + if (JoinRoomEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var joinRoomEvent)) return joinRoomEvent; + if (CreateRoomEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var createRoomEvent)) return createRoomEvent; + if (InviteToRoomEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var inviteToRoomEvent)) return inviteToRoomEvent; + if (TextMessageEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var textMessageEvent)) return textMessageEvent; + if (ImageMessageEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var imageMessageEvent)) return imageMessageEvent; + if (RedactionEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var redactionEvent)) return redactionEvent; + if (ReactionEvent.Factory.TryCreateFromStrippedState(inviteStateEvent, roomId, out var reactionEvent)) return reactionEvent; + return null; + } + } } \ No newline at end of file diff --git a/Matrix.Sdk/Core/Domain/RoomEvent/CreateRoomEvent.cs b/Matrix.Sdk/Core/Domain/RoomEvent/CreateRoomEvent.cs index 3f39ab9..db123a1 100644 --- a/Matrix.Sdk/Core/Domain/RoomEvent/CreateRoomEvent.cs +++ b/Matrix.Sdk/Core/Domain/RoomEvent/CreateRoomEvent.cs @@ -11,7 +11,7 @@ public record CreateRoomEvent(string EventId, string RoomId, string SenderUserId { public static class Factory { - public static bool TryCreateFrom(RoomEvent roomEvent, string roomId, out CreateRoomEvent createRoomEvent) + public static bool TryCreateFrom(RoomEventResponse roomEvent, string roomId, out CreateRoomEvent createRoomEvent) { RoomCreateContent content = roomEvent.Content.ToObject(); if (roomEvent.EventType == EventType.Create && content != null) diff --git a/Matrix.Sdk/Core/Domain/RoomEvent/ImageMessageEvent.cs b/Matrix.Sdk/Core/Domain/RoomEvent/ImageMessageEvent.cs index 4400079..99f5c4f 100644 --- a/Matrix.Sdk/Core/Domain/RoomEvent/ImageMessageEvent.cs +++ b/Matrix.Sdk/Core/Domain/RoomEvent/ImageMessageEvent.cs @@ -11,7 +11,7 @@ public record ImageMessageEvent(string EventId, string RoomId, string SenderUser { public static class Factory { - public static bool TryCreateFrom(RoomEvent roomEvent, string roomId, out ImageMessageEvent textMessageEvent) + public static bool TryCreateFrom(RoomEventResponse roomEvent, string roomId, out ImageMessageEvent textMessageEvent) { ImageContent content = roomEvent.Content.ToObject(); if (roomEvent.EventType == EventType.Message && content?.MessageType == MessageType.Image) diff --git a/Matrix.Sdk/Core/Domain/RoomEvent/InviteToRoomEvent.cs b/Matrix.Sdk/Core/Domain/RoomEvent/InviteToRoomEvent.cs index e37553b..c947789 100644 --- a/Matrix.Sdk/Core/Domain/RoomEvent/InviteToRoomEvent.cs +++ b/Matrix.Sdk/Core/Domain/RoomEvent/InviteToRoomEvent.cs @@ -10,7 +10,7 @@ public record InviteToRoomEvent(string EventId, string RoomId, string SenderUser { public static class Factory { - public static bool TryCreateFrom(RoomEvent roomEvent, string roomId, + public static bool TryCreateFrom(RoomEventResponse roomEvent, string roomId, out InviteToRoomEvent inviteToRoomEvent) { RoomMemberContent content = roomEvent.Content.ToObject(); diff --git a/Matrix.Sdk/Core/Domain/RoomEvent/JoinRoomEvent.cs b/Matrix.Sdk/Core/Domain/RoomEvent/JoinRoomEvent.cs index 4322313..8c0ddee 100644 --- a/Matrix.Sdk/Core/Domain/RoomEvent/JoinRoomEvent.cs +++ b/Matrix.Sdk/Core/Domain/RoomEvent/JoinRoomEvent.cs @@ -10,7 +10,7 @@ public record JoinRoomEvent(string EventId, string RoomId, string SenderUserId, { public static class Factory { - public static bool TryCreateFrom(RoomEvent roomEvent, string roomId, out JoinRoomEvent joinRoomEvent) + public static bool TryCreateFrom(RoomEventResponse roomEvent, string roomId, out JoinRoomEvent joinRoomEvent) { RoomMemberContent content = roomEvent.Content.ToObject(); if (roomEvent.EventType == EventType.Member && content?.UserMembershipState == UserMembershipState.Join) diff --git a/Matrix.Sdk/Core/Domain/RoomEvent/ReactionEvent.cs b/Matrix.Sdk/Core/Domain/RoomEvent/ReactionEvent.cs index 39b278b..abd52ad 100644 --- a/Matrix.Sdk/Core/Domain/RoomEvent/ReactionEvent.cs +++ b/Matrix.Sdk/Core/Domain/RoomEvent/ReactionEvent.cs @@ -12,7 +12,7 @@ public record ReactionEvent(string EventId, string RoomId, string SenderUserId, public static class Factory { - public static bool TryCreateFrom(RoomEvent roomEvent, string roomId, out ReactionEvent reactionEvent) + public static bool TryCreateFrom(RoomEventResponse roomEvent, string roomId, out ReactionEvent reactionEvent) { MessageContent content = roomEvent.Content.ToObject(); if (roomEvent.EventType == EventType.Reaction && content?.relatesTo.rel_type == "m.annotation") diff --git a/Matrix.Sdk/Core/Domain/RoomEvent/RedactionEvent.cs b/Matrix.Sdk/Core/Domain/RoomEvent/RedactionEvent.cs index 32e62cf..a176b1f 100644 --- a/Matrix.Sdk/Core/Domain/RoomEvent/RedactionEvent.cs +++ b/Matrix.Sdk/Core/Domain/RoomEvent/RedactionEvent.cs @@ -12,7 +12,7 @@ private record ReasonObj(string reason); public static class Factory { - public static bool TryCreateFrom(RoomEvent roomEvent, string roomId, out RedactionEvent redactionEvent) + public static bool TryCreateFrom(RoomEventResponse roomEvent, string roomId, out RedactionEvent redactionEvent) { ReasonObj content = roomEvent.Content.ToObject(); if (roomEvent.EventType == EventType.Redaction) diff --git a/Matrix.Sdk/Core/Domain/RoomEvent/TextMessageEvent.cs b/Matrix.Sdk/Core/Domain/RoomEvent/TextMessageEvent.cs index 9459b29..8c45f4e 100644 --- a/Matrix.Sdk/Core/Domain/RoomEvent/TextMessageEvent.cs +++ b/Matrix.Sdk/Core/Domain/RoomEvent/TextMessageEvent.cs @@ -11,7 +11,7 @@ public record TextMessageEvent(string EventId, string RoomId, string SenderUserI { public static class Factory { - public static bool TryCreateFrom(RoomEvent roomEvent, string roomId, out TextMessageEvent textMessageEvent) + public static bool TryCreateFrom(RoomEventResponse roomEvent, string roomId, out TextMessageEvent textMessageEvent) { MessageContent content = roomEvent.Content.ToObject(); if (roomEvent.EventType == EventType.Message && content?.MessageType == MessageType.Text) diff --git a/Matrix.Sdk/Core/Domain/Services/IPollingService.cs b/Matrix.Sdk/Core/Domain/Services/IPollingService.cs index 004baed..6d79245 100644 --- a/Matrix.Sdk/Core/Domain/Services/IPollingService.cs +++ b/Matrix.Sdk/Core/Domain/Services/IPollingService.cs @@ -1,7 +1,7 @@ namespace Matrix.Sdk.Core.Domain.Services { using System; - using MatrixRoom; + using Room; public interface IPollingService : IDisposable { diff --git a/Matrix.Sdk/Core/Domain/Services/PollingService.cs b/Matrix.Sdk/Core/Domain/Services/PollingService.cs index 0f37a26..9cce14d 100644 --- a/Matrix.Sdk/Core/Domain/Services/PollingService.cs +++ b/Matrix.Sdk/Core/Domain/Services/PollingService.cs @@ -8,7 +8,7 @@ namespace Matrix.Sdk.Core.Domain.Services using System.Threading.Tasks; using Infrastructure.Dto.Sync; using Infrastructure.Services; - using MatrixRoom; + using Room; using Microsoft.Extensions.Logging; public class PollingService : IPollingService diff --git a/Matrix.Sdk/Core/Domain/SyncBatch.cs b/Matrix.Sdk/Core/Domain/SyncBatch.cs index 78e0faa..0225c6e 100644 --- a/Matrix.Sdk/Core/Domain/SyncBatch.cs +++ b/Matrix.Sdk/Core/Domain/SyncBatch.cs @@ -3,12 +3,12 @@ namespace Matrix.Sdk.Core.Domain using System.Collections.Generic; using System.Linq; using Infrastructure.Dto.Sync; - using MatrixRoom; + using Room; using RoomEvent; public record SyncBatch { - private SyncBatch(string nextBatch, List matrixRooms, + private SyncBatch(string nextBatch, List matrixRooms, List matrixRoomEvents) { NextBatch = nextBatch; @@ -17,29 +17,26 @@ public record SyncBatch } public string NextBatch { get; } - public List MatrixRooms { get; } + public List MatrixRooms { get; } public List MatrixRoomEvents { get; } internal static class Factory { - private static readonly MatrixRoomFactory MatrixRoomFactory = new(); - private static readonly MatrixRoomEventFactory MatrixRoomEventFactory = new(); - public static SyncBatch CreateFromSync(string nextBatch, Rooms rooms) { - List matrixRooms = GetMatrixRoomsFromSync(rooms); + List matrixRooms = GetMatrixRoomsFromSync(rooms); List matrixRoomEvents = GetMatrixEventsFromSync(rooms); return new SyncBatch(nextBatch, matrixRooms, matrixRoomEvents); } - private static List GetMatrixRoomsFromSync(Rooms rooms) + private static List GetMatrixRoomsFromSync(Rooms rooms) { - var joinedMatrixRooms = rooms.Join.Select(pair => MatrixRoomFactory.Create(pair.Key, pair.Value, MatrixRoomStatus.Joined)) + var joinedMatrixRooms = rooms.Join.Select(pair => Room.MatrixRoom.Create(pair.Key, pair.Value, MatrixRoomStatus.Joined)) .ToList(); var invitedMatrixRooms = rooms.Invite - .Select(pair => MatrixRoomFactory.CreateInvite(pair.Key, pair.Value)).ToList(); - var leftMatrixRooms = rooms.Leave.Select(pair => MatrixRoomFactory.Create(pair.Key, pair.Value, MatrixRoomStatus.Left)) + .Select(pair => Room.MatrixRoom.CreateInvite(pair.Key, pair.Value)).ToList(); + var leftMatrixRooms = rooms.Leave.Select(pair => Room.MatrixRoom.Create(pair.Key, pair.Value, MatrixRoomStatus.Left)) .ToList(); return joinedMatrixRooms.Concat(invitedMatrixRooms).Concat(leftMatrixRooms).ToList(); @@ -48,11 +45,11 @@ private static List GetMatrixRoomsFromSync(Rooms rooms) private static List GetMatrixEventsFromSync(Rooms rooms) { var joinedMatrixRoomEvents = rooms.Join - .SelectMany(pair => MatrixRoomEventFactory.CreateFromJoined(pair.Key, pair.Value)).ToList(); + .SelectMany(pair => BaseRoomEvent.Create(pair.Key, pair.Value)).ToList(); var invitedMatrixRoomEvents = rooms.Invite - .SelectMany(pair => MatrixRoomEventFactory.CreateFromInvited(pair.Key, pair.Value)).ToList(); + .SelectMany(pair => BaseRoomEvent.CreateFromInvited(pair.Key, pair.Value)).ToList(); var leftMatrixRoomEvents = rooms.Leave - .SelectMany(pair => MatrixRoomEventFactory.CreateFromJoined(pair.Key, pair.Value)).ToList(); + .SelectMany(pair => BaseRoomEvent.Create(pair.Key, pair.Value)).ToList(); return joinedMatrixRoomEvents.Concat(invitedMatrixRoomEvents).Concat(leftMatrixRoomEvents).ToList(); } diff --git a/Matrix.Sdk/Core/Infrastructure/Dto/Sync/Event/Room/RoomEvent.cs b/Matrix.Sdk/Core/Infrastructure/Dto/Sync/Event/Room/RoomEventResponse.cs similarity index 96% rename from Matrix.Sdk/Core/Infrastructure/Dto/Sync/Event/Room/RoomEvent.cs rename to Matrix.Sdk/Core/Infrastructure/Dto/Sync/Event/Room/RoomEventResponse.cs index dec6aae..ac26fee 100644 --- a/Matrix.Sdk/Core/Infrastructure/Dto/Sync/Event/Room/RoomEvent.cs +++ b/Matrix.Sdk/Core/Infrastructure/Dto/Sync/Event/Room/RoomEventResponse.cs @@ -3,7 +3,7 @@ namespace Matrix.Sdk.Core.Infrastructure.Dto.Sync.Event.Room { - public record RoomEvent : BaseEvent + public record RoomEventResponse : BaseEvent { /// /// Required. The globally unique event identifier. diff --git a/Matrix.Sdk/Core/Infrastructure/Dto/Sync/Event/Room/RoomStateEvent.cs b/Matrix.Sdk/Core/Infrastructure/Dto/Sync/Event/Room/RoomStateEvent.cs index 635a891..768f07a 100644 --- a/Matrix.Sdk/Core/Infrastructure/Dto/Sync/Event/Room/RoomStateEvent.cs +++ b/Matrix.Sdk/Core/Infrastructure/Dto/Sync/Event/Room/RoomStateEvent.cs @@ -1,6 +1,6 @@ namespace Matrix.Sdk.Core.Infrastructure.Dto.Sync.Event.Room { - public record RoomStateEvent : RoomEvent + public record RoomStateEvent : RoomEventResponse { /// /// Required. diff --git a/Matrix.Sdk/Core/Infrastructure/Dto/Sync/SyncResponse.cs b/Matrix.Sdk/Core/Infrastructure/Dto/Sync/SyncResponse.cs index ecfd8d8..2ca8671 100644 --- a/Matrix.Sdk/Core/Infrastructure/Dto/Sync/SyncResponse.cs +++ b/Matrix.Sdk/Core/Infrastructure/Dto/Sync/SyncResponse.cs @@ -44,7 +44,7 @@ public record InvitedRoom(InviteState InviteState); /// /// The timeline of messages and state changes in the room. /// - public record Timeline(List Events); + public record Timeline(List Events); /// /// Updates to the state, between the time indicated by the since parameter, diff --git a/Matrix.Sdk/Core/Infrastructure/Services/EventService.cs b/Matrix.Sdk/Core/Infrastructure/Services/EventService.cs index 3806ca7..4cead9b 100644 --- a/Matrix.Sdk/Core/Infrastructure/Services/EventService.cs +++ b/Matrix.Sdk/Core/Infrastructure/Services/EventService.cs @@ -120,8 +120,8 @@ public struct Unsigned public string start; - public RoomEvent[] chunk; - public RoomEvent[] state; + public RoomEventResponse[] chunk; + public RoomEventResponse[] state; public string end; } @@ -145,37 +145,38 @@ public async Task> GetTimelineEventsAsync(string accessToken HttpClient httpClient = CreateHttpClient(accessToken); var response = await httpClient.GetAsJsonAsync(path, cancellationToken); + + foreach (var roomEvent in response.chunk) { - foreach (var roomEvent in response.chunk) + if (roomEvent.EventId == fromEventId) { - if (roomEvent.EventId == fromEventId) - { - Console.WriteLine($"hit from event: {fromEventId}"); - hasHitFromEvent = true; - } + hasHitFromEvent = true; + } - if (!hasHitFromEvent) - { - continue; - } + if (!hasHitFromEvent) + { + continue; + } - var ev = MatrixUtil.Concretize(roomEvent); - if (ev != null) - { - events.Add(ev); - } - else - { - Console.WriteLine($"Unable to concretize event: {JsonConvert.SerializeObject(roomEvent, Formatting.Indented)}"); - } + var ev = BaseRoomEvent.Create(roomEvent.RoomId, roomEvent); + if (ev != null) + { + events.Add(ev); + } + else + { + Console.WriteLine($"Unable to concretize event: {JsonConvert.SerializeObject(roomEvent, Formatting.Indented)}"); + } + if (ev != null) + { if (await stopCallback.Invoke(ev)) { return events; } } } - + fromToken = response.end; if ((response.chunk == null || response.chunk.Length == 0) && (response.state == null || response.state.Length == 0)) diff --git a/Matrix.Sdk/IMatrixClient.cs b/Matrix.Sdk/IMatrixClient.cs index 13f089a..9b46162 100644 --- a/Matrix.Sdk/IMatrixClient.cs +++ b/Matrix.Sdk/IMatrixClient.cs @@ -9,7 +9,7 @@ namespace Matrix.Sdk using System; using System.Collections.Generic; using System.Threading.Tasks; - using Core.Domain.MatrixRoom; + using Core.Domain.Room; using Core.Infrastructure.Dto.Room.Create; using Core.Infrastructure.Dto.Room.Join; diff --git a/Matrix.Sdk/MatrixClient.cs b/Matrix.Sdk/MatrixClient.cs index 79d6347..4133ec6 100644 --- a/Matrix.Sdk/MatrixClient.cs +++ b/Matrix.Sdk/MatrixClient.cs @@ -8,7 +8,7 @@ namespace Matrix.Sdk using System.Threading; using System.Threading.Tasks; using Core.Domain; - using Core.Domain.MatrixRoom; + using Core.Domain.Room; using Core.Domain.Services; using Core.Infrastructure.Dto.Event; using Core.Infrastructure.Dto.Login; diff --git a/Matrix.Sdk/MatrixUtil.cs b/Matrix.Sdk/MatrixUtil.cs deleted file mode 100644 index f30f713..0000000 --- a/Matrix.Sdk/MatrixUtil.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Matrix.Sdk.Core.Domain.MatrixRoom; -using Matrix.Sdk.Core.Domain.RoomEvent; -using Matrix.Sdk.Core.Infrastructure.Dto.Sync.Event.Room; -using Matrix.Sdk.Core.Infrastructure.Services; -using Newtonsoft.Json; - -namespace Matrix.Sdk -{ - public static class MatrixUtil - { - - // factory bad - private static readonly MatrixRoomEventFactory matrixRoomEventFactory = new(); - - public static BaseRoomEvent Concretize(RoomEvent roomEvent) - { - var e = matrixRoomEventFactory.CreateFromJoined(roomEvent.RoomId, roomEvent); - if (e == null) - { - e = matrixRoomEventFactory.CreateFromJoined(roomEvent.RoomId, roomEvent); - } - - return e; - } - } -} \ No newline at end of file