- #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> <span class="property-type">string|object</span>
</dt> </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> <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> </dl>
<h3>Outputs</h3> <h3>Outputs</h3>
@ -77,13 +82,18 @@
<script type="text/javascript"> <script type="text/javascript">
(function(){ (function(){
var roomEventTypeOptions = [ var roomEventTypeOptions = [
{ value: "m.room.name", label: "m.room.name"}, { value: "m.room.name", label: "m.room.name" },
{ value: "m.room.topic", label: "m.room.topic"}, { value: "m.room.topic", label: "m.room.topic" },
{ value: "m.room.avatar", label: "m.room.avatar"}, { value: "m.room.avatar", label: "m.room.avatar" },
{ value: "m.room.power_levels", label: "m.room.power_levels"}, { value: "m.room.power_levels", label: "m.room.power_levels" },
{ value: "m.room.guest_access", label: "m.room.guest_access"}, { value: "m.room.guest_access", label: "m.room.guest_access" },
{ value: "m.room.join_rules", label: "m.room.join_rules"}, { value: "m.room.join_rules", label: "m.room.join_rules" },
{ value: "m.room.canonical_alias", label: "m.room.canonical_alias"} { 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 = [{ var defaultRules = [{
t: "set", t: "set",
@ -305,9 +315,9 @@
propertyValue.typedInput('value',rule.to); propertyValue.typedInput('value',rule.to);
localStorageEl.prop("checked", !!rule.ls); localStorageEl.prop("checked", !!rule.ls);
if(rule.t === 'get') { if(rule.t === 'get') {
localStorageEl.show(); localStorageEl.parent().show();
} else { } else {
localStorageEl.hide(); localStorageEl.parent().hide();
} }
} }
selectField.change(); selectField.change();

View File

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