- #97 msg.state_key is now allowed as an input to Room State Events node for events that support it (required for m.space.child and m.space.parent)

- #97 added support for m.room.history_visibility, m.room.server_acl, m.room.pinned_events, m.space.child, and m.space.parent
- #97 fix issue with checkbox being hidden on config page when adding new setters/getters on config page
This commit is contained in:
Skylar Sadlier 2023-10-22 03:01:33 -06:00
parent 1859696122
commit 2e9633e113
2 changed files with 59 additions and 34 deletions

View File

@ -49,6 +49,11 @@
<span class="property-type">string|object</span>
</dt>
<dd> You configure what room state events in the node configuration. <code style="white-space: normal;">m.room.name</code>, <code style="white-space: normal;">m.room.avatar</code>, and <code style="white-space: normal;">m.room.guest_access</code> allow you to pass a string to set their value but all other room state events will require the full content object (find this by referencing the <a href="https://spec.matrix.org/latest/client-server-api" target="_blank">Matrix Client-Server docs</a>)</dd>
<dt class="optional">msg.state_key
<span class="property-type">string</span>
</dt>
<dd> Required for some events such as <code style="white-space: normal;">m.space.parent</code> and <code style="white-space: normal;">m.room.child</code> to set the referenced child/parent room</dd>
</dl>
<h3>Outputs</h3>
@ -77,13 +82,18 @@
<script type="text/javascript">
(function(){
var roomEventTypeOptions = [
{ value: "m.room.name", label: "m.room.name"},
{ value: "m.room.topic", label: "m.room.topic"},
{ value: "m.room.avatar", label: "m.room.avatar"},
{ value: "m.room.power_levels", label: "m.room.power_levels"},
{ value: "m.room.guest_access", label: "m.room.guest_access"},
{ value: "m.room.join_rules", label: "m.room.join_rules"},
{ value: "m.room.canonical_alias", label: "m.room.canonical_alias"}
{ value: "m.room.name", label: "m.room.name" },
{ value: "m.room.topic", label: "m.room.topic" },
{ value: "m.room.avatar", label: "m.room.avatar" },
{ value: "m.room.power_levels", label: "m.room.power_levels" },
{ value: "m.room.guest_access", label: "m.room.guest_access" },
{ value: "m.room.join_rules", label: "m.room.join_rules" },
{ value: "m.room.canonical_alias", label: "m.room.canonical_alias" },
{ value: "m.room.history_visibility", label: "m.room.history_visibility" },
{ value: "m.room.server_acl", label: "m.room.server_acl" },
{ value: "m.room.pinned_events", label: "m.room.pinned_events"},
{ value: "m.space.child", label: "m.space.child" },
{ value: "m.space.parent", label: "m.space.parent" },
];
var defaultRules = [{
t: "set",
@ -305,9 +315,9 @@
propertyValue.typedInput('value',rule.to);
localStorageEl.prop("checked", !!rule.ls);
if(rule.t === 'get') {
localStorageEl.show();
localStorageEl.parent().show();
} else {
localStorageEl.hide();
localStorageEl.parent().hide();
}
}
selectField.change();

View File

@ -140,11 +140,11 @@ module.exports = function(RED) {
msg.topic,
"m.room.name",
typeof value === "string"
? { name: value }
? {name: value}
: value);
break;
case "m.room.topic":
if(typeof value === "string") {
if (typeof value === "string") {
await node.server.matrixClient.setRoomTopic(msg.topic, value);
} else {
await node.server.matrixClient.sendStateEvent(
@ -159,27 +159,7 @@ module.exports = function(RED) {
msg.topic,
"m.room.avatar",
typeof value === "string"
? { "url": value }
: value,
"");
break;
case "m.room.power_levels":
if(typeof value !== 'object') {
setterErrors[rule.p] = "m.room.power_levels content must be object";
} else {
await node.server.matrixClient.sendStateEvent(
msg.topic,
"m.room.power_levels",
value,
"");
}
break;
case "m.room.guest_access":
await node.server.matrixClient.sendStateEvent(
msg.topic,
"m.room.guest_access",
typeof value === "string"
? { "guest_access": value }
? {"url": value}
: value,
"");
break;
@ -205,15 +185,50 @@ module.exports = function(RED) {
"");
}
break;
case "m.space.parent":
if (typeof value !== 'object') {
setterErrors[rule.p] = "m.space.parent content must be object";
} else if (!msg.state_key) {
setterErrors[rule.p] = "m.space.parent required msg.state_key input to be set to the child roomId";
}else {
await node.server.matrixClient.sendStateEvent(
msg.topic,
"m.room.power_levels",
value,
msg.state_key);
}
break;
case "m.space.child":
if (typeof value !== 'object') {
setterErrors[rule.p] = "m.space.child content must be object";
} else if (!msg.state_key) {
setterErrors[rule.p] = "m.space.child required msg.state_key input to be set to the parent roomId";
}else {
await node.server.matrixClient.sendStateEvent(
msg.topic,
"m.room.power_levels",
value,
msg.state_key);
}
break;
case "m.room.guest_access":
await node.server.matrixClient.sendStateEvent(
msg.topic,
"m.room.guest_access",
typeof value === "string"
? { "guest_access": value }
: value,
"");
break;
default:
if(typeof value !== 'object') {
setterErrors[rule.p] = "Custom event content must be object";
setterErrors[rule.p] = `${rule.p} content must be object`;
} else {
await node.server.matrixClient.sendStateEvent(
msg.topic,
rule.p,
value,
"");
msg.state_key || "");
}
break;
}