diff --git a/Utilities/LibMatrix.HomeserverEmulator/Controllers/LegacyController.cs b/Utilities/LibMatrix.HomeserverEmulator/Controllers/LegacyController.cs
index 245770e..4c4e970 100644
--- a/Utilities/LibMatrix.HomeserverEmulator/Controllers/LegacyController.cs
+++ b/Utilities/LibMatrix.HomeserverEmulator/Controllers/LegacyController.cs
@@ -42,7 +42,7 @@ public class LegacyController(ILogger<LegacyController> logger, TokenService tok
room_id = room.RoomId,
state = room.State.ToList(),
visibility = "public",
- messages = new PaginatedChunkedStateEventResponse() {
+ messages = new PaginatedChunkedMatrixEventResponse() {
Chunk = timelineChunk,
End = timelineChunk.Last().EventId,
Start = timelineChunk.Count >= limit ? timelineChunk.First().EventId : null
diff --git a/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomAccountDataController.cs b/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomAccountDataController.cs
index bac803f..7bab143 100644
--- a/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomAccountDataController.cs
+++ b/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomAccountDataController.cs
@@ -38,7 +38,7 @@ public class RoomAccountDataController(ILogger<RoomAccountDataController> logger
if (!room.AccountData.ContainsKey(user.UserId))
room.AccountData[user.UserId] = new();
- room.AccountData[user.UserId].Add(new StateEventResponse() {
+ room.AccountData[user.UserId].Add(new MatrixEventResponse() {
Type = "m.fully_read",
StateKey = user.UserId,
RawContent = new() {
@@ -46,7 +46,7 @@ public class RoomAccountDataController(ILogger<RoomAccountDataController> logger
}
});
- room.AccountData[user.UserId].Add(new StateEventResponse() {
+ room.AccountData[user.UserId].Add(new MatrixEventResponse() {
Type = "m.read",
StateKey = user.UserId,
RawContent = new() {
@@ -54,7 +54,7 @@ public class RoomAccountDataController(ILogger<RoomAccountDataController> logger
}
});
- room.AccountData[user.UserId].Add(new StateEventResponse() {
+ room.AccountData[user.UserId].Add(new MatrixEventResponse() {
Type = "m.read.private",
StateKey = user.UserId,
RawContent = new() {
diff --git a/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomMembersController.cs b/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomMembersController.cs
index 6c57cc4..f599e5e 100644
--- a/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomMembersController.cs
+++ b/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomMembersController.cs
@@ -13,7 +13,7 @@ public class RoomMembersController(
RoomStore roomStore,
PaginationTokenResolverService paginationTokenResolver) : ControllerBase {
[HttpGet("members")]
- public async Task<List<StateEventResponse>> GetMembers(string roomId, string? at = null, string? membership = null, string? not_membership = null) {
+ public async Task<List<MatrixEventResponse>> GetMembers(string roomId, string? at = null, string? membership = null, string? not_membership = null) {
var token = tokenService.GetAccessTokenOrNull(HttpContext);
if (token == null)
throw new MatrixException() {
@@ -44,7 +44,7 @@ public class RoomMembersController(
members = members.Where(x => (x.TypedContent as RoomMemberEventContent)?.Membership != not_membership).ToList();
if (at != null) {
- StateEventResponse? evt = null;
+ MatrixEventResponse? evt = null;
if (at.StartsWith('$'))
evt = await paginationTokenResolver.ResolveTokenToEvent(at, room);
diff --git a/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomStateController.cs b/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomStateController.cs
index 485c028..bc17b06 100644
--- a/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomStateController.cs
+++ b/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomStateController.cs
@@ -11,7 +11,7 @@ namespace LibMatrix.HomeserverEmulator.Controllers.Rooms;
[Route("/_matrix/client/{version}/rooms/{roomId}/state")]
public class RoomStateController(ILogger<RoomStateController> logger, TokenService tokenService, UserStore userStore, RoomStore roomStore) : ControllerBase {
[HttpGet("")]
- public async Task<FrozenSet<StateEventResponse>> GetState(string roomId) {
+ public async Task<FrozenSet<MatrixEventResponse>> GetState(string roomId) {
var token = tokenService.GetAccessTokenOrNull(HttpContext);
if (token == null)
throw new MatrixException() {
@@ -104,7 +104,7 @@ public class RoomStateController(ILogger<RoomStateController> logger, TokenServi
ErrorCode = "M_NOT_FOUND",
Error = "Room not found"
};
- var evt = room.SetStateInternal(new StateEvent() { Type = eventType, StateKey = stateKey, RawContent = request }.ToStateEvent(user, room));
+ var evt = room.SetStateInternal(new MatrixEvent() { Type = eventType, StateKey = stateKey, RawContent = request }.ToStateEvent(user, room));
evt.Type = eventType;
evt.StateKey = stateKey;
return new EventIdResponse() {
diff --git a/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomTimelineController.cs b/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomTimelineController.cs
index 61195b8..d05554c 100644
--- a/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomTimelineController.cs
+++ b/Utilities/LibMatrix.HomeserverEmulator/Controllers/Rooms/RoomTimelineController.cs
@@ -35,7 +35,7 @@ public class RoomTimelineController(
Error = "Room not found"
};
- var evt = new StateEvent() {
+ var evt = new MatrixEvent() {
RawContent = content,
Type = eventType
}.ToStateEvent(user, room);
@@ -100,7 +100,7 @@ public class RoomTimelineController(
}
[HttpGet("event/{eventId}")]
- public async Task<StateEventResponse> GetEvent(string roomId, string eventId) {
+ public async Task<MatrixEventResponse> GetEvent(string roomId, string eventId) {
var token = tokenService.GetAccessToken(HttpContext);
var user = await userStore.GetUserByToken(token);
@@ -128,7 +128,7 @@ public class RoomTimelineController(
}
[HttpGet("relations/{eventId}")]
- public async Task<RecursedBatchedChunkedStateEventResponse> GetRelations(string roomId, string eventId, [FromQuery] string? dir = "b", [FromQuery] string? from = null,
+ public async Task<RecursedBatchedChunkedMatrixEventResponse> GetRelations(string roomId, string eventId, [FromQuery] string? dir = "b", [FromQuery] string? from = null,
[FromQuery] int? limit = 100, [FromQuery] bool? recurse = false, [FromQuery] string? to = null) {
var token = tokenService.GetAccessToken(HttpContext);
var user = await userStore.GetUserByToken(token);
@@ -161,7 +161,7 @@ public class RoomTimelineController(
}
[HttpGet("relations/{eventId}/{relationType}")]
- public async Task<RecursedBatchedChunkedStateEventResponse> GetRelations(string roomId, string eventId, string relationType, [FromQuery] string? dir = "b",
+ public async Task<RecursedBatchedChunkedMatrixEventResponse> GetRelations(string roomId, string eventId, string relationType, [FromQuery] string? dir = "b",
[FromQuery] string? from = null, [FromQuery] int? limit = 100, [FromQuery] bool? recurse = false, [FromQuery] string? to = null) {
var token = tokenService.GetAccessToken(HttpContext);
var user = await userStore.GetUserByToken(token);
@@ -194,7 +194,7 @@ public class RoomTimelineController(
}
[HttpGet("relations/{eventId}/{relationType}/{eventType}")]
- public async Task<RecursedBatchedChunkedStateEventResponse> GetRelations(string roomId, string eventId, string relationType, string eventType, [FromQuery] string? dir = "b",
+ public async Task<RecursedBatchedChunkedMatrixEventResponse> GetRelations(string roomId, string eventId, string relationType, string eventType, [FromQuery] string? dir = "b",
[FromQuery] string? from = null, [FromQuery] int? limit = 100, [FromQuery] bool? recurse = false, [FromQuery] string? to = null) {
var token = tokenService.GetAccessToken(HttpContext);
var user = await userStore.GetUserByToken(token);
@@ -226,7 +226,7 @@ public class RoomTimelineController(
};
}
- private async Task<IEnumerable<StateEventResponse>> GetRelationsInternal(string roomId, string eventId, string dir, string? from, int? limit, bool? recurse, string? to) {
+ private async Task<IEnumerable<MatrixEventResponse>> GetRelationsInternal(string roomId, string eventId, string dir, string? from, int? limit, bool? recurse, string? to) {
var room = roomStore.GetRoomById(roomId);
var evt = room.Timeline.SingleOrDefault(x => x.EventId == eventId);
if (evt == null)
@@ -254,7 +254,7 @@ public class RoomTimelineController(
private void InternalSendMessage(RoomStore.Room room, RoomMessageEventContent content) {
logger.LogInformation("Sending internal message: {content}", content.Body);
- room.Timeline.Add(new StateEventResponse() {
+ room.Timeline.Add(new MatrixEventResponse() {
Type = RoomMessageEventContent.EventId,
TypedContent = content,
// Sender = $"@hse:{tokenService.GenerateServerName(HttpContext)}",
@@ -265,7 +265,7 @@ public class RoomTimelineController(
});
}
- private async Task HandleHseCommand(StateEventResponse evt, RoomStore.Room room, UserStore.User user) {
+ private async Task HandleHseCommand(MatrixEventResponse evt, RoomStore.Room room, UserStore.User user) {
logger.LogWarning("Handling HSE command for {0}: {1}", user.UserId, evt.RawContent.ToJson(false, true));
try {
var msgContent = evt.TypedContent as RoomMessageEventContent;
@@ -332,7 +332,7 @@ public class RoomTimelineController(
if (Random.Shared.Next(100) > 75) {
crq.CreationContent["type"] = "m.space";
foreach (var item in Random.Shared.GetItems(roomStore._rooms.ToArray(), 50)) {
- crq.InitialState!.Add(new StateEvent() {
+ crq.InitialState!.Add(new MatrixEvent() {
Type = "m.space.child",
StateKey = item.RoomId,
TypedContent = new SpaceChildEventContent() {
@@ -384,7 +384,7 @@ public class RoomTimelineController(
}
}
- private async Task HandleImportNhekoProfilesCommand(string[] args, StateEventResponse evt, RoomStore.Room room, UserStore.User user) {
+ private async Task HandleImportNhekoProfilesCommand(string[] args, MatrixEventResponse evt, RoomStore.Room room, UserStore.User user) {
var msgContent = evt.TypedContent as RoomMessageEventContent;
var parts = msgContent.Body.Split('\n');
@@ -422,7 +422,7 @@ public class RoomTimelineController(
}
}
- private async Task HandleImportCommand(string[] args, StateEventResponse evt, RoomStore.Room room, UserStore.User user) {
+ private async Task HandleImportCommand(string[] args, MatrixEventResponse evt, RoomStore.Room room, UserStore.User user) {
var roomId = args[0];
var profile = args[1];
diff --git a/Utilities/LibMatrix.HomeserverEmulator/Extensions/EventExtensions.cs b/Utilities/LibMatrix.HomeserverEmulator/Extensions/EventExtensions.cs
index d938b1b..15e41d4 100644
--- a/Utilities/LibMatrix.HomeserverEmulator/Extensions/EventExtensions.cs
+++ b/Utilities/LibMatrix.HomeserverEmulator/Extensions/EventExtensions.cs
@@ -3,8 +3,8 @@ using LibMatrix.HomeserverEmulator.Services;
namespace LibMatrix.HomeserverEmulator.Extensions;
public static class EventExtensions {
- public static StateEventResponse ToStateEvent(this StateEvent stateEvent, UserStore.User user, RoomStore.Room room) {
- return new StateEventResponse {
+ public static MatrixEventResponse ToStateEvent(this StateEvent stateEvent, UserStore.User user, RoomStore.Room room) {
+ return new MatrixEventResponse {
RawContent = stateEvent.RawContent,
EventId = "$" + string.Join("", Random.Shared.GetItems("abcdefghijklmnopqrstuvwxyzABCDEFGHIJLKMNOPQRSTUVWXYZ0123456789".ToCharArray(), 100)),
RoomId = room.RoomId,
@@ -15,7 +15,7 @@ public static class EventExtensions {
};
}
- public static List<StateEventResponse> GetCalculatedState(this IEnumerable<StateEventResponse> events) {
+ public static List<MatrixEventResponse> GetCalculatedState(this IEnumerable<MatrixEventResponse> events) {
return events.Where(s => s.StateKey != null)
.OrderByDescending(s => s.OriginServerTs)
.DistinctBy(x => (x.Type, x.StateKey))
diff --git a/Utilities/LibMatrix.HomeserverEmulator/Services/PaginationTokenResolverService.cs b/Utilities/LibMatrix.HomeserverEmulator/Services/PaginationTokenResolverService.cs
index 0603a2d..7324bd8 100644
--- a/Utilities/LibMatrix.HomeserverEmulator/Services/PaginationTokenResolverService.cs
+++ b/Utilities/LibMatrix.HomeserverEmulator/Services/PaginationTokenResolverService.cs
@@ -35,7 +35,7 @@ public class PaginationTokenResolverService(ILogger<PaginationTokenResolverServi
}
}
- public Task<StateEventResponse?> ResolveTokenToEvent(string token, RoomStore.Room room) {
+ public Task<MatrixEventResponse?> ResolveTokenToEvent(string token, RoomStore.Room room) {
if (token.StartsWith('$')) {
//we have an event ID
logger.LogTrace("ResolveTokenToEvent(EventId({token}), Room({room})): searching for event...", token, room.RoomId);
@@ -43,7 +43,7 @@ public class PaginationTokenResolverService(ILogger<PaginationTokenResolverServi
var evt = room.Timeline.SingleOrDefault(x => x.EventId == token);
if (evt is not null) return Task.FromResult(evt);
logger.LogTrace("ResolveTokenToEvent({token}, Room({room})): event not in requested room...", token, room.RoomId);
- return Task.FromResult<StateEventResponse?>(null);
+ return Task.FromResult<MatrixEventResponse?>(null);
}
else {
// we have a sync token
diff --git a/Utilities/LibMatrix.HomeserverEmulator/Services/RoomStore.cs b/Utilities/LibMatrix.HomeserverEmulator/Services/RoomStore.cs
index b6fe7c2..232863f 100644
--- a/Utilities/LibMatrix.HomeserverEmulator/Services/RoomStore.cs
+++ b/Utilities/LibMatrix.HomeserverEmulator/Services/RoomStore.cs
@@ -51,7 +51,7 @@ public class RoomStore {
public Room CreateRoom(CreateRoomRequest request, UserStore.User? user = null) {
var room = new Room(roomId: $"!{Guid.NewGuid().ToString()}");
- var newCreateEvent = new StateEvent() {
+ var newCreateEvent = new MatrixEvent() {
Type = RoomCreateEventContent.EventId,
RawContent = new()
};
@@ -78,7 +78,7 @@ public class RoomStore {
}
if (!string.IsNullOrWhiteSpace(request.Name))
- room.SetStateInternal(new StateEvent() {
+ room.SetStateInternal(new MatrixEvent() {
Type = RoomNameEventContent.EventId,
TypedContent = new RoomNameEventContent() {
Name = request.Name
@@ -86,7 +86,7 @@ public class RoomStore {
});
if (!string.IsNullOrWhiteSpace(request.RoomAliasName))
- room.SetStateInternal(new StateEvent() {
+ room.SetStateInternal(new MatrixEvent() {
Type = RoomCanonicalAliasEventContent.EventId,
TypedContent = new RoomCanonicalAliasEventContent() {
Alias = $"#{request.RoomAliasName}:localhost"
@@ -112,10 +112,10 @@ public class RoomStore {
public class Room : NotifyPropertyChanged {
private CancellationTokenSource _debounceCts = new();
- private ObservableCollection<StateEventResponse> _timeline;
- private ObservableDictionary<string, List<StateEventResponse>> _accountData;
+ private ObservableCollection<MatrixEventResponse> _timeline;
+ private ObservableDictionary<string, List<MatrixEventResponse>> _accountData;
private ObservableDictionary<string, ReadMarkersData> _readMarkers;
- private FrozenSet<StateEventResponse> _stateCache;
+ private FrozenSet<MatrixEventResponse> _stateCache;
private int _timelineHash;
public Room(string roomId) {
@@ -129,9 +129,9 @@ public class RoomStore {
public string RoomId { get; set; }
- public FrozenSet<StateEventResponse> State => _timelineHash == _timeline.GetHashCode() ? _stateCache : RebuildState();
+ public FrozenSet<MatrixEventResponse> State => _timelineHash == _timeline.GetHashCode() ? _stateCache : RebuildState();
- public ObservableCollection<StateEventResponse> Timeline {
+ public ObservableCollection<MatrixEventResponse> Timeline {
get => _timeline;
set {
if (Equals(value, _timeline)) return;
@@ -140,7 +140,7 @@ public class RoomStore {
// we dont want to do this as it's rebuilt when the state is accessed
// if (args.Action == NotifyCollectionChangedAction.Add) {
- // foreach (StateEventResponse state in args.NewItems) {
+ // foreach (MatrixEventResponse state in args.NewItems) {
// if (state.StateKey is not null)
// // we want state to be deduplicated by type and key, and we want the latest state to be the one that is returned
// RebuildState();
@@ -154,7 +154,7 @@ public class RoomStore {
}
}
- public ObservableDictionary<string, List<StateEventResponse>> AccountData {
+ public ObservableDictionary<string, List<MatrixEventResponse>> AccountData {
get => _accountData;
set {
if (Equals(value, _accountData)) return;
@@ -164,7 +164,7 @@ public class RoomStore {
}
}
- public ImmutableList<StateEventResponse> JoinedMembers =>
+ public ImmutableList<MatrixEventResponse> JoinedMembers =>
State.Where(s => s is { Type: RoomMemberEventContent.EventId, TypedContent: RoomMemberEventContent { Membership: "join" } }).ToImmutableList();
public ObservableDictionary<string, ReadMarkersData> ReadMarkers {
@@ -177,8 +177,8 @@ public class RoomStore {
}
}
- internal StateEventResponse SetStateInternal(StateEvent request, string? senderId = null, UserStore.User? user = null) {
- var state = request as StateEventResponse ?? new StateEventResponse() {
+ internal MatrixEventResponse SetStateInternal(MatrixEvent request, string? senderId = null, UserStore.User? user = null) {
+ var state = request as MatrixEventResponse ?? new MatrixEventResponse() {
Type = request.Type,
StateKey = request.StateKey ?? "",
EventId = "$" + Guid.NewGuid().ToString(),
@@ -195,7 +195,7 @@ public class RoomStore {
return state;
}
- public StateEventResponse AddUser(string userId) {
+ public MatrixEventResponse AddUser(string userId) {
var state = SetStateInternal(new() {
Type = RoomMemberEventContent.EventId,
StateKey = userId,
@@ -245,15 +245,15 @@ public class RoomStore {
private SemaphoreSlim stateRebuildSemaphore = new(1, 1);
- private FrozenSet<StateEventResponse> RebuildState() {
+ private FrozenSet<MatrixEventResponse> RebuildState() {
stateRebuildSemaphore.Wait();
while (true)
try {
Console.WriteLine($"Rebuilding state for room {RoomId}");
// ReSharper disable once RedundantEnumerableCastCall - This sometimes happens when the collection is modified during enumeration
- List<StateEventResponse>? timeline = null;
+ List<MatrixEventResponse>? timeline = null;
lock (_timeline) {
- timeline = Timeline.OfType<StateEventResponse>().ToList();
+ timeline = Timeline.OfType<MatrixEventResponse>().ToList();
}
foreach (var evt in timeline) {
@@ -284,7 +284,7 @@ public class RoomStore {
}
}
- public List<StateEventResponse> GetRoomsByMember(string userId) {
+ public List<MatrixEventResponse> GetRoomsByMember(string userId) {
// return _rooms
// // .Where(r => r.State.Any(s => s.Type == RoomMemberEventContent.EventId && s.StateKey == userId))
// .Select(r => (Room: r, MemberEvent: r.State.SingleOrDefault(s => s.Type == RoomMemberEventContent.EventId && s.StateKey == userId)))
diff --git a/Utilities/LibMatrix.HomeserverEmulator/Services/UserStore.cs b/Utilities/LibMatrix.HomeserverEmulator/Services/UserStore.cs
index 7f211e3..124a082 100644
--- a/Utilities/LibMatrix.HomeserverEmulator/Services/UserStore.cs
+++ b/Utilities/LibMatrix.HomeserverEmulator/Services/UserStore.cs
@@ -75,19 +75,18 @@ public class UserStore {
UserId = $"@{localPart}:{_config.ServerName}",
IsGuest = kind == "guest",
AccountData = new() {
- new StateEventResponse() {
+ new MatrixEventResponse() {
Type = "im.vector.analytics",
RawContent = new JsonObject() {
["pseudonymousAnalyticsOptIn"] = false
},
},
- new StateEventResponse() {
+ new MatrixEventResponse() {
Type = "im.vector.web.settings",
RawContent = new JsonObject() {
["developerMode"] = true,
["alwaysShowTimestamps"] = true,
["SpotlightSearch.showNsfwPublicRooms"] = true,
-
}
},
new() {
@@ -135,7 +134,7 @@ public class UserStore {
private ObservableDictionary<string, SessionInfo> _accessTokens;
private ObservableDictionary<string, SyncFilter> _filters;
private ObservableDictionary<string, object> _profile;
- private ObservableCollection<StateEventResponse> _accountData;
+ private ObservableCollection<MatrixEventResponse> _accountData;
private ObservableDictionary<string, RoomKeysResponse> _roomKeys;
private ObservableDictionary<string, LoginResponse> _authorizedSessions;
@@ -174,7 +173,7 @@ public class UserStore {
}
}
- public ObservableCollection<StateEventResponse> AccountData {
+ public ObservableCollection<MatrixEventResponse> AccountData {
get => _accountData;
set {
if (value == _accountData) return;
|