diff --git a/MatrixRoomUtils.Core/Responses/CreateRoomRequest.cs b/MatrixRoomUtils.Core/Responses/CreateRoomRequest.cs
index 5df99f7..da7d569 100644
--- a/MatrixRoomUtils.Core/Responses/CreateRoomRequest.cs
+++ b/MatrixRoomUtils.Core/Responses/CreateRoomRequest.cs
@@ -6,58 +6,56 @@ using MatrixRoomUtils.Core.Extensions;
namespace MatrixRoomUtils.Core.Responses;
-public class CreateRoomRequest
-{
- [JsonPropertyName("name")] public string Name { get; set; } = null!;
+public class CreateRoomRequest {
+ [JsonIgnore] public CreationContentBaseType _creationContentBaseType;
+
+ public CreateRoomRequest() => _creationContentBaseType = new CreationContentBaseType(this);
+
+ [JsonPropertyName("name")]
+ public string Name { get; set; } = null!;
- [JsonPropertyName("room_alias_name")] public string RoomAliasName { get; set; } = null!;
+ [JsonPropertyName("room_alias_name")]
+ public string RoomAliasName { get; set; } = null!;
//we dont want to use this, we want more control
// [JsonPropertyName("preset")]
// public string Preset { get; set; } = null!;
- [JsonPropertyName("initial_state")] public List<StateEvent> InitialState { get; set; } = null!;
- [JsonPropertyName("visibility")] public string Visibility { get; set; } = null!;
+ [JsonPropertyName("initial_state")]
+ public List<StateEvent> InitialState { get; set; } = null!;
+
+ [JsonPropertyName("visibility")]
+ public string Visibility { get; set; } = null!;
[JsonPropertyName("power_level_content_override")]
public PowerLevelEvent PowerLevelContentOverride { get; set; } = null!;
- [JsonPropertyName("creation_content")] public JsonObject CreationContent { get; set; } = new();
+ [JsonPropertyName("creation_content")]
+ public JsonObject CreationContent { get; set; } = new();
/// <summary>
- /// For use only when you can't use the CreationContent property
+ /// For use only when you can't use the CreationContent property
/// </summary>
- public StateEvent this[string event_type, string event_key = ""]
- {
+ public StateEvent this[string event_type, string event_key = ""] {
get => InitialState.First(x => x.Type == event_type && x.StateKey == event_key);
- set
- {
+ set {
var stateEvent = InitialState.FirstOrDefault(x => x.Type == event_type && x.StateKey == event_key);
if (stateEvent == null)
- {
InitialState.Add(value);
- }
else
- {
InitialState[InitialState.IndexOf(stateEvent)] = value;
- }
}
}
//extra properties
[JsonIgnore]
- public string HistoryVisibility
- {
- get
- {
+ public string HistoryVisibility {
+ get {
var stateEvent = InitialState.FirstOrDefault(x => x.Type == "m.room.history_visibility");
- if (stateEvent == null)
- {
- InitialState.Add(new StateEvent()
- {
+ if (stateEvent == null) {
+ InitialState.Add(new StateEvent {
Type = "m.room.history_visibility",
- Content = new JsonObject()
- {
+ Content = new JsonObject {
["history_visibility"] = "shared"
}
});
@@ -66,22 +64,16 @@ public class CreateRoomRequest
return stateEvent.ContentAsJsonNode["history_visibility"].GetValue<string>();
}
- set
- {
+ set {
var stateEvent = InitialState.FirstOrDefault(x => x.Type == "m.room.history_visibility");
if (stateEvent == null)
- {
- InitialState.Add(new StateEvent()
- {
+ InitialState.Add(new StateEvent {
Type = "m.room.history_visibility",
- Content = new JsonObject()
- {
+ Content = new JsonObject {
["history_visibility"] = value
}
});
- }
- else
- {
+ else {
var v = stateEvent.ContentAsJsonNode;
v["history_visibility"] = value;
stateEvent.ContentAsJsonNode = v;
@@ -90,18 +82,13 @@ public class CreateRoomRequest
}
[JsonIgnore]
- public string RoomIcon
- {
- get
- {
+ public string RoomIcon {
+ get {
var stateEvent = InitialState.FirstOrDefault(x => x.Type == "m.room.avatar");
- if (stateEvent == null)
- {
- InitialState.Add(new StateEvent()
- {
+ if (stateEvent == null) {
+ InitialState.Add(new StateEvent {
Type = "m.room.avatar",
- Content = new JsonObject()
- {
+ Content = new JsonObject {
["url"] = ""
}
});
@@ -110,22 +97,16 @@ public class CreateRoomRequest
return stateEvent.ContentAsJsonNode["url"].GetValue<string>();
}
- set
- {
+ set {
var stateEvent = InitialState.FirstOrDefault(x => x.Type == "m.room.avatar");
if (stateEvent == null)
- {
- InitialState.Add(new StateEvent()
- {
+ InitialState.Add(new StateEvent {
Type = "m.room.avatar",
- Content = new JsonObject()
- {
+ Content = new JsonObject {
["url"] = value
}
});
- }
- else
- {
+ else {
var v = stateEvent.ContentAsJsonNode;
v["url"] = value;
stateEvent.ContentAsJsonNode = v;
@@ -177,64 +158,50 @@ public class CreateRoomRequest
// }
// }
- public ServerACL ServerACLs
- {
- get
- {
+ public ServerACL ServerACLs {
+ get {
var stateEvent = InitialState.FirstOrDefault(x => x.Type == "m.room.server_acl");
- if (stateEvent == null)
- {
- InitialState.Add(new StateEvent()
- {
+ if (stateEvent == null) {
+ InitialState.Add(new StateEvent {
Type = "m.room.server_acl",
- Content = new JsonObject()
- {
- ["allow"] = new JsonArray()
- {
+ Content = new JsonObject {
+ ["allow"] = new JsonArray {
"*"
},
["deny"] = new JsonArray()
}
});
- return new ServerACL()
- {
- Allow = new List<string>()
- {
+ return new ServerACL {
+ Allow = new List<string> {
"*"
},
Deny = new List<string>(),
AllowIpLiterals = true
};
}
- return new ServerACL()
- {
- Allow = JsonSerializer.Deserialize<List<string>>(stateEvent.ContentAsJsonNode["allow"]),
- Deny = JsonSerializer.Deserialize<List<string>>(stateEvent.ContentAsJsonNode["deny"]),
+
+ return new ServerACL {
+ Allow = stateEvent.ContentAsJsonNode["allow"].Deserialize<List<string>>(),
+ Deny = stateEvent.ContentAsJsonNode["deny"].Deserialize<List<string>>(),
AllowIpLiterals = true
};
}
- set
- {
+ set {
Console.WriteLine($"Setting server acl to {value.ToJson()}");
var stateEvent = InitialState.FirstOrDefault(x => x.Type == "m.room.server_acl");
if (stateEvent == null)
- {
- InitialState.Add(new StateEvent()
- {
+ InitialState.Add(new StateEvent {
Type = "m.room.server_acl",
- Content = new JsonObject()
- {
- ["allow"] = JsonArray.Parse(JsonSerializer.Serialize(value.Allow)),
- ["deny"] = JsonArray.Parse(JsonSerializer.Serialize(value.Deny))
- ["allow_ip_literals"] = value.AllowIpLiterals
+ Content = new JsonObject {
+ ["allow"] = JsonNode.Parse(JsonSerializer.Serialize(value.Allow)),
+ ["deny"] = JsonNode.Parse(JsonSerializer.Serialize(value.Deny))
+ ["allow_ip_literals"] = value.AllowIpLiterals
}
});
- }
- else
- {
+ else {
var v = stateEvent.ContentAsJsonNode;
- v["allow"] = JsonArray.Parse(JsonSerializer.Serialize(value.Allow));
- v["deny"] = JsonArray.Parse(JsonSerializer.Serialize(value.Deny));
+ v["allow"] = JsonNode.Parse(JsonSerializer.Serialize(value.Allow));
+ v["deny"] = JsonNode.Parse(JsonSerializer.Serialize(value.Deny));
v["allow_ip_literals"] = value.AllowIpLiterals;
stateEvent.ContentAsJsonNode = v;
Console.WriteLine($"v={v.ToJson()}");
@@ -243,14 +210,7 @@ public class CreateRoomRequest
}
}
-
- [JsonIgnore] public CreationContentBaseType _creationContentBaseType;
-
- public CreateRoomRequest() => _creationContentBaseType = new(this);
-
-
- public Dictionary<string, string> Validate()
- {
+ public Dictionary<string, string> Validate() {
Dictionary<string, string> errors = new();
if (!Regex.IsMatch(RoomAliasName, @"[a-zA-Z0-9_\-]+$"))
errors.Add("room_alias_name", "Room alias name must only contain letters, numbers, underscores, and hyphens.");
@@ -259,49 +219,65 @@ public class CreateRoomRequest
}
}
-public class CreationContentBaseType
-{
+public class CreationContentBaseType {
private readonly CreateRoomRequest createRoomRequest;
- public CreationContentBaseType(CreateRoomRequest createRoomRequest)
- {
- this.createRoomRequest = createRoomRequest;
- }
+ public CreationContentBaseType(CreateRoomRequest createRoomRequest) => this.createRoomRequest = createRoomRequest;
[JsonPropertyName("type")]
- public string Type
- {
+ public string Type {
get => (string)createRoomRequest.CreationContent["type"];
- set
- {
+ set {
if (value is "null" or "") createRoomRequest.CreationContent.Remove("type");
else createRoomRequest.CreationContent["type"] = value;
}
}
}
-public class PowerLevelEvent
-{
- [JsonPropertyName("ban")] public int Ban { get; set; } // = 50;
- [JsonPropertyName("events_default")] public int EventsDefault { get; set; } // = 0;
- [JsonPropertyName("events")] public Dictionary<string, int> Events { get; set; } // = null!;
- [JsonPropertyName("invite")] public int Invite { get; set; } // = 50;
- [JsonPropertyName("kick")] public int Kick { get; set; } // = 50;
- [JsonPropertyName("notifications")] public NotificationsPL NotificationsPl { get; set; } // = null!;
- [JsonPropertyName("redact")] public int Redact { get; set; } // = 50;
- [JsonPropertyName("state_default")] public int StateDefault { get; set; } // = 50;
- [JsonPropertyName("users")] public Dictionary<string, int> Users { get; set; } // = null!;
- [JsonPropertyName("users_default")] public int UsersDefault { get; set; } // = 0;
+public class PowerLevelEvent {
+ [JsonPropertyName("ban")]
+ public int Ban { get; set; } // = 50;
+
+ [JsonPropertyName("events_default")]
+ public int EventsDefault { get; set; } // = 0;
+
+ [JsonPropertyName("events")]
+ public Dictionary<string, int> Events { get; set; } // = null!;
+
+ [JsonPropertyName("invite")]
+ public int Invite { get; set; } // = 50;
+
+ [JsonPropertyName("kick")]
+ public int Kick { get; set; } // = 50;
+
+ [JsonPropertyName("notifications")]
+ public NotificationsPL NotificationsPl { get; set; } // = null!;
+
+ [JsonPropertyName("redact")]
+ public int Redact { get; set; } // = 50;
+
+ [JsonPropertyName("state_default")]
+ public int StateDefault { get; set; } // = 50;
+
+ [JsonPropertyName("users")]
+ public Dictionary<string, int> Users { get; set; } // = null!;
+
+ [JsonPropertyName("users_default")]
+ public int UsersDefault { get; set; } // = 0;
}
-public class NotificationsPL
-{
- [JsonPropertyName("room")] public int Room { get; set; } = 50;
+public class NotificationsPL {
+ [JsonPropertyName("room")]
+ public int Room { get; set; } = 50;
}
-public class ServerACL
-{
- [JsonPropertyName("allow")] public List<string> Allow { get; set; } // = null!;
- [JsonPropertyName("deny")] public List<string> Deny { get; set; } // = null!;
- [JsonPropertyName("allow_ip_literals")] public bool AllowIpLiterals { get; set; } // = false;
+public class ServerACL {
+ [JsonPropertyName("allow")]
+ public List<string> Allow { get; set; } // = null!;
+
+ [JsonPropertyName("deny")]
+ public List<string> Deny { get; set; } // = null!;
+
+ [JsonPropertyName("allow_ip_literals")]
+ public bool AllowIpLiterals { get; set; } // = false;
}
\ No newline at end of file
|