You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-08-06 12:02:40 +03:00
Refactor terminal app; add /invite and /roominfo.
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
var myUserId = "@example:localhost";
|
var myUserId = "@example:localhost";
|
||||||
var myAccessToken = "QGV4YW1wbGU6bG9jYWxob3N0.qPEvLuYfNBjxikiCjP";
|
var myAccessToken = "QGV4YW1wbGU6bG9jYWxob3N0.qPEvLuYfNBjxikiCjP";
|
||||||
var sdk = require("matrix-js-sdk");
|
var sdk = require("matrix-js-sdk");
|
||||||
|
var clc = require("cli-color");
|
||||||
var matrixClient = sdk.createClient({
|
var matrixClient = sdk.createClient({
|
||||||
baseUrl: "http://localhost:8008",
|
baseUrl: "http://localhost:8008",
|
||||||
accessToken: myAccessToken,
|
accessToken: myAccessToken,
|
||||||
@@ -28,68 +29,91 @@ rl.on('line', function(line) {
|
|||||||
rl.prompt();
|
rl.prompt();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (line.indexOf("/join ") === 0 && !viewingRoom) {
|
if (line === "/help") {
|
||||||
var roomIndex = line.split(" ")[1];
|
printHelp();
|
||||||
viewingRoom = roomList[roomIndex];
|
rl.prompt();
|
||||||
if (viewingRoom.getMember(myUserId).membership === "invite") {
|
return;
|
||||||
// join the room first
|
}
|
||||||
matrixClient.joinRoom(viewingRoom.roomId).done(function(room) {
|
|
||||||
roomList = matrixClient.getRooms();
|
if (viewingRoom) {
|
||||||
viewingRoom = room;
|
if (line === "/exit") {
|
||||||
|
viewingRoom = null;
|
||||||
|
printRoomList();
|
||||||
|
}
|
||||||
|
else if (line === "/members") {
|
||||||
|
printMemberList(viewingRoom);
|
||||||
|
}
|
||||||
|
else if (line === "/roominfo") {
|
||||||
|
printRoomInfo(viewingRoom);
|
||||||
|
}
|
||||||
|
else if (line === "/resend") {
|
||||||
|
// get the oldest not sent event.
|
||||||
|
var notSentEvent;
|
||||||
|
for (var i = 0; i < viewingRoom.timeline.length; i++) {
|
||||||
|
if (viewingRoom.timeline[i].status == sdk.EventStatus.NOT_SENT) {
|
||||||
|
notSentEvent = viewingRoom.timeline[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (notSentEvent) {
|
||||||
|
matrixClient.resendEvent(notSentEvent, viewingRoom).done(function() {
|
||||||
|
printMessages();
|
||||||
|
rl.prompt();
|
||||||
|
}, function(err) {
|
||||||
|
printMessages();
|
||||||
|
print("/resend Error: %s", err);
|
||||||
|
rl.prompt();
|
||||||
|
});
|
||||||
|
printMessages();
|
||||||
|
rl.prompt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (line.indexOf("/more ") === 0) {
|
||||||
|
var amount = parseInt(line.split(" ")[1]) || 20;
|
||||||
|
matrixClient.scrollback(viewingRoom, amount).done(function(room) {
|
||||||
printMessages();
|
printMessages();
|
||||||
rl.prompt();
|
rl.prompt();
|
||||||
}, function(err) {
|
}, function(err) {
|
||||||
console.log("/join Error: %s", err);
|
print("/more Error: %s", err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (line.indexOf("/invite ") === 0) {
|
||||||
|
var userId = line.split(" ")[1].trim();
|
||||||
|
matrixClient.invite(viewingRoom.roomId, userId).done(function() {
|
||||||
|
printMessages();
|
||||||
|
rl.prompt();
|
||||||
|
}, function(err) {
|
||||||
|
print("/invite Error: %s", err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
printMessages();
|
matrixClient.sendTextMessage(viewingRoom.roomId, line).finally(function() {
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (line === "/exit" && viewingRoom) {
|
|
||||||
viewingRoom = null;
|
|
||||||
printRoomList();
|
|
||||||
}
|
|
||||||
else if (line === "/members" && viewingRoom) {
|
|
||||||
printMemberList();
|
|
||||||
}
|
|
||||||
else if (line === "/resend" && viewingRoom) {
|
|
||||||
// get the oldest not sent event.
|
|
||||||
var notSentEvent;
|
|
||||||
for (var i = 0; i < viewingRoom.timeline.length; i++) {
|
|
||||||
if (viewingRoom.timeline[i].status == sdk.EventStatus.NOT_SENT) {
|
|
||||||
notSentEvent = viewingRoom.timeline[i];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (notSentEvent) {
|
|
||||||
matrixClient.resendEvent(notSentEvent, viewingRoom).done(function() {
|
|
||||||
printMessages();
|
printMessages();
|
||||||
rl.prompt();
|
rl.prompt();
|
||||||
}, function(err) {
|
|
||||||
console.log("/resend Error: %s", err);
|
|
||||||
});
|
});
|
||||||
|
// print local echo immediately
|
||||||
|
printMessages();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (line.indexOf("/more ") === 0 && viewingRoom) {
|
else {
|
||||||
var amount = parseInt(line.split(" ")[1]) || 20;
|
if (line.indexOf("/join ") === 0) {
|
||||||
matrixClient.scrollback(viewingRoom, amount).done(function(room) {
|
var roomIndex = line.split(" ")[1];
|
||||||
printMessages();
|
viewingRoom = roomList[roomIndex];
|
||||||
rl.prompt();
|
if (viewingRoom.getMember(myUserId).membership === "invite") {
|
||||||
}, function(err) {
|
// join the room first
|
||||||
console.log("/more Error: %s", err);
|
matrixClient.joinRoom(viewingRoom.roomId).done(function(room) {
|
||||||
});
|
roomList = matrixClient.getRooms();
|
||||||
}
|
viewingRoom = room;
|
||||||
else if (line === "/help") {
|
printMessages();
|
||||||
printHelp();
|
rl.prompt();
|
||||||
}
|
}, function(err) {
|
||||||
else if (viewingRoom) {
|
print("/join Error: %s", err);
|
||||||
matrixClient.sendTextMessage(viewingRoom.roomId, line).finally(function() {
|
});
|
||||||
printMessages();
|
}
|
||||||
rl.prompt();
|
else {
|
||||||
});
|
printMessages();
|
||||||
// print local echo immediately
|
}
|
||||||
printMessages();
|
}
|
||||||
}
|
}
|
||||||
rl.prompt();
|
rl.prompt();
|
||||||
});
|
});
|
||||||
@@ -123,9 +147,9 @@ matrixClient.on("Room.timeline", function(event, room, toStartOfTimeline) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
function printRoomList() {
|
function printRoomList() {
|
||||||
console.log("Room List:");
|
print("Room List:");
|
||||||
for (var i = 0; i < roomList.length; i++) {
|
for (var i = 0; i < roomList.length; i++) {
|
||||||
console.log(
|
print(
|
||||||
"[%s] %s (%s members)",
|
"[%s] %s (%s members)",
|
||||||
i, roomList[i].name, roomList[i].getJoinedMembers().length
|
i, roomList[i].name, roomList[i].getJoinedMembers().length
|
||||||
);
|
);
|
||||||
@@ -133,20 +157,23 @@ function printRoomList() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function printHelp() {
|
function printHelp() {
|
||||||
console.log("Global commands:");
|
var hlp = clc.italic;
|
||||||
console.log(" '/help' : Show this help.");
|
print("Global commands:", hlp);
|
||||||
console.log("Room list index commands:");
|
print(" '/help' : Show this help.");
|
||||||
console.log(" '/join <index>' Join a room, e.g. '/join 5'");
|
print("Room list index commands:", hlp);
|
||||||
console.log("Room commands:");
|
print(" '/join <index>' Join a room, e.g. '/join 5'");
|
||||||
console.log(" '/exit' Return to the room list index.");
|
print("Room commands:", hlp);
|
||||||
console.log(" '/members' Show the room member list.");
|
print(" '/exit' Return to the room list index.");
|
||||||
console.log(" '/more 15' Scrollback 15 events");
|
print(" '/members' Show the room member list.");
|
||||||
console.log(" '/resend' Resend the oldest event which failed to send.");
|
print(" '/invite @foo:bar' Invite @foo:bar to the room.");
|
||||||
|
print(" '/more 15' Scrollback 15 events");
|
||||||
|
print(" '/resend' Resend the oldest event which failed to send.");
|
||||||
|
print(" '/roominfo' Display room info e.g. name, topic.");
|
||||||
}
|
}
|
||||||
|
|
||||||
function completer(line) {
|
function completer(line) {
|
||||||
var completions = [
|
var completions = [
|
||||||
"/help", "/join ", "/exit", "/members", "/more ", "/resend"
|
"/help", "/join ", "/exit", "/members", "/more ", "/resend", "/invite"
|
||||||
];
|
];
|
||||||
var hits = completions.filter(function(c) { return c.indexOf(line) == 0 });
|
var hits = completions.filter(function(c) { return c.indexOf(line) == 0 });
|
||||||
// show all completions if none found
|
// show all completions if none found
|
||||||
@@ -158,19 +185,15 @@ function printMessages() {
|
|||||||
printRoomList();
|
printRoomList();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
console.log(CLEAR_CONSOLE);
|
print(CLEAR_CONSOLE);
|
||||||
var mostRecentMessages = viewingRoom.timeline;
|
var mostRecentMessages = viewingRoom.timeline;
|
||||||
for (var i = 0; i < mostRecentMessages.length; i++) {
|
for (var i = 0; i < mostRecentMessages.length; i++) {
|
||||||
printLine(mostRecentMessages[i]);
|
printLine(mostRecentMessages[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function printMemberList() {
|
function printMemberList(room) {
|
||||||
if (!viewingRoom) {
|
var members = room.currentState.getMembers();
|
||||||
printRoomList();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var members = viewingRoom.currentState.getMembers();
|
|
||||||
// sorted based on name.
|
// sorted based on name.
|
||||||
members.sort(function(a, b) {
|
members.sort(function(a, b) {
|
||||||
if (a.name > b.name) {
|
if (a.name > b.name) {
|
||||||
@@ -181,23 +204,54 @@ function printMemberList() {
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
console.log("Membership list for room \"%s\"", viewingRoom.name);
|
print("Membership list for room \"%s\"", room.name);
|
||||||
console.log(new Array(viewingRoom.name.length + 28).join("-"));
|
print(new Array(room.name.length + 28).join("-"));
|
||||||
viewingRoom.currentState.getMembers().forEach(function(member) {
|
room.currentState.getMembers().forEach(function(member) {
|
||||||
if (!member.membership) {
|
if (!member.membership) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var membershipWithPadding = (
|
var membershipWithPadding = (
|
||||||
member.membership + new Array(10 - member.membership.length).join(" ")
|
member.membership + new Array(10 - member.membership.length).join(" ")
|
||||||
);
|
);
|
||||||
console.log(
|
print(
|
||||||
"%s :: %s (%s)", membershipWithPadding, member.name,
|
"%s :: %s (%s)", membershipWithPadding, member.name,
|
||||||
(member.userId === myUserId ? "Me" : member.userId)
|
(member.userId === myUserId ? "Me" : member.userId)
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function printRoomInfo(room) {
|
||||||
|
var eventDict = room.currentState.events;
|
||||||
|
var eTypeHeader = " Event Type(state_key) ";
|
||||||
|
var sendHeader = " Sender ";
|
||||||
|
// pad content to 100
|
||||||
|
var restCount = (
|
||||||
|
100 - "Content".length - " | ".length - " | ".length -
|
||||||
|
eTypeHeader.length - sendHeader.length
|
||||||
|
);
|
||||||
|
var padSide = new Array(Math.floor(restCount/2)).join(" ");
|
||||||
|
var contentHeader = padSide + "Content" + padSide;
|
||||||
|
print(eTypeHeader+sendHeader+contentHeader);
|
||||||
|
print(new Array(100).join("-"));
|
||||||
|
Object.keys(eventDict).forEach(function(eventType) {
|
||||||
|
if (eventType === "m.room.member") { return; } // use /members instead.
|
||||||
|
Object.keys(eventDict[eventType]).forEach(function(stateKey) {
|
||||||
|
var typeAndKey = eventType + (
|
||||||
|
stateKey.length > 0 ? "("+stateKey+")" : ""
|
||||||
|
);
|
||||||
|
var typeStr = fixWidth(typeAndKey, eTypeHeader.length);
|
||||||
|
var event = eventDict[eventType][stateKey];
|
||||||
|
var sendStr = fixWidth(event.getSender(), sendHeader.length);
|
||||||
|
var contentStr = fixWidth(
|
||||||
|
JSON.stringify(event.getContent()), contentHeader.length
|
||||||
|
);
|
||||||
|
print(typeStr+" | "+sendStr+" | "+contentStr);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function printLine(event) {
|
function printLine(event) {
|
||||||
|
var fmt;
|
||||||
var name = event.sender ? event.sender.name : event.getSender();
|
var name = event.sender ? event.sender.name : event.getSender();
|
||||||
var time = new Date(
|
var time = new Date(
|
||||||
event.getTs()
|
event.getTs()
|
||||||
@@ -208,9 +262,11 @@ function printLine(event) {
|
|||||||
separator = ">>>";
|
separator = ">>>";
|
||||||
if (event.status === sdk.EventStatus.SENDING) {
|
if (event.status === sdk.EventStatus.SENDING) {
|
||||||
separator = "...";
|
separator = "...";
|
||||||
|
fmt = clc.xterm(8);
|
||||||
}
|
}
|
||||||
else if (event.status === sdk.EventStatus.NOT_SENT) {
|
else if (event.status === sdk.EventStatus.NOT_SENT) {
|
||||||
separator = " x ";
|
separator = " x ";
|
||||||
|
fmt = clc.redBright;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var body = "";
|
var body = "";
|
||||||
@@ -240,7 +296,32 @@ function printLine(event) {
|
|||||||
);
|
);
|
||||||
separator = "---";
|
separator = "---";
|
||||||
}
|
}
|
||||||
console.log("[%s] %s %s %s", time, name, separator, body);
|
if (fmt) {
|
||||||
|
print(
|
||||||
|
"[%s] %s %s %s", fmt(time), fmt(name), fmt(separator), fmt(body)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print("[%s] %s %s %s", time, name, separator, body);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function print(str, formatter) {
|
||||||
|
if (arguments.length == 2 && typeof arguments[1] === "function") {
|
||||||
|
console.log(arguments[1](str));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log.apply(console.log, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fixWidth(str, len) {
|
||||||
|
if (str.length > len) {
|
||||||
|
return str.substr(0, len-2) + "\u2026";
|
||||||
|
}
|
||||||
|
else if (str.length < len) {
|
||||||
|
return str + new Array(len - str.length).join(" ");
|
||||||
|
}
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
matrixClient.startClient(numMessagesToShow); // messages for each room.
|
matrixClient.startClient(numMessagesToShow); // messages for each room.
|
@@ -7,5 +7,8 @@
|
|||||||
"preinstall": "npm install ../.."
|
"preinstall": "npm install ../.."
|
||||||
},
|
},
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "Apache 2.0"
|
"license": "Apache 2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"cli-color": "^1.0.0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -348,7 +348,6 @@ function _sendEventHttpRequest(client, event) {
|
|||||||
$stateKey: event.getStateKey(),
|
$stateKey: event.getStateKey(),
|
||||||
$txnId: event._txnId ? event._txnId : new Date().getTime()
|
$txnId: event._txnId ? event._txnId : new Date().getTime()
|
||||||
};
|
};
|
||||||
console.log("_txnId = %s", event._txnId);
|
|
||||||
|
|
||||||
var path;
|
var path;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user