disable broken event dup suppression, and fix echo for /me
This commit is contained in:
parent
9be1b2cb23
commit
44bd5e04dd
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue