mirror of
https://github.com/element-hq/synapse
synced 2024-08-19 05:40:58 +00:00
SYWEB-57: Highlight rooms which have had their bingers go off in blue.
Priority is the same as xchat so selected > blue > red.
This commit is contained in:
parent
99c445a6d6
commit
960b28c90a
5 changed files with 50 additions and 7 deletions
|
@ -816,6 +816,10 @@ textarea, input {
|
||||||
background-color: #fee;
|
background-color: #fee;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.recentsRoomBing {
|
||||||
|
background-color: #eef;
|
||||||
|
}
|
||||||
|
|
||||||
.recentsRoomName {
|
.recentsRoomName {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
padding-top: 7px;
|
padding-top: 7px;
|
||||||
|
|
|
@ -95,14 +95,22 @@ function(matrixService, $rootScope, $q, $timeout, $filter, mPresence, notificati
|
||||||
modelService.createRoomIdToAliasMapping(event.room_id, event.content.aliases[0]);
|
modelService.createRoomIdToAliasMapping(event.room_id, event.content.aliases[0]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var containsBingWord = function(event) {
|
||||||
|
if (!event.content || !event.content.body) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return notificationService.containsBingWord(
|
||||||
|
matrixService.config().user_id,
|
||||||
|
matrixService.config().display_name,
|
||||||
|
matrixService.config().bingWords,
|
||||||
|
event.content.body
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
var displayNotification = function(event) {
|
var displayNotification = function(event) {
|
||||||
if (window.Notification && event.user_id != matrixService.config().user_id) {
|
if (window.Notification && event.user_id != matrixService.config().user_id) {
|
||||||
var shouldBing = notificationService.containsBingWord(
|
var shouldBing = containsBingWord(event);
|
||||||
matrixService.config().user_id,
|
|
||||||
matrixService.config().display_name,
|
|
||||||
matrixService.config().bingWords,
|
|
||||||
event.content.body
|
|
||||||
);
|
|
||||||
|
|
||||||
// Ideally we would notify only when the window is hidden (i.e. document.hidden = true).
|
// Ideally we would notify only when the window is hidden (i.e. document.hidden = true).
|
||||||
//
|
//
|
||||||
|
@ -529,6 +537,10 @@ function(matrixService, $rootScope, $q, $timeout, $filter, mPresence, notificati
|
||||||
resetRoomMessages(room_id);
|
resetRoomMessages(room_id);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
eventContainsBingWord: function(event) {
|
||||||
|
return containsBingWord(event);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the last message event of a room
|
* Return the last message event of a room
|
||||||
* @param {String} room_id the room id
|
* @param {String} room_id the room id
|
||||||
|
|
|
@ -38,9 +38,22 @@ angular.module('recentsService', [])
|
||||||
// room_id: <number>
|
// room_id: <number>
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var BROADCAST_UNREAD_BING_MESSAGES = "recentsService:BROADCAST_UNREAD_BING_MESSAGES(room_id, event)";
|
||||||
|
var unreadBingMessages = {
|
||||||
|
// room_id: bingEvent
|
||||||
|
};
|
||||||
|
|
||||||
// listen for new unread messages
|
// listen for new unread messages
|
||||||
$rootScope.$on(eventHandlerService.MSG_EVENT, function(ngEvent, event, isLive) {
|
$rootScope.$on(eventHandlerService.MSG_EVENT, function(ngEvent, event, isLive) {
|
||||||
if (isLive && event.room_id !== selectedRoomId) {
|
if (isLive && event.room_id !== selectedRoomId) {
|
||||||
|
if (eventHandlerService.eventContainsBingWord(event)) {
|
||||||
|
if (!unreadBingMessages[event.room_id]) {
|
||||||
|
unreadBingMessages[event.room_id] = {};
|
||||||
|
}
|
||||||
|
unreadBingMessages[event.room_id] = event;
|
||||||
|
$rootScope.$broadcast(BROADCAST_UNREAD_BING_MESSAGES, event.room_id, event);
|
||||||
|
}
|
||||||
|
|
||||||
if (!unreadMessages[event.room_id]) {
|
if (!unreadMessages[event.room_id]) {
|
||||||
unreadMessages[event.room_id] = 0;
|
unreadMessages[event.room_id] = 0;
|
||||||
}
|
}
|
||||||
|
@ -66,11 +79,19 @@ angular.module('recentsService', [])
|
||||||
return unreadMessages;
|
return unreadMessages;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getUnreadBingMessages: function() {
|
||||||
|
return unreadBingMessages;
|
||||||
|
},
|
||||||
|
|
||||||
markAsRead: function(room_id) {
|
markAsRead: function(room_id) {
|
||||||
if (unreadMessages[room_id]) {
|
if (unreadMessages[room_id]) {
|
||||||
unreadMessages[room_id] = 0;
|
unreadMessages[room_id] = 0;
|
||||||
}
|
}
|
||||||
|
if (unreadBingMessages[room_id]) {
|
||||||
|
unreadBingMessages[room_id] = undefined;
|
||||||
|
}
|
||||||
$rootScope.$broadcast(BROADCAST_UNREAD_MESSAGES, room_id, 0);
|
$rootScope.$broadcast(BROADCAST_UNREAD_MESSAGES, room_id, 0);
|
||||||
|
$rootScope.$broadcast(BROADCAST_UNREAD_BING_MESSAGES, room_id, undefined);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -38,6 +38,12 @@ angular.module('RecentsController', ['matrixService', 'matrixFilter'])
|
||||||
$scope.unreadMessages = recentsService.getUnreadMessages();
|
$scope.unreadMessages = recentsService.getUnreadMessages();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// track the list of unread BING messages: the html will use this
|
||||||
|
$scope.unreadBings = recentsService.getUnreadBingMessages();
|
||||||
|
$scope.$on(recentsService.BROADCAST_UNREAD_BING_MESSAGES, function(ngEvent, room_id, event) {
|
||||||
|
$scope.unreadBings = recentsService.getUnreadBingMessages();
|
||||||
|
});
|
||||||
|
|
||||||
$scope.selectRoom = function(room) {
|
$scope.selectRoom = function(room) {
|
||||||
recentsService.markAsRead(room.room_id);
|
recentsService.markAsRead(room.room_id);
|
||||||
$rootScope.goToPage('room/' + (room.room_alias ? room.room_alias : room.room_id) );
|
$rootScope.goToPage('room/' + (room.room_alias ? room.room_alias : room.room_id) );
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<tbody ng-repeat="(index, room) in rooms | orderRecents"
|
<tbody ng-repeat="(index, room) in rooms | orderRecents"
|
||||||
ng-click="selectRoom(room)"
|
ng-click="selectRoom(room)"
|
||||||
class="recentsRoom"
|
class="recentsRoom"
|
||||||
ng-class="{'recentsRoomSelected': (room.room_id === recentsSelectedRoomID), 'recentsRoomUnread': (unreadMessages[room.room_id])}">
|
ng-class="{'recentsRoomSelected': (room.room_id === recentsSelectedRoomID), 'recentsRoomBing': (unreadBings[room.room_id]), 'recentsRoomUnread': (unreadMessages[room.room_id])}">
|
||||||
<tr>
|
<tr>
|
||||||
<td ng-class="room.current_room_state.state('m.room.join_rules').content.join_rule == 'public' ? 'recentsRoomName recentsPublicRoom' : 'recentsRoomName'">
|
<td ng-class="room.current_room_state.state('m.room.join_rules').content.join_rule == 'public' ? 'recentsRoomName recentsPublicRoom' : 'recentsRoomName'">
|
||||||
{{ room.room_id | mRoomName }}
|
{{ room.room_id | mRoomName }}
|
||||||
|
|
Loading…
Reference in a new issue