1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-07-30 04:23:07 +03:00

Make examples/node/app an actual app rather than the usage example.

This commit is contained in:
Kegan Dougal
2015-06-12 10:33:45 +01:00
parent 1fed4def69
commit 8c5c7cc961
3 changed files with 136 additions and 212 deletions

View File

@ -1,14 +1,140 @@
"use strict";
console.log("Loading node sdk");
var matrix = require("matrix-js-sdk");
var myUserId = "@example:localhost";
var myAccessToken = "QGV4YW1wbGU6bG9jYWxob3N0.qPEvLuYfNBjxikiCjP";
var sdk = require("matrix-js-sdk");
var matrixClient = sdk.createClient({
baseUrl: "http://localhost:8008",
accessToken: myAccessToken,
userId: myUserId
});
var client = matrix.createClient("http://matrix.org");
client.publicRooms(function (err, data) {
if (err) {
console.error("Error: %s", JSON.stringify(err));
// Data structures
var roomList = [];
var viewingRoom = null;
var numMessagesToShow = 20;
// Reading from stdin
var readline = require("readline");
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
rl.on('line', function(line) {
if (line.indexOf("enter ") === 0 && !viewingRoom) {
var roomIndex = line.split(" ")[1];
viewingRoom = roomList[roomIndex];
if (viewingRoom.getMember(myUserId).membership === "invite") {
// join the room first
matrixClient.joinRoom(viewingRoom.roomId).done(function() {
printMessages();
}, function(err) {
console.log("Error: %s", err);
});
}
else {
printMessages();
}
}
else if (line === "/exit" && viewingRoom) {
viewingRoom = null;
printRoomList();
}
else if (line === "/members" && viewingRoom) {
printMemberList();
}
else if (viewingRoom) {
matrixClient.sendTextMessage(viewingRoom.roomId, line).done(function() {
console.log('\x1B[2J'); // clear console
printMessages();
}, function(err) {
console.log("Error: %s", err);
});
}
});
// ==== END User input
// show the room list after syncing.
matrixClient.on("syncComplete", function() {
roomList = matrixClient.getRooms();
printRoomList();
});
// print incoming messages.
matrixClient.on("Room.timeline", function(event, room, toStartOfTimeline) {
if (toStartOfTimeline) {
return; // don't print paginated results
}
if (event.getType() !== "m.room.message") {
return; // only print messages
}
if (!viewingRoom || viewingRoom.roomId !== room.roomId) {
return; // not viewing a room or viewing the wrong room.
}
printLine(event);
});
function printRoomList() {
console.log("Room List:");
for (var i = 0; i < roomList.length; i++) {
console.log(
"[%s] %s (%s members)",
i, roomList[i].name, roomList[i].currentState.getMembers().length
);
}
console.log("Enter a room by typing 'enter <index>', e.g. 'enter 5'");
console.log("Leave a room by typing '/exit'.");
console.log("Show a room member list by typing '/members'");
}
function printMessages() {
if (!viewingRoom) {
printRoomList();
return;
}
console.log("data %s", JSON.stringify(data).substring(0, 200));
console.log("Congratulations! The SDK is working in Node.js!");
});
console.log('\x1B[2J'); // clear console
var mostRecentMessages = viewingRoom.timeline.slice(numMessagesToShow * -1);
for (var i = 0; i < mostRecentMessages.length; i++) {
if (mostRecentMessages[i].getType() !== "m.room.message") {
continue;
}
printLine(mostRecentMessages[i]);
}
}
function printMemberList() {
if (!viewingRoom) {
printRoomList();
return;
}
var members = viewingRoom.currentState.getMembers();
// sorted based on name.
members.sort(function(a, b) {
if (a.name > b.name) {
return -1;
}
if (a.name < b.name) {
return 1;
}
return 0;
});
console.log(viewingRoom.name);
console.log(new Array(viewingRoom.name.length + 1).join("-"));
viewingRoom.currentState.getMembers().forEach(function(member) {
if (!member.membership) {
return;
}
var membershipWithPadding = (
member.membership + new Array(10 - member.membership.length).join(" ")
);
console.log("%s :: %s", membershipWithPadding, member.name);
});
}
function printLine(event) {
// TODO: Update with event.sender when implemented.
console.log("%s :: %s", event.getSender(), event.getContent().body);
}
matrixClient.startClient(numMessagesToShow); // messages for each room.