From c37bcb0e4a878d4f4c0e47988adb8624131c82cd Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Thu, 9 Nov 2023 07:38:33 +0100 Subject: event types --- .../TimelineComponents/BaseTimelineItem.razor | 19 ++++++++++- .../TimelineCanonicalAliasItem.razor | 27 ++++++++++++++++ .../TimelineHistoryVisibilityItem.razor | 27 ++++++++++++++++ .../TimelineComponents/TimelineMemberItem.razor | 8 ++++- .../TimelineComponents/TimelineMessageItem.razor | 32 ++++++++++++++++--- .../TimelineRoomCreateItem.razor | 6 ++-- .../TimelineComponents/TimelineRoomNameItem.razor | 27 ++++++++++++++++ .../TimelineComponents/TimelineRoomTopicItem.razor | 37 ++++++++++++++++++++++ .../TimelineComponents/TimelineUnknownItem.razor | 2 +- 9 files changed, 175 insertions(+), 10 deletions(-) create mode 100644 MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineCanonicalAliasItem.razor create mode 100644 MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineHistoryVisibilityItem.razor create mode 100644 MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineRoomNameItem.razor create mode 100644 MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineRoomTopicItem.razor (limited to 'MatrixRoomUtils.Web/Shared/TimelineComponents') diff --git a/MatrixRoomUtils.Web/Shared/TimelineComponents/BaseTimelineItem.razor b/MatrixRoomUtils.Web/Shared/TimelineComponents/BaseTimelineItem.razor index 9efeaab..8d608e3 100644 --- a/MatrixRoomUtils.Web/Shared/TimelineComponents/BaseTimelineItem.razor +++ b/MatrixRoomUtils.Web/Shared/TimelineComponents/BaseTimelineItem.razor @@ -1,5 +1,7 @@ @using LibMatrix +@using LibMatrix.EventTypes.Spec.State @using LibMatrix.Homeservers +@using LibMatrix.Responses

BaseTimelineItem

@code { @@ -13,4 +15,19 @@ [Parameter] public AuthenticatedHomeserverGeneric Homeserver { get; set; } -} + public List EventsBefore => Events.TakeWhile(e => e.EventId != Event.EventId).ToList(); + + public List MatchingEventsBefore => EventsBefore.Where(x => x.Type == Event.Type && x.StateKey == Event.StateKey).ToList(); + + public StateEventResponse? PreviousState => MatchingEventsBefore.LastOrDefault(); + + public RoomMemberEventContent? CurrentSenderMemberEventContent => EventsBefore.LastOrDefault(x => x.Type == "m.room.member" && x.StateKey == Event.Sender)? + .TypedContent as RoomMemberEventContent; + + public UserProfileResponse CurrentSenderProfile => new() { DisplayName = CurrentSenderMemberEventContent?.DisplayName, AvatarUrl = CurrentSenderMemberEventContent?.AvatarUrl }; + + public bool HasPreviousMessage => EventsBefore.Last() is { Type: "m.room.message" } response && response.Sender == Event.Sender; + + + +} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineCanonicalAliasItem.razor b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineCanonicalAliasItem.razor new file mode 100644 index 0000000..1213432 --- /dev/null +++ b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineCanonicalAliasItem.razor @@ -0,0 +1,27 @@ +@using ArcaneLibs.Extensions +@using LibMatrix.EventTypes.Spec.State +@using LibMatrix.Responses +@inherits BaseTimelineItem + +@if (currentEventContent is not null) { + @if (previousEventContent is null) { + set the room alias to "@currentEventContent.Alias" + } + else { + changed the room name from "@previousEventContent.Alias" to "@currentEventContent.Alias" + } +} +else { +
+ Unknown event @Event.Type (@Event.StateKey) +
+            @Event.ToJson()
+        
+
+} + +@code { + private RoomCanonicalAliasEventContent? previousEventContent => PreviousState?.TypedContent as RoomCanonicalAliasEventContent; + + private RoomCanonicalAliasEventContent? currentEventContent => Event.TypedContent as RoomCanonicalAliasEventContent; +} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineHistoryVisibilityItem.razor b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineHistoryVisibilityItem.razor new file mode 100644 index 0000000..172a38c --- /dev/null +++ b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineHistoryVisibilityItem.razor @@ -0,0 +1,27 @@ +@using ArcaneLibs.Extensions +@using LibMatrix.EventTypes.Spec.State +@using LibMatrix.Responses +@inherits BaseTimelineItem + +@if (currentEventContent is not null) { + @if (previousEventContent is null) { + set the history visibility to "@currentEventContent.HistoryVisibility" + } + else { + changed the history visibility from "@previousEventContent.HistoryVisibility" to "@currentEventContent.HistoryVisibility" + } +} +else { +
+ Unknown event @Event.Type (@Event.StateKey) +
+            @Event.ToJson()
+        
+
+} + +@code { + private RoomHistoryVisibilityEventContent? previousEventContent => PreviousState?.TypedContent as RoomHistoryVisibilityEventContent; + + private RoomHistoryVisibilityEventContent? currentEventContent => Event.TypedContent as RoomHistoryVisibilityEventContent; +} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineMemberItem.razor b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineMemberItem.razor index ed4dceb..3b18b95 100644 --- a/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineMemberItem.razor +++ b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineMemberItem.razor @@ -15,7 +15,12 @@ @Event.StateKey changed their display name to @(roomMemberData.DisplayName ?? Event.Sender) break; case "join": - joined + @if (prevRoomMemberData is null) { + joined + } + else { + changed their profile to + } break; case "leave": @Event.StateKey left @@ -43,5 +48,6 @@ else { @code { private RoomMemberEventContent? roomMemberData => Event.TypedContent as RoomMemberEventContent; + private RoomMemberEventContent? prevRoomMemberData => PreviousState?.TypedContent as RoomMemberEventContent; } diff --git a/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineMessageItem.razor b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineMessageItem.razor index 8073406..81956b0 100644 --- a/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineMessageItem.razor +++ b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineMessageItem.razor @@ -1,10 +1,34 @@ @using ArcaneLibs.Extensions +@using LibMatrix.EventTypes.Spec @inherits BaseTimelineItem -
-    @Event.RawContent?.ToJson(indent: false)
-
+ + @if (!HasPreviousMessage) { + :
+ } + @switch (currentEventContent.MessageType) { + case "m.text": { + @foreach (var line in currentEventContent.Body.Split('\n')) { + @line
+ } + break; + } + case "m.image": { + @currentEventContent.Body
+ + break; + } + default: { +
+               @Event.RawContent?.ToJson(indent: false)
+            
+ break; + } + } +
@code { + private RoomMessageEventContent? previousEventContent => PreviousState?.TypedContent as RoomMessageEventContent; -} + private RoomMessageEventContent? currentEventContent => Event.TypedContent as RoomMessageEventContent; +} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineRoomCreateItem.razor b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineRoomCreateItem.razor index 2d05151..f3e6c7e 100644 --- a/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineRoomCreateItem.razor +++ b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineRoomCreateItem.razor @@ -2,11 +2,11 @@ @using LibMatrix.EventTypes.Spec.State @inherits BaseTimelineItem -

+ @Event.Sender created the room with room version @CreationEventContent.RoomVersion - @(CreationEventContent.Federate ?? false ? "and" : "without") federating with other servers.
+ @(CreationEventContent.Federate ?? true ? "and" : "without") federating with other servers.
This room is of type @(CreationEventContent.Type ?? "Untyped room (usually a chat room)") -

+
     @Event.RawContent?.ToJson(indent: false)
 
diff --git a/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineRoomNameItem.razor b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineRoomNameItem.razor new file mode 100644 index 0000000..eeec3de --- /dev/null +++ b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineRoomNameItem.razor @@ -0,0 +1,27 @@ +@using ArcaneLibs.Extensions +@using LibMatrix.EventTypes.Spec.State +@using LibMatrix.Responses +@inherits BaseTimelineItem + +@if (currentEventContent is not null) { + @if (previousEventContent is null) { + set the room name to "@currentEventContent.Name" + } + else { + changed the room name from "@previousEventContent.Name" to "@currentEventContent.Name" + } +} +else { +
+ Unknown event @Event.Type (@Event.StateKey) +
+            @Event.ToJson()
+        
+
+} + +@code { + private RoomNameEventContent? previousEventContent => PreviousState?.TypedContent as RoomNameEventContent; + + private RoomNameEventContent? currentEventContent => Event.TypedContent as RoomNameEventContent; +} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineRoomTopicItem.razor b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineRoomTopicItem.razor new file mode 100644 index 0000000..7ef17a8 --- /dev/null +++ b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineRoomTopicItem.razor @@ -0,0 +1,37 @@ +@using ArcaneLibs.Extensions +@using LibMatrix.EventTypes.Spec.State +@using LibMatrix.Responses +@inherits BaseTimelineItem + +@if (currentEventContent is not null) { + @if (previousEventContent is null) { + set the room topic to
+
+            @currentEventContent.Topic
+        
+ } + else { + changed the room topic from
+
+            @previousEventContent.Topic
+        

+ to
+
+            @currentEventContent.Topic
+        
+ } +} +else { +
+ Unknown event @Event.Type (@Event.StateKey) +
+            @Event.ToJson()
+        
+
+} + +@code { + private RoomTopicEventContent? previousEventContent => PreviousState?.TypedContent as RoomTopicEventContent; + + private RoomTopicEventContent? currentEventContent => Event.TypedContent as RoomTopicEventContent; +} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineUnknownItem.razor b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineUnknownItem.razor index 1ab530d..4f05b30 100644 --- a/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineUnknownItem.razor +++ b/MatrixRoomUtils.Web/Shared/TimelineComponents/TimelineUnknownItem.razor @@ -6,7 +6,7 @@ Unknown event type:
@Event.Type
-
@Event.ToJson()
+
@Event.ToJson(ignoreNull: true)
-- cgit 1.5.1