Skip to content

Commit

Permalink
disable broken event dup suppression, and fix echo for /me
Browse files Browse the repository at this point in the history
  • Loading branch information
ara4n authored and Emmanuel ROHEE committed Sep 8, 2014
1 parent dd2ae64 commit ef0304b
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 16 deletions.
11 changes: 9 additions & 2 deletions webclient/components/matrix/event-handler-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down Expand Up @@ -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);
}
Expand Down
30 changes: 16 additions & 14 deletions webclient/room/room-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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":
Expand Down Expand Up @@ -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",
Expand All @@ -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) {
Expand Down

0 comments on commit ef0304b

Please sign in to comment.