You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-07-30 04:23:07 +03:00
Sync room state when another device joins a room.
This commit is contained in:
@ -23,7 +23,7 @@ var rl = readline.createInterface({
|
||||
terminal: false
|
||||
});
|
||||
rl.on('line', function(line) {
|
||||
if (line.indexOf("/enter ") === 0 && !viewingRoom) {
|
||||
if (line.indexOf("/join ") === 0 && !viewingRoom) {
|
||||
var roomIndex = line.split(" ")[1];
|
||||
viewingRoom = roomList[roomIndex];
|
||||
if (viewingRoom.getMember(myUserId).membership === "invite") {
|
||||
@ -103,7 +103,7 @@ function printHelp() {
|
||||
console.log("Global commands:");
|
||||
console.log(" '/help' : Show this help.");
|
||||
console.log("Room list index commands:");
|
||||
console.log(" '/enter <index>' Enter a room, e.g. '/enter 5'");
|
||||
console.log(" '/join <index>' Join a room, e.g. '/join 5'");
|
||||
console.log("Room commands:");
|
||||
console.log(" '/exit' Return to the room list index.");
|
||||
console.log(" '/members' Show the room member list.");
|
||||
|
@ -67,6 +67,9 @@ function MatrixClient(opts) {
|
||||
userId: (opts.userId || null)
|
||||
};
|
||||
this._http = new httpApi.MatrixHttpApi(httpOpts);
|
||||
this._syncingRooms = {
|
||||
// room_id: Promise
|
||||
};
|
||||
}
|
||||
utils.inherits(MatrixClient, EventEmitter);
|
||||
|
||||
@ -1084,9 +1087,9 @@ function _pollForEvents(client) {
|
||||
isBrandNewRoom = true;
|
||||
}
|
||||
|
||||
//var wasJoined = room.hasMembershipState(
|
||||
// self.credentials.userId, "join"
|
||||
//);
|
||||
var wasJoined = room.hasMembershipState(
|
||||
self.credentials.userId, "join"
|
||||
);
|
||||
|
||||
room.addEvents(roomIdToEvents[roomId], "replace");
|
||||
room.recalculate(self.credentials.userId);
|
||||
@ -1097,7 +1100,7 @@ function _pollForEvents(client) {
|
||||
self.store.storeRoom(room);
|
||||
self.emit("Room", room);
|
||||
}
|
||||
/* TODO invite->join trigger roominitialsync
|
||||
|
||||
var justJoined = room.hasMembershipState(
|
||||
self.credentials.userId, "join"
|
||||
);
|
||||
@ -1106,7 +1109,7 @@ function _pollForEvents(client) {
|
||||
// we've just transitioned into a join state for this room,
|
||||
// so sync state.
|
||||
_syncRoom(self, room);
|
||||
} */
|
||||
}
|
||||
});
|
||||
}
|
||||
if (data) {
|
||||
@ -1127,15 +1130,22 @@ function _pollForEvents(client) {
|
||||
}
|
||||
|
||||
function _syncRoom(client, room) {
|
||||
if (client._syncingRooms[room.roomId]) {
|
||||
return client._syncingRooms[room.roomId];
|
||||
}
|
||||
var defer = q.defer();
|
||||
client._syncingRooms[room.roomId] = defer.promise;
|
||||
client.roomInitialSync(room.roomId, 8).done(function(res) {
|
||||
room.timeline = []; // blow away any previous messages.
|
||||
_processRoomEvents(room, res.state, res.messages);
|
||||
room.recalculate(client.credentials.userId);
|
||||
client.store.storeRoom(room);
|
||||
client.emit("Room", room);
|
||||
defer.resolve(room);
|
||||
client._syncingRooms[room.roomId] = undefined;
|
||||
}, function(err) {
|
||||
defer.reject(err);
|
||||
client._syncingRooms[room.roomId] = undefined;
|
||||
});
|
||||
return defer.promise;
|
||||
}
|
||||
|
Reference in New Issue
Block a user