mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2024-10-01 08:25:44 -04:00
Added event stream service which neatly blobs together requests / state for the event stream. This depends on matrix service to do the actual hit. Currently this has exactly the same behaviour as before.
This commit is contained in:
parent
c5f2da5875
commit
8bf3994c2e
@ -20,7 +20,8 @@ var matrixWebClient = angular.module('matrixWebClient', [
|
|||||||
'LoginController',
|
'LoginController',
|
||||||
'RoomController',
|
'RoomController',
|
||||||
'RoomsController',
|
'RoomsController',
|
||||||
'matrixService'
|
'matrixService',
|
||||||
|
'eventStreamService'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
matrixWebClient.config(['$routeProvider', '$provide', '$httpProvider',
|
matrixWebClient.config(['$routeProvider', '$provide', '$httpProvider',
|
||||||
|
69
webclient/components/matrix/event-stream-service.js
Normal file
69
webclient/components/matrix/event-stream-service.js
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 matrix.org
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('eventStreamService', [])
|
||||||
|
.factory('eventStreamService', ['matrixService', function(matrixService) {
|
||||||
|
var settings = {
|
||||||
|
from: "END",
|
||||||
|
to: undefined,
|
||||||
|
limit: undefined,
|
||||||
|
shouldPoll: true
|
||||||
|
};
|
||||||
|
|
||||||
|
// interrupts the stream. Only valid if there is a stream conneciton
|
||||||
|
// open.
|
||||||
|
var interrupt = function(shouldPoll) {
|
||||||
|
console.log("[EventStream] interrupt("+shouldPoll+") "+
|
||||||
|
JSON.stringify(settings));
|
||||||
|
};
|
||||||
|
|
||||||
|
var saveStreamSettings = function() {
|
||||||
|
localStorage.setItem("streamSettings", JSON.stringify(settings));
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
// resume the stream from whereever it last got up to. Typically used
|
||||||
|
// when the page is opened.
|
||||||
|
resume: function() {
|
||||||
|
console.log("[EventStream] resume "+JSON.stringify(settings));
|
||||||
|
// run the stream from the latest token
|
||||||
|
return matrixService.getEventStream(settings.from, 5000);
|
||||||
|
},
|
||||||
|
|
||||||
|
// pause the stream. Resuming it will continue from the current position
|
||||||
|
pause: function() {
|
||||||
|
console.log("[EventStream] pause "+JSON.stringify(settings));
|
||||||
|
// kill any running stream
|
||||||
|
interrupt(false);
|
||||||
|
// save the latest token
|
||||||
|
saveStreamSettings();
|
||||||
|
},
|
||||||
|
|
||||||
|
// stop the stream and wipe the position in the stream. Typically used
|
||||||
|
// when logging out.
|
||||||
|
stop: function() {
|
||||||
|
console.log("[EventStream] stop "+JSON.stringify(settings));
|
||||||
|
// kill any running stream
|
||||||
|
interrupt(false);
|
||||||
|
// clear the latest token
|
||||||
|
settings.from = "END";
|
||||||
|
saveStreamSettings();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}]);
|
@ -297,6 +297,15 @@ angular.module('matrixService', [])
|
|||||||
return doBaseRequest(config.identityServer, "POST", path, {}, data, headers);
|
return doBaseRequest(config.identityServer, "POST", path, {}, data, headers);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// start listening on /events
|
||||||
|
getEventStream: function(from, timeout) {
|
||||||
|
var path = "/events";
|
||||||
|
var params = {
|
||||||
|
from: from,
|
||||||
|
timeout: timeout
|
||||||
|
};
|
||||||
|
return doRequest("GET", path, params);
|
||||||
|
},
|
||||||
|
|
||||||
//
|
//
|
||||||
testLogin: function() {
|
testLogin: function() {
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
<script src="room/room-controller.js"></script>
|
<script src="room/room-controller.js"></script>
|
||||||
<script src="rooms/rooms-controller.js"></script>
|
<script src="rooms/rooms-controller.js"></script>
|
||||||
<script src="components/matrix/matrix-service.js"></script>
|
<script src="components/matrix/matrix-service.js"></script>
|
||||||
|
<script src="components/matrix/event-stream-service.js"></script>
|
||||||
<script src="components/fileInput/file-input-directive.js"></script>
|
<script src="components/fileInput/file-input-directive.js"></script>
|
||||||
<script src="components/fileUpload/file-upload-service.js"></script>
|
<script src="components/fileUpload/file-upload-service.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -15,8 +15,8 @@ limitations under the License.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
angular.module('RoomController', [])
|
angular.module('RoomController', [])
|
||||||
.controller('RoomController', ['$scope', '$http', '$timeout', '$routeParams', '$location', 'matrixService',
|
.controller('RoomController', ['$scope', '$http', '$timeout', '$routeParams', '$location', 'matrixService', 'eventStreamService',
|
||||||
function($scope, $http, $timeout, $routeParams, $location, matrixService) {
|
function($scope, $http, $timeout, $routeParams, $location, matrixService, eventStreamService) {
|
||||||
'use strict';
|
'use strict';
|
||||||
var MESSAGES_PER_PAGINATION = 10;
|
var MESSAGES_PER_PAGINATION = 10;
|
||||||
$scope.room_id = $routeParams.room_id;
|
$scope.room_id = $routeParams.room_id;
|
||||||
@ -83,13 +83,8 @@ angular.module('RoomController', [])
|
|||||||
};
|
};
|
||||||
|
|
||||||
var shortPoll = function() {
|
var shortPoll = function() {
|
||||||
$http.get(matrixService.config().homeserver + matrixService.prefix + "/events", {
|
eventStreamService.resume().then(
|
||||||
"params": {
|
function(response) {
|
||||||
"access_token": matrixService.config().access_token,
|
|
||||||
"from": $scope.state.events_from,
|
|
||||||
"timeout": 5000
|
|
||||||
}})
|
|
||||||
.then(function(response) {
|
|
||||||
$scope.state.stream_failure = undefined;
|
$scope.state.stream_failure = undefined;
|
||||||
console.log("Got response from "+$scope.state.events_from+" to "+response.data.end);
|
console.log("Got response from "+$scope.state.events_from+" to "+response.data.end);
|
||||||
$scope.state.events_from = response.data.end;
|
$scope.state.events_from = response.data.end;
|
||||||
@ -103,10 +98,11 @@ angular.module('RoomController', [])
|
|||||||
else {
|
else {
|
||||||
$timeout(shortPoll, 0);
|
$timeout(shortPoll, 0);
|
||||||
}
|
}
|
||||||
}, function(response) {
|
},
|
||||||
$scope.state.stream_failure = response;
|
function(error) {
|
||||||
|
$scope.state.stream_failure = error;
|
||||||
|
|
||||||
if (response.status == 403) {
|
if (error.status == 403) {
|
||||||
$scope.stopPoll = true;
|
$scope.stopPoll = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,7 +112,8 @@ angular.module('RoomController', [])
|
|||||||
else {
|
else {
|
||||||
$timeout(shortPoll, 5000);
|
$timeout(shortPoll, 5000);
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
var updateMemberList = function(chunk) {
|
var updateMemberList = function(chunk) {
|
||||||
|
Loading…
Reference in New Issue
Block a user