diff --git a/webclient/components/fileUpload/file-upload-service.js b/webclient/components/fileUpload/file-upload-service.js
index 6606f31e22..5f01478fd1 100644
--- a/webclient/components/fileUpload/file-upload-service.js
+++ b/webclient/components/fileUpload/file-upload-service.js
@@ -33,7 +33,7 @@ angular.module('mFileUpload', ['matrixService', 'mUtilities'])
console.log("Uploading " + file.name + "... to /matrix/content");
matrixService.uploadContent(file).then(
function(response) {
- var content_url = location.origin + "/matrix/content/" + response.data.content_token;
+ var content_url = response.data.content_token;
console.log(" -> Successfully uploaded! Available at " + content_url);
deferred.resolve(content_url);
},
@@ -82,6 +82,7 @@ angular.module('mFileUpload', ['matrixService', 'mUtilities'])
// First, get the image size
mUtilities.getImageSize(imageFile).then(
function(size) {
+ console.log("image size: " + JSON.stringify(size));
// The final operation: send imageFile
var uploadImage = function() {
diff --git a/webclient/components/matrix/event-handler-service.js b/webclient/components/matrix/event-handler-service.js
index b8529895fe..b5eb73d92b 100644
--- a/webclient/components/matrix/event-handler-service.js
+++ b/webclient/components/matrix/event-handler-service.js
@@ -35,6 +35,8 @@ angular.module('eventHandlerService', [])
$rootScope.events = {
rooms: {}, // will contain roomId: { messages:[], members:{userid1: event} }
};
+
+ $rootScope.presence = {};
var initRoom = function(room_id) {
if (!(room_id in $rootScope.events.rooms)) {
@@ -44,6 +46,12 @@ angular.module('eventHandlerService', [])
$rootScope.events.rooms[room_id].members = {};
}
}
+
+ var reInitRoom = function(room_id) {
+ $rootScope.events.rooms[room_id] = {};
+ $rootScope.events.rooms[room_id].messages = [];
+ $rootScope.events.rooms[room_id].members = {};
+ }
var handleMessage = function(event, isLiveEvent) {
if ("membership_target" in event.content) {
@@ -69,11 +77,23 @@ angular.module('eventHandlerService', [])
var handleRoomMember = function(event, isLiveEvent) {
initRoom(event.room_id);
+
+ // add membership changes as if they were a room message if something interesting changed
+ if (event.content.prev !== event.content.membership) {
+ if (isLiveEvent) {
+ $rootScope.events.rooms[event.room_id].messages.push(event);
+ }
+ else {
+ $rootScope.events.rooms[event.room_id].messages.unshift(event);
+ }
+ }
+
$rootScope.events.rooms[event.room_id].members[event.user_id] = event;
$rootScope.$broadcast(MEMBER_EVENT, event, isLiveEvent);
};
var handlePresence = function(event, isLiveEvent) {
+ $rootScope.presence[event.content.user_id] = event;
$rootScope.$broadcast(PRESENCE_EVENT, event, isLiveEvent);
};
@@ -107,6 +127,10 @@ angular.module('eventHandlerService', [])
for (var i=0; i<events.length; i++) {
this.handleEvent(events[i], isLiveEvents);
}
- }
+ },
+
+ reInitRoom: function(room_id) {
+ reInitRoom(room_id);
+ },
};
}]);
diff --git a/webclient/components/matrix/event-stream-service.js b/webclient/components/matrix/event-stream-service.js
index a446fad5d4..a1a98b2a36 100644
--- a/webclient/components/matrix/event-stream-service.js
+++ b/webclient/components/matrix/event-stream-service.js
@@ -48,11 +48,12 @@ angular.module('eventStreamService', [])
var saveStreamSettings = function() {
localStorage.setItem("streamSettings", JSON.stringify(settings));
};
-
- var startEventStream = function() {
+
+ var doEventStream = function(deferred) {
settings.shouldPoll = true;
settings.isActive = true;
- var deferred = $q.defer();
+ deferred = deferred || $q.defer();
+
// run the stream from the latest token
matrixService.getEventStream(settings.from, TIMEOUT_MS).then(
function(response) {
@@ -63,13 +64,16 @@ angular.module('eventStreamService', [])
settings.from = response.data.end;
- console.log("[EventStream] Got response from "+settings.from+" to "+response.data.end);
+ console.log(
+ "[EventStream] Got response from "+settings.from+
+ " to "+response.data.end
+ );
eventHandlerService.handleEvents(response.data.chunk, true);
deferred.resolve(response);
if (settings.shouldPoll) {
- $timeout(startEventStream, 0);
+ $timeout(doEventStream, 0);
}
else {
console.log("[EventStream] Stopping poll.");
@@ -83,13 +87,48 @@ angular.module('eventStreamService', [])
deferred.reject(error);
if (settings.shouldPoll) {
- $timeout(startEventStream, ERR_TIMEOUT_MS);
+ $timeout(doEventStream, ERR_TIMEOUT_MS);
}
else {
console.log("[EventStream] Stopping polling.");
}
}
);
+
+ return deferred.promise;
+ }
+
+ var startEventStream = function() {
+ settings.shouldPoll = true;
+ settings.isActive = true;
+ var deferred = $q.defer();
+
+ // FIXME: We are discarding all the messages.
+ matrixService.rooms().then(
+ function(response) {
+ var rooms = response.data.rooms;
+ for (var i = 0; i < rooms.length; ++i) {
+ var room = rooms[i];
+ if ("state" in room) {
+ for (var j = 0; j < room.state.length; ++j) {
+ eventHandlerService.handleEvents(room.state[j], false);
+ }
+ }
+ }
+
+ var presence = response.data.presence;
+ for (var i = 0; i < presence.length; ++i) {
+ eventHandlerService.handleEvent(presence[i], false);
+ }
+
+ settings.from = response.data.end
+ doEventStream(deferred);
+ },
+ function(error) {
+ $scope.feedback = "Failure: " + error.data;
+ }
+ );
+
return deferred.promise;
};
diff --git a/webclient/components/utilities/utilities-service.js b/webclient/components/utilities/utilities-service.js
index 9cf858ef39..3df2f04458 100644
--- a/webclient/components/utilities/utilities-service.js
+++ b/webclient/components/utilities/utilities-service.js
@@ -38,10 +38,15 @@ angular.module('mUtilities', [])
img.src = e.target.result;
// Once ready, returns its size
- deferred.resolve({
- width: img.width,
- height: img.height
- });
+ img.onload = function() {
+ deferred.resolve({
+ width: img.width,
+ height: img.height
+ });
+ };
+ img.onerror = function(e) {
+ deferred.reject(e);
+ };
};
reader.onerror = function(e) {
deferred.reject(e);
@@ -71,33 +76,41 @@ angular.module('mUtilities', [])
reader.onload = function(e) {
img.src = e.target.result;
+
+ // Once ready, returns its size
+ img.onload = function() {
+ var ctx = canvas.getContext("2d");
+ ctx.drawImage(img, 0, 0);
- var ctx = canvas.getContext("2d");
- ctx.drawImage(img, 0, 0);
-
- var MAX_WIDTH = maxSize;
- var MAX_HEIGHT = maxSize;
- var width = img.width;
- var height = img.height;
+ var MAX_WIDTH = maxSize;
+ var MAX_HEIGHT = maxSize;
+ var width = img.width;
+ var height = img.height;
- if (width > height) {
- if (width > MAX_WIDTH) {
- height *= MAX_WIDTH / width;
- width = MAX_WIDTH;
- }
- } else {
- if (height > MAX_HEIGHT) {
- width *= MAX_HEIGHT / height;
- height = MAX_HEIGHT;
+ if (width > height) {
+ if (width > MAX_WIDTH) {
+ height *= MAX_WIDTH / width;
+ width = MAX_WIDTH;
+ }
+ } else {
+ if (height > MAX_HEIGHT) {
+ width *= MAX_HEIGHT / height;
+ height = MAX_HEIGHT;
+ }
}
- }
- canvas.width = width;
- canvas.height = height;
- var ctx = canvas.getContext("2d");
- ctx.drawImage(img, 0, 0, width, height);
+ canvas.width = width;
+ canvas.height = height;
+ var ctx = canvas.getContext("2d");
+ ctx.drawImage(img, 0, 0, width, height);
- var dataUrl = canvas.toDataURL("image/jpeg", 0.7);
- deferred.resolve(self.dataURItoBlob(dataUrl));
+ // Extract image data in the same format as the original one.
+ // The 0.7 compression value will work with formats that supports it like JPEG.
+ var dataUrl = canvas.toDataURL(imageFile.type, 0.7);
+ deferred.resolve(self.dataURItoBlob(dataUrl));
+ };
+ img.onerror = function(e) {
+ deferred.reject(e);
+ };
};
reader.onerror = function(e) {
deferred.reject(e);
|