diff --git a/LibMatrix/Responses/SyncResponse.cs b/LibMatrix/Responses/SyncResponse.cs
index 977de3e..362ccc4 100644
--- a/LibMatrix/Responses/SyncResponse.cs
+++ b/LibMatrix/Responses/SyncResponse.cs
@@ -1,6 +1,5 @@
+using System.Diagnostics;
using System.Text.Json.Serialization;
-using LibMatrix.EventTypes.Spec.Ephemeral;
-using LibMatrix.EventTypes.Spec.State;
using LibMatrix.EventTypes.Spec.State.RoomInfo;
namespace LibMatrix.Responses;
@@ -31,6 +30,9 @@ public class SyncResponse {
[JsonPropertyName("device_lists")]
public DeviceListsDataStructure? DeviceLists { get; set; }
+ [JsonPropertyName("gay.rory.libmatrix.msc4222_sync_type")]
+ public Msc4222SyncType Msc4222Method { get; set; } = Msc4222SyncType.None;
+
public class DeviceListsDataStructure {
[JsonPropertyName("changed")]
public List<string>? Changed { get; set; }
@@ -42,7 +44,7 @@ public class SyncResponse {
// supporting classes
public class PresenceDataStructure {
[JsonPropertyName("events")]
- public List<StateEventResponse>? Events { get; set; }
+ public List<MatrixEventResponse>? Events { get; set; }
}
public class RoomsDataStructure {
@@ -65,6 +67,16 @@ public class SyncResponse {
[JsonPropertyName("state")]
public EventList? State { get; set; }
+ [JsonPropertyName("state_after")]
+ public EventList? StateAfter { get; set; }
+
+ [Obsolete("This property is only used for de/serialisation")]
+ [JsonPropertyName("org.matrix.msc4222.state_after")]
+ public EventList? StateAfterUnstable {
+ get => StateAfter;
+ set => StateAfter = value;
+ }
+
public override string ToString() {
var lastEvent = Timeline?.Events?.LastOrDefault(x => x.Type == "m.room.member");
var membership = (lastEvent?.TypedContent as RoomMemberEventContent);
@@ -79,6 +91,16 @@ public class SyncResponse {
[JsonPropertyName("state")]
public EventList? State { get; set; }
+ [JsonPropertyName("state_after")]
+ public EventList? StateAfter { get; set; }
+
+ [Obsolete("This property is only used for de/serialisation")]
+ [JsonPropertyName("org.matrix.msc4222.state_after")]
+ public EventList? StateAfterUnstable {
+ get => StateAfter;
+ set => StateAfter = value;
+ }
+
[JsonPropertyName("account_data")]
public EventList? AccountData { get; set; }
@@ -94,13 +116,13 @@ public class SyncResponse {
public class TimelineDataStructure : EventList {
public TimelineDataStructure() { }
- public TimelineDataStructure(List<StateEventResponse>? events, bool? limited) {
+ public TimelineDataStructure(List<MatrixEventResponse>? events, bool? limited) {
Events = events;
Limited = limited;
}
// [JsonPropertyName("events")]
- // public List<StateEventResponse>? Events { get; set; }
+ // public List<MatrixEventResponse>? Events { get; set; }
[JsonPropertyName("prev_batch")]
public string? PrevBatch { get; set; }
@@ -117,6 +139,7 @@ public class SyncResponse {
public int HighlightCount { get; set; }
}
+ [DebuggerDisplay("{JoinedMemberCount} joined, {InvitedMemberCount} invited, Heroes: {string.Join(\", \", Heroes ?? [])}")]
public class SummaryDataStructure {
[JsonPropertyName("m.heroes")]
public List<string>? Heroes { get; set; }
@@ -140,9 +163,16 @@ public class SyncResponse {
AccountData?.Events?.Max(x => x.OriginServerTs) ?? 0,
Presence?.Events?.Max(x => x.OriginServerTs) ?? 0,
ToDevice?.Events?.Max(x => x.OriginServerTs) ?? 0,
- Rooms?.Join?.Values?.Max(x => x.Timeline?.Events?.Max(y => y.OriginServerTs)) ?? 0,
- Rooms?.Invite?.Values?.Max(x => x.InviteState?.Events?.Max(y => y.OriginServerTs)) ?? 0,
- Rooms?.Leave?.Values?.Max(x => x.Timeline?.Events?.Max(y => y.OriginServerTs)) ?? 0
+ Rooms?.Join?.Values.Max(x => x.Timeline?.Events?.Max(y => y.OriginServerTs)) ?? 0,
+ Rooms?.Invite?.Values.Max(x => x.InviteState?.Events?.Max(y => y.OriginServerTs)) ?? 0,
+ Rooms?.Leave?.Values.Max(x => x.Timeline?.Events?.Max(y => y.OriginServerTs)) ?? 0
]).Max();
}
-}
+
+ [JsonConverter(typeof(JsonStringEnumConverter<Msc4222SyncType>))]
+ public enum Msc4222SyncType {
+ None,
+ Server,
+ Emulated
+ }
+}
\ No newline at end of file
|