remove duplicates from room lists

pull/21833/head
Bruno Windels 2018-09-04 13:07:24 +02:00
parent 245dfbf957
commit 441036ff93
2 changed files with 34 additions and 9 deletions

29
src/ArrayUtils.js Normal file
View File

@ -0,0 +1,29 @@
/*
Copyright 2018 New Vector
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/**
* creates a new array with only the unique values of the given array
* @return {array} the deduplicated array
*/
export function unique(arr) {
const cpy = [];
arr.forEach((el) => {
if (!cpy.includes(el)) {
cpy.push(el);
}
});
return cpy;
};

View File

@ -15,6 +15,7 @@ limitations under the License.
*/
import MatrixClientPeg from '../MatrixClientPeg';
import {unique} from '../ArrayUtils';
/**
* Class that takes a Matrix Client and flips the m.direct map
@ -120,19 +121,14 @@ export default class DMRoomMap {
return !guessedUserIdsThatChanged
.some((ids) => ids.roomId === roomId);
});
guessedUserIdsThatChanged.forEach(({userId, roomId}) => {
if (!userId) {
// if not able to guess the other user (unlikely)
// still put it in the map so the room stays marked
// as a DM, we just wont be able to show an avatar.
userId = "";
}
let roomIds = userToRooms[userId];
if (!roomIds) {
roomIds = userToRooms[userId] = [];
userToRooms[userId] = [roomId];
} else {
roomIds.push(roomId);
userToRooms[userId] = unique(roomIds);
}
roomIds.push(roomId);
});
return true;
}