diff --git a/webclient/components/matrix/event-stream-service.js b/webclient/components/matrix/event-stream-service.js
new file mode 100644
index 0000000000..0a3a12192b
--- /dev/null
+++ b/webclient/components/matrix/event-stream-service.js
@@ -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();
+ }
+ };
+
+}]);
diff --git a/webclient/components/matrix/matrix-service.js b/webclient/components/matrix/matrix-service.js
index 6d66111469..0a2d8005b6 100644
--- a/webclient/components/matrix/matrix-service.js
+++ b/webclient/components/matrix/matrix-service.js
@@ -297,6 +297,15 @@ angular.module('matrixService', [])
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() {
|