mirror of
https://github.com/Skylar-Tech/node-red-contrib-matrix-chat.git
synced 2025-07-08 11:41:07 -06:00
- #28 paginate room history - #111 manual read markers - fix clearing global storage - update node docs for upload file
73 lines
2.6 KiB
JavaScript
73 lines
2.6 KiB
JavaScript
const {TimelineWindow, RelationType, Filter} = require("matrix-js-sdk");
|
|
const crypto = require('crypto');
|
|
module.exports = function(RED) {
|
|
function MatrixReceiveMessage(n) {
|
|
RED.nodes.createNode(this, n);
|
|
|
|
let node = this;
|
|
this.name = n.name;
|
|
this.server = RED.nodes.getNode(n.server);
|
|
this.roomType = n.roomType;
|
|
this.roomValue = n.roomValue;
|
|
this.eventIdType = n.eventIdType;
|
|
this.eventIdValue = n.eventIdValue;
|
|
|
|
node.status({ fill: "red", shape: "ring", text: "disconnected" });
|
|
|
|
if (!node.server) {
|
|
node.error("No configuration node", {});
|
|
return;
|
|
}
|
|
node.server.register(node);
|
|
|
|
node.server.on("disconnected", function(){
|
|
node.status({ fill: "red", shape: "ring", text: "disconnected" });
|
|
});
|
|
|
|
node.server.on("connected", function() {
|
|
node.status({ fill: "green", shape: "ring", text: "connected" });
|
|
});
|
|
|
|
node.on("input", async function (msg) {
|
|
if (! node.server || ! node.server.matrixClient) {
|
|
node.error("No matrix server selected", msg);
|
|
return;
|
|
}
|
|
|
|
function getToValue(msg, type, property) {
|
|
let value = property;
|
|
if (type === "msg") {
|
|
value = RED.util.getMessageProperty(msg, property);
|
|
} else if ((type === 'flow') || (type === 'global')) {
|
|
try {
|
|
value = RED.util.evaluateNodeProperty(property, type, node, msg);
|
|
} catch(e2) {
|
|
throw new Error("Invalid value evaluation");
|
|
}
|
|
} else if(type === "bool") {
|
|
value = (property === 'true');
|
|
} else if(type === "num") {
|
|
value = Number(property);
|
|
}
|
|
return value;
|
|
}
|
|
|
|
try {
|
|
let roomId = getToValue(msg, node.roomType, node.roomValue),
|
|
eventId = getToValue(msg, node.eventIdType, node.eventIdValue);
|
|
|
|
msg.payload = await node.server.matrixClient.setRoomReadMarkers(roomId, eventId);
|
|
node.send([msg, null]);
|
|
} catch(e) {
|
|
msg.error = `Room pagination error: ${e}`;
|
|
node.error(msg.error, msg);
|
|
node.send([null, msg]);
|
|
}
|
|
});
|
|
|
|
node.on("close", function() {
|
|
node.server.deregister(node);
|
|
});
|
|
}
|
|
RED.nodes.registerType("matrix-mark-read", MatrixReceiveMessage);
|
|
} |