mirror of
https://mau.dev/maunium/synapse.git
synced 2024-10-01 01:36:05 -04:00
Added bing detection logic. Persist the display name of the user in localstorage for use when binging.
This commit is contained in:
parent
660364d6a7
commit
a402e0c5e6
@ -140,8 +140,41 @@ function(matrixService, $rootScope, $q, $timeout, mPresence) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (window.Notification) {
|
if (window.Notification) {
|
||||||
// Show notification when the window is hidden, or the user is idle
|
var bingWords = matrixService.config().bingWords;
|
||||||
if (document.hidden || matrixService.presence.unavailable === mPresence.getState()) {
|
var content = event.content.body;
|
||||||
|
var shouldBing = false;
|
||||||
|
|
||||||
|
// case-insensitive name check for user_id OR display_name if they exist
|
||||||
|
var myUserId = matrixService.config().user_id;
|
||||||
|
if (myUserId) {
|
||||||
|
myUserId = myUserId.toLocaleLowerCase();
|
||||||
|
}
|
||||||
|
var myDisplayName = matrixService.config().display_name;
|
||||||
|
if (myDisplayName) {
|
||||||
|
myDisplayName = myDisplayName.toLocaleLowerCase();
|
||||||
|
}
|
||||||
|
if ( (myDisplayName && content.toLocaleLowerCase().indexOf(myDisplayName) != -1) ||
|
||||||
|
(myUserId && content.toLocaleLowerCase().indexOf(myUserId) != -1) ) {
|
||||||
|
shouldBing = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// bing word list check
|
||||||
|
if (bingWords && !shouldBing) {
|
||||||
|
for (var i=0; i<bingWords.length; i++) {
|
||||||
|
// TODO: Should really be a word check, not a string of characters check.
|
||||||
|
// E.g. bing word is "coffee", "I have coffee" = bing, "I am a coffeepot" = no bing
|
||||||
|
// Currently it will bing for both.
|
||||||
|
if (content.indexOf(bingWords[i]) != -1) {
|
||||||
|
shouldBing = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Binging every message when idle doesn't make much sense. Can we use this more sensibly?
|
||||||
|
var isIdle = (document.hidden || matrixService.presence.unavailable === mPresence.getState());
|
||||||
|
|
||||||
|
if (shouldBing) {
|
||||||
console.log("Displaying notification for "+JSON.stringify(event));
|
console.log("Displaying notification for "+JSON.stringify(event));
|
||||||
var notification = new window.Notification(
|
var notification = new window.Notification(
|
||||||
($rootScope.events.rooms[event.room_id].members[event.user_id].displayname || event.user_id) +
|
($rootScope.events.rooms[event.room_id].members[event.user_id].displayname || event.user_id) +
|
||||||
|
@ -117,6 +117,10 @@ angular.module('HomeController', ['matrixService', 'eventHandlerService', 'Recen
|
|||||||
matrixService.getDisplayName($scope.config.user_id).then(
|
matrixService.getDisplayName($scope.config.user_id).then(
|
||||||
function(response) {
|
function(response) {
|
||||||
$scope.profile.displayName = response.data.displayname;
|
$scope.profile.displayName = response.data.displayname;
|
||||||
|
var config = matrixService.config();
|
||||||
|
config.display_name = response.data.displayname;
|
||||||
|
matrixService.setConfig(config);
|
||||||
|
matrixService.saveConfig();
|
||||||
},
|
},
|
||||||
function(error) {
|
function(error) {
|
||||||
$scope.feedback = "Can't load display name";
|
$scope.feedback = "Can't load display name";
|
||||||
|
@ -15,8 +15,8 @@ limitations under the License.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
|
angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
|
||||||
.controller('RoomController', ['$filter', '$scope', '$timeout', '$routeParams', '$location', '$rootScope', 'matrixService', 'eventHandlerService', 'mFileUpload', 'mPresence', 'matrixPhoneService', 'MatrixCall',
|
.controller('RoomController', ['$filter', '$scope', '$timeout', '$routeParams', '$location', '$rootScope', 'matrixService', 'eventHandlerService', 'mFileUpload', 'matrixPhoneService', 'MatrixCall',
|
||||||
function($filter, $scope, $timeout, $routeParams, $location, $rootScope, matrixService, eventHandlerService, mFileUpload, mPresence, matrixPhoneService, MatrixCall) {
|
function($filter, $scope, $timeout, $routeParams, $location, $rootScope, matrixService, eventHandlerService, mFileUpload, matrixPhoneService, MatrixCall) {
|
||||||
'use strict';
|
'use strict';
|
||||||
var MESSAGES_PER_PAGINATION = 30;
|
var MESSAGES_PER_PAGINATION = 30;
|
||||||
var THUMBNAIL_SIZE = 320;
|
var THUMBNAIL_SIZE = 320;
|
||||||
|
@ -51,10 +51,10 @@
|
|||||||
<h3>Desktop notifications</h3>
|
<h3>Desktop notifications</h3>
|
||||||
<div class="section" ng-switch="settings.notifications">
|
<div class="section" ng-switch="settings.notifications">
|
||||||
<div ng-switch-when="granted">
|
<div ng-switch-when="granted">
|
||||||
Notifications are enabled.
|
Notifications are enabled. You will be alerted when a message contains your user ID or display name.
|
||||||
<div class="section">
|
<div class="section">
|
||||||
<h4>Words to alert on:</h4>
|
<h4>Additional words to alert on:</h4>
|
||||||
<input size=40 name="bingWords" ng-model="settings.bingWords" ng-list placeholder="Enter words separated with ,"
|
<input size=40 name="bingWords" ng-model="settings.bingWords" ng-list placeholder="Enter case-sensitive words separated with ,"
|
||||||
ng-blur="saveBingWords()"/>
|
ng-blur="saveBingWords()"/>
|
||||||
<ul>
|
<ul>
|
||||||
<li ng-repeat="word in settings.bingWords">{{word}}</li>
|
<li ng-repeat="word in settings.bingWords">{{word}}</li>
|
||||||
|
Loading…
Reference in New Issue
Block a user