Skip to content

Commit

Permalink
some refactoring, fixed crash when an event fails to concretize
Browse files Browse the repository at this point in the history
  • Loading branch information
SlimeQ committed May 9, 2023
1 parent 07bafb6 commit 59960a1
Show file tree
Hide file tree
Showing 23 changed files with 127 additions and 190 deletions.
2 changes: 1 addition & 1 deletion Matrix.Sdk.Sample.Console/Sample.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
36 changes: 20 additions & 16 deletions Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoom.cs
Original file line number Diff line number Diff line change
@@ -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<string> JoinedUserIds)
{
public MatrixRoom(string id, MatrixRoomStatus status, List<string> joinedUserIds)
public static MatrixRoom Create(string roomId, RoomResponse joinedRoom, MatrixRoomStatus status)
{
Id = id;
Status = status;
JoinedUserIds = joinedUserIds;
}
var joinedUserIds = new List<string>();
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<string>();
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<string>();
foreach (RoomStrippedState timelineEvent in invitedRoom.InviteState.Events)
if (JoinRoomEvent.Factory.TryCreateFromStrippedState(timelineEvent, roomId,
out JoinRoomEvent joinRoomEvent))
joinedUserIds.Add(joinRoomEvent!.SenderUserId);

public List<string> JoinedUserIds { get; }
return new MatrixRoom(roomId, MatrixRoomStatus.Invited, joinedUserIds);
}
}
}
62 changes: 0 additions & 62 deletions Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomEventFactory.cs

This file was deleted.

33 changes: 0 additions & 33 deletions Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomFactory.cs

This file was deleted.

2 changes: 1 addition & 1 deletion Matrix.Sdk/Core/Domain/MatrixRoom/MatrixRoomStatus.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Matrix.Sdk.Core.Domain.MatrixRoom
namespace Matrix.Sdk.Core.Domain.Room
{
public enum MatrixRoomStatus
{
Expand Down
58 changes: 57 additions & 1 deletion Matrix.Sdk/Core/Domain/RoomEvent/BaseRoomEvent.cs
Original file line number Diff line number Diff line change
@@ -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<BaseRoomEvent> Create(string roomId, RoomResponse joinedRoom)
{
var roomEvents = new List<BaseRoomEvent>();

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<BaseRoomEvent> CreateFromInvited(string roomId, InvitedRoom invitedRoom)
{
var roomEvents = new List<BaseRoomEvent>();

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;
}
}
}
2 changes: 1 addition & 1 deletion Matrix.Sdk/Core/Domain/RoomEvent/CreateRoomEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<RoomCreateContent>();
if (roomEvent.EventType == EventType.Create && content != null)
Expand Down
2 changes: 1 addition & 1 deletion Matrix.Sdk/Core/Domain/RoomEvent/ImageMessageEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<ImageContent>();
if (roomEvent.EventType == EventType.Message && content?.MessageType == MessageType.Image)
Expand Down
2 changes: 1 addition & 1 deletion Matrix.Sdk/Core/Domain/RoomEvent/InviteToRoomEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<RoomMemberContent>();
Expand Down
2 changes: 1 addition & 1 deletion Matrix.Sdk/Core/Domain/RoomEvent/JoinRoomEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<RoomMemberContent>();
if (roomEvent.EventType == EventType.Member && content?.UserMembershipState == UserMembershipState.Join)
Expand Down
2 changes: 1 addition & 1 deletion Matrix.Sdk/Core/Domain/RoomEvent/ReactionEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<MessageContent>();
if (roomEvent.EventType == EventType.Reaction && content?.relatesTo.rel_type == "m.annotation")
Expand Down
2 changes: 1 addition & 1 deletion Matrix.Sdk/Core/Domain/RoomEvent/RedactionEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<ReasonObj>();
if (roomEvent.EventType == EventType.Redaction)
Expand Down
2 changes: 1 addition & 1 deletion Matrix.Sdk/Core/Domain/RoomEvent/TextMessageEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<MessageContent>();
if (roomEvent.EventType == EventType.Message && content?.MessageType == MessageType.Text)
Expand Down
2 changes: 1 addition & 1 deletion Matrix.Sdk/Core/Domain/Services/IPollingService.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
namespace Matrix.Sdk.Core.Domain.Services
{
using System;
using MatrixRoom;
using Room;

public interface IPollingService : IDisposable
{
Expand Down
2 changes: 1 addition & 1 deletion Matrix.Sdk/Core/Domain/Services/PollingService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
25 changes: 11 additions & 14 deletions Matrix.Sdk/Core/Domain/SyncBatch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<MatrixRoom.MatrixRoom> matrixRooms,
private SyncBatch(string nextBatch, List<Room.MatrixRoom> matrixRooms,
List<BaseRoomEvent> matrixRoomEvents)
{
NextBatch = nextBatch;
Expand All @@ -17,29 +17,26 @@ public record SyncBatch
}

public string NextBatch { get; }
public List<MatrixRoom.MatrixRoom> MatrixRooms { get; }
public List<Room.MatrixRoom> MatrixRooms { get; }
public List<BaseRoomEvent> 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<MatrixRoom.MatrixRoom> matrixRooms = GetMatrixRoomsFromSync(rooms);
List<Room.MatrixRoom> matrixRooms = GetMatrixRoomsFromSync(rooms);
List<BaseRoomEvent> matrixRoomEvents = GetMatrixEventsFromSync(rooms);

return new SyncBatch(nextBatch, matrixRooms, matrixRoomEvents);
}

private static List<MatrixRoom.MatrixRoom> GetMatrixRoomsFromSync(Rooms rooms)
private static List<Room.MatrixRoom> 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();
Expand All @@ -48,11 +45,11 @@ private static List<MatrixRoom.MatrixRoom> GetMatrixRoomsFromSync(Rooms rooms)
private static List<BaseRoomEvent> 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();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace Matrix.Sdk.Core.Infrastructure.Dto.Sync.Event.Room
{
public record RoomEvent : BaseEvent
public record RoomEventResponse : BaseEvent
{
/// <summary>
/// <b>Required.</b> The globally unique event identifier.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace Matrix.Sdk.Core.Infrastructure.Dto.Sync.Event.Room
{
public record RoomStateEvent : RoomEvent
public record RoomStateEvent : RoomEventResponse
{
/// <summary>
/// <b>Required.</b>
Expand Down
Loading

0 comments on commit 59960a1

Please sign in to comment.