1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-11-26 17:03:12 +03:00

Merge branch 'develop' into access_token_header

This commit is contained in:
Krombel
2017-06-23 15:16:41 +02:00
parent e0a5edeb04
commit 9b24e66441
39 changed files with 2663 additions and 351 deletions

View File

@@ -31,6 +31,8 @@ const utils = require("./utils");
const Filter = require("./filter");
const EventTimeline = require("./models/event-timeline");
import reEmit from './reemit';
const DEBUG = true;
// /sync requests allow you to set a timeout= but the request may continue
@@ -296,7 +298,7 @@ SyncApi.prototype.peek = function(roomId) {
client.store.storeRoom(peekRoom);
client.emit("Room", peekRoom);
self._peekPoll(roomId);
self._peekPoll(peekRoom);
return peekRoom;
});
};
@@ -311,22 +313,26 @@ SyncApi.prototype.stopPeeking = function() {
/**
* Do a peek room poll.
* @param {string} roomId
* @param {Room} peekRoom
* @param {string} token from= token
*/
SyncApi.prototype._peekPoll = function(roomId, token) {
if (this._peekRoomId !== roomId) {
debuglog("Stopped peeking in room %s", roomId);
SyncApi.prototype._peekPoll = function(peekRoom, token) {
if (this._peekRoomId !== peekRoom.roomId) {
debuglog("Stopped peeking in room %s", peekRoom.roomId);
return;
}
const self = this;
// FIXME: gut wrenching; hard-coded timeout values
this.client._http.authedRequest(undefined, "GET", "/events", {
room_id: roomId,
room_id: peekRoom.roomId,
timeout: 30 * 1000,
from: token,
}, undefined, 50 * 1000).done(function(res) {
if (self._peekRoomId !== peekRoom.roomId) {
debuglog("Stopped peeking in room %s", peekRoom.roomId);
return;
}
// We have a problem that we get presence both from /events and /sync
// however, /sync only returns presence for users in rooms
// you're actually joined to.
@@ -352,15 +358,15 @@ SyncApi.prototype._peekPoll = function(roomId, token) {
// strip out events which aren't for the given room_id (e.g presence)
const events = res.chunk.filter(function(e) {
return e.room_id === roomId;
return e.room_id === peekRoom.roomId;
}).map(self.client.getEventMapper());
const room = self.client.getRoom(roomId);
room.addLiveEvents(events);
self._peekPoll(roomId, res.end);
peekRoom.addLiveEvents(events);
self._peekPoll(peekRoom, res.end);
}, function(err) {
console.error("[%s] Peek poll failed: %s", roomId, err);
console.error("[%s] Peek poll failed: %s", peekRoom.roomId, err);
setTimeout(function() {
self._peekPoll(roomId, token);
self._peekPoll(peekRoom, token);
}, 30 * 1000);
});
};
@@ -1252,23 +1258,5 @@ function createNewUser(client, userId) {
return user;
}
function reEmit(reEmitEntity, emittableEntity, eventNames) {
utils.forEach(eventNames, function(eventName) {
// setup a listener on the entity (the Room, User, etc) for this event
emittableEntity.on(eventName, function() {
// take the args from the listener and reuse them, adding the
// event name to the arg list so it works with .emit()
// Transformation Example:
// listener on "foo" => function(a,b) { ... }
// Re-emit on "thing" => thing.emit("foo", a, b)
const newArgs = [eventName];
for (let i = 0; i < arguments.length; i++) {
newArgs.push(arguments[i]);
}
reEmitEntity.emit(...newArgs);
});
});
}
/** */
module.exports = SyncApi;