From 03313562d21d5db9bf6a14ebbeab80e06c883d3a Mon Sep 17 00:00:00 2001 From: Rory& Date: Wed, 24 Jan 2024 02:31:56 +0100 Subject: MRU->RMU, fixes, cleanup --- .../TimelineComponents/BaseTimelineItem.razor | 33 ++++++++++++++ .../TimelineCanonicalAliasItem.razor | 27 +++++++++++ .../TimelineHistoryVisibilityItem.razor | 27 +++++++++++ .../TimelineComponents/TimelineMemberItem.razor | 53 ++++++++++++++++++++++ .../TimelineComponents/TimelineMessageItem.razor | 34 ++++++++++++++ .../TimelineRoomCreateItem.razor | 18 ++++++++ .../TimelineComponents/TimelineRoomNameItem.razor | 27 +++++++++++ .../TimelineComponents/TimelineRoomTopicItem.razor | 37 +++++++++++++++ .../TimelineComponents/TimelineUnknownItem.razor | 16 +++++++ 9 files changed, 272 insertions(+) create mode 100644 MatrixUtils.Web/Shared/TimelineComponents/BaseTimelineItem.razor create mode 100644 MatrixUtils.Web/Shared/TimelineComponents/TimelineCanonicalAliasItem.razor create mode 100644 MatrixUtils.Web/Shared/TimelineComponents/TimelineHistoryVisibilityItem.razor create mode 100644 MatrixUtils.Web/Shared/TimelineComponents/TimelineMemberItem.razor create mode 100644 MatrixUtils.Web/Shared/TimelineComponents/TimelineMessageItem.razor create mode 100644 MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomCreateItem.razor create mode 100644 MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomNameItem.razor create mode 100644 MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomTopicItem.razor create mode 100644 MatrixUtils.Web/Shared/TimelineComponents/TimelineUnknownItem.razor (limited to 'MatrixUtils.Web/Shared/TimelineComponents') diff --git a/MatrixUtils.Web/Shared/TimelineComponents/BaseTimelineItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/BaseTimelineItem.razor new file mode 100644 index 0000000..8d608e3 --- /dev/null +++ b/MatrixUtils.Web/Shared/TimelineComponents/BaseTimelineItem.razor @@ -0,0 +1,33 @@ +@using LibMatrix +@using LibMatrix.EventTypes.Spec.State +@using LibMatrix.Homeservers +@using LibMatrix.Responses +

BaseTimelineItem

+ +@code { + + [Parameter] + public StateEventResponse Event { get; set; } + + [Parameter] + public List Events { get; set; } + + [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/MatrixUtils.Web/Shared/TimelineComponents/TimelineCanonicalAliasItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineCanonicalAliasItem.razor new file mode 100644 index 0000000..1213432 --- /dev/null +++ b/MatrixUtils.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/MatrixUtils.Web/Shared/TimelineComponents/TimelineHistoryVisibilityItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineHistoryVisibilityItem.razor new file mode 100644 index 0000000..172a38c --- /dev/null +++ b/MatrixUtils.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/MatrixUtils.Web/Shared/TimelineComponents/TimelineMemberItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineMemberItem.razor new file mode 100644 index 0000000..3b18b95 --- /dev/null +++ b/MatrixUtils.Web/Shared/TimelineComponents/TimelineMemberItem.razor @@ -0,0 +1,53 @@ +@using ArcaneLibs.Extensions +@using LibMatrix.EventTypes.Spec.State +@using LibMatrix.Responses +@inherits BaseTimelineItem + +@if (roomMemberData is not null) { + @switch (roomMemberData.Membership) { + case "ban": + @Event.StateKey was banned + break; + case "invite": + @Event.StateKey was invited + break; + case "join" when Event.ReplacesState is not null: + @Event.StateKey changed their display name to @(roomMemberData.DisplayName ?? Event.Sender) + break; + case "join": + @if (prevRoomMemberData is null) { + joined + } + else { + changed their profile to + } + break; + case "leave": + @Event.StateKey left + break; + case "knock": + @Event.StateKey knocked + break; + default: + @Event.StateKey has an unknown state: +
+                @Event.ToJson()
+            
+ break; + } +} +else { +
+ Unknown membership event for @Event.StateKey +
+            @Event.ToJson()
+        
+
+} + +@code { + + private RoomMemberEventContent? roomMemberData => Event.TypedContent as RoomMemberEventContent; + private RoomMemberEventContent? prevRoomMemberData => PreviousState?.TypedContent as RoomMemberEventContent; + +} diff --git a/MatrixUtils.Web/Shared/TimelineComponents/TimelineMessageItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineMessageItem.razor new file mode 100644 index 0000000..81956b0 --- /dev/null +++ b/MatrixUtils.Web/Shared/TimelineComponents/TimelineMessageItem.razor @@ -0,0 +1,34 @@ +@using ArcaneLibs.Extensions +@using LibMatrix.EventTypes.Spec +@inherits BaseTimelineItem + + + @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/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomCreateItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomCreateItem.razor new file mode 100644 index 0000000..f3e6c7e --- /dev/null +++ b/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomCreateItem.razor @@ -0,0 +1,18 @@ +@using ArcaneLibs.Extensions +@using LibMatrix.EventTypes.Spec.State +@inherits BaseTimelineItem + + + @Event.Sender created the room with room version @CreationEventContent.RoomVersion + @(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)
+
+ +@code { + + private RoomCreateEventContent CreationEventContent => Event.TypedContent as RoomCreateEventContent; + +} diff --git a/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomNameItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomNameItem.razor new file mode 100644 index 0000000..eeec3de --- /dev/null +++ b/MatrixUtils.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/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomTopicItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomTopicItem.razor new file mode 100644 index 0000000..7ef17a8 --- /dev/null +++ b/MatrixUtils.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/MatrixUtils.Web/Shared/TimelineComponents/TimelineUnknownItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineUnknownItem.razor new file mode 100644 index 0000000..4f05b30 --- /dev/null +++ b/MatrixUtils.Web/Shared/TimelineComponents/TimelineUnknownItem.razor @@ -0,0 +1,16 @@ +@using ArcaneLibs.Extensions +@inherits BaseTimelineItem + +
+
+ + Unknown event type:
@Event.Type
+
+
@Event.ToJson(ignoreNull: true)
+
+
+ +@code { + + +} -- cgit 1.5.1