summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--webclient/components/matrix/event-handler-service.js11
-rw-r--r--webclient/room/room-controller.js30
2 files changed, 25 insertions, 16 deletions
diff --git a/webclient/components/matrix/event-handler-service.js b/webclient/components/matrix/event-handler-service.js
index cd4f2ccf28..d2bb31053f 100644
--- a/webclient/components/matrix/event-handler-service.js
+++ b/webclient/components/matrix/event-handler-service.js
@@ -79,7 +79,8 @@ angular.module('eventHandlerService', [])
         initRoom(event.room_id);
         
         if (isLiveEvent) {
-            if (event.user_id === matrixService.config().user_id) {
+            if (event.user_id === matrixService.config().user_id &&
+                (event.content.msgtype === "m.text" || event.content.msgtype === "m.emote") ) {
                 // assume we've already echoed it
                 // FIXME: track events by ID and ungrey the right message to show it's been delivered
             }
@@ -162,11 +163,17 @@ angular.module('eventHandlerService', [])
         NAME_EVENT: NAME_EVENT,
     
         handleEvent: function(event, isLiveEvent) {
+            // FIXME: event duplication suppression is all broken as the code currently expect to handles
+            // events multiple times to get their side-effects...
+/*            
             if (eventMap[event.event_id]) {
                 console.log("discarding duplicate event: " + JSON.stringify(event));
                 return;
             }
-            
+            else {
+                eventMap[event.event_id] = 1;
+            }
+*/            
             if (event.type.indexOf('m.call.') === 0) {
                 handleCallEvent(event, isLiveEvent);
             }
diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js
index c738b490e2..e69adb9b46 100644
--- a/webclient/room/room-controller.js
+++ b/webclient/room/room-controller.js
@@ -302,7 +302,9 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
         scrollToBottom(true);
         
         var promise;
-        var isCmd = false;
+        var cmd;
+        var args;
+        var echo = false;
         
         // Check for IRC style commands first
         var line = $scope.textInput;
@@ -311,17 +313,16 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
         line = line.replace(/\s+$/, "");
         
         if (line[0] === "/" && line[1] !== "/") {
-            isCmd = true;
-            
             var bits = line.match(/^(\S+?)( +(.*))?$/);
-            var cmd = bits[1];
-            var args = bits[3];
+            cmd = bits[1];
+            args = bits[3];
             
             console.log("cmd: " + cmd + ", args: " + args);
             
             switch (cmd) {
                 case "/me":
                     promise = matrixService.sendEmoteMessage($scope.room_id, args);
+                    echo = true;
                     break;
                     
                 case "/nick":
@@ -453,17 +454,20 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
         }
         
         // By default send this as a message unless it's an IRC-style command
-        if (!promise && !isCmd) {
-            var message = $scope.textInput;
-            $scope.textInput = "";
-
+        if (!promise && !cmd) {
+            // Make the request
+            promise = matrixService.sendTextMessage($scope.room_id, line);
+            echo = true;
+        }
+        
+        if (echo) {
             // Echo the message to the room
             // To do so, create a minimalist fake text message event and add it to the in-memory list of room messages
             var echoMessage = {
                 content: {
-                    body: message,
+                    body: (cmd === "/me" ? args : line),
                     hsob_ts: new Date().getTime(), // fake a timestamp
-                    msgtype: "m.text"
+                    msgtype: (cmd === "/me" ? "m.emote" : "m.text"),
                 },
                 room_id: $scope.room_id,
                 type: "m.room.message",
@@ -472,11 +476,9 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
                 // echo_msg_state: "messagePending"     // Add custom field to indicate the state of this fake message to HTML
             };
 
+            $scope.textInput = "";
             $rootScope.events.rooms[$scope.room_id].messages.push(echoMessage);
             scrollToBottom();
-
-            // Make the request
-            promise = matrixService.sendTextMessage($scope.room_id, message);
         }
 
         if (promise) {