fix dm detection and conf call code with lazy loading
parent
7ea913ccec
commit
d87d34030a
46
src/Rooms.js
46
src/Rooms.js
|
@ -31,26 +31,26 @@ export function getDisplayAliasForRoom(room) {
|
||||||
* If the room contains only two members including the logged-in user,
|
* If the room contains only two members including the logged-in user,
|
||||||
* return the other one. Otherwise, return null.
|
* return the other one. Otherwise, return null.
|
||||||
*/
|
*/
|
||||||
export function getOnlyOtherMember(room, me) {
|
export function getOnlyOtherMember(room, myUserId) {
|
||||||
const joinedMembers = room.getJoinedMembers();
|
|
||||||
|
|
||||||
if (joinedMembers.length === 2) {
|
if (room.currentState.getJoinedMemberCount() === 2) {
|
||||||
return joinedMembers.filter(function(m) {
|
return room.getJoinedMembers().filter(function(m) {
|
||||||
return m.userId !== me.userId;
|
return m.userId !== myUserId;
|
||||||
})[0];
|
})[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _isConfCallRoom(room, me, conferenceHandler) {
|
function _isConfCallRoom(room, myUserId, conferenceHandler) {
|
||||||
if (!conferenceHandler) return false;
|
if (!conferenceHandler) return false;
|
||||||
|
|
||||||
if (me.membership != "join") {
|
const myMembership = room.getMyMembership(myUserId);
|
||||||
|
if (myMembership != "join") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const otherMember = getOnlyOtherMember(room, me);
|
const otherMember = getOnlyOtherMember(room, myUserId);
|
||||||
if (otherMember === null) {
|
if (otherMember === null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -68,28 +68,30 @@ const isConfCallRoomCache = {
|
||||||
// $roomId: bool
|
// $roomId: bool
|
||||||
};
|
};
|
||||||
|
|
||||||
export function isConfCallRoom(room, me, conferenceHandler) {
|
export function isConfCallRoom(room, myUserId, conferenceHandler) {
|
||||||
if (isConfCallRoomCache[room.roomId] !== undefined) {
|
if (isConfCallRoomCache[room.roomId] !== undefined) {
|
||||||
return isConfCallRoomCache[room.roomId];
|
return isConfCallRoomCache[room.roomId];
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = _isConfCallRoom(room, me, conferenceHandler);
|
const result = _isConfCallRoom(room, myUserId, conferenceHandler);
|
||||||
|
|
||||||
isConfCallRoomCache[room.roomId] = result;
|
isConfCallRoomCache[room.roomId] = result;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function looksLikeDirectMessageRoom(room, me) {
|
export function looksLikeDirectMessageRoom(room, myUserId) {
|
||||||
if (me.membership == "join" || me.membership === "ban" || me.isKicked()) {
|
const myMembership = room.getMyMembership(myUserId);
|
||||||
|
const me = room.getMember(myUserId);
|
||||||
|
|
||||||
|
if (myMembership == "join" || myMembership === "ban" || (me && me.isKicked())) {
|
||||||
// Used to split rooms via tags
|
// Used to split rooms via tags
|
||||||
const tagNames = Object.keys(room.tags);
|
const tagNames = Object.keys(room.tags);
|
||||||
// Used for 1:1 direct chats
|
// Used for 1:1 direct chats
|
||||||
const members = room.currentState.getMembers();
|
|
||||||
|
|
||||||
// Show 1:1 chats in seperate "Direct Messages" section as long as they haven't
|
// Show 1:1 chats in seperate "Direct Messages" section as long as they haven't
|
||||||
// been moved to a different tag section
|
// been moved to a different tag section
|
||||||
if (members.length === 2 && !tagNames.length) {
|
// TODO: Use SUMMARYAPI to take invited users into account
|
||||||
|
if (room.currentState.getJoinedMemberCount() === 2 && !tagNames.length) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,10 +101,10 @@ export function looksLikeDirectMessageRoom(room, me) {
|
||||||
export function guessAndSetDMRoom(room, isDirect) {
|
export function guessAndSetDMRoom(room, isDirect) {
|
||||||
let newTarget;
|
let newTarget;
|
||||||
if (isDirect) {
|
if (isDirect) {
|
||||||
const guessedTarget = guessDMRoomTarget(
|
const guessedUserId = guessDMRoomTargetId(
|
||||||
room, room.getMember(MatrixClientPeg.get().credentials.userId),
|
room, MatrixClientPeg.get().getUserId()
|
||||||
);
|
);
|
||||||
newTarget = guessedTarget.userId;
|
newTarget = guessedUserId;
|
||||||
} else {
|
} else {
|
||||||
newTarget = null;
|
newTarget = null;
|
||||||
}
|
}
|
||||||
|
@ -158,13 +160,13 @@ export function setDMRoom(roomId, userId) {
|
||||||
* Given a room, estimate which of its members is likely to
|
* Given a room, estimate which of its members is likely to
|
||||||
* be the target if the room were a DM room and return that user.
|
* be the target if the room were a DM room and return that user.
|
||||||
*/
|
*/
|
||||||
export function guessDMRoomTarget(room, me) {
|
function guessDMRoomTargetId(room, myUserId) {
|
||||||
let oldestTs;
|
let oldestTs;
|
||||||
let oldestUser;
|
let oldestUser;
|
||||||
|
|
||||||
// Pick the joined user who's been here longest (and isn't us),
|
// Pick the joined user who's been here longest (and isn't us),
|
||||||
for (const user of room.getJoinedMembers()) {
|
for (const user of room.getJoinedMembers()) {
|
||||||
if (user.userId == me.userId) continue;
|
if (user.userId == myUserId) continue;
|
||||||
|
|
||||||
if (oldestTs === undefined || (user.events.member && user.events.member.getTs() < oldestTs)) {
|
if (oldestTs === undefined || (user.events.member && user.events.member.getTs() < oldestTs)) {
|
||||||
oldestUser = user;
|
oldestUser = user;
|
||||||
|
@ -175,7 +177,7 @@ export function guessDMRoomTarget(room, me) {
|
||||||
|
|
||||||
// if there are no joined members other than us, use the oldest member
|
// if there are no joined members other than us, use the oldest member
|
||||||
for (const user of room.currentState.getMembers()) {
|
for (const user of room.currentState.getMembers()) {
|
||||||
if (user.userId == me.userId) continue;
|
if (user.userId == myUserId) continue;
|
||||||
|
|
||||||
if (oldestTs === undefined || (user.events.member && user.events.member.getTs() < oldestTs)) {
|
if (oldestTs === undefined || (user.events.member && user.events.member.getTs() < oldestTs)) {
|
||||||
oldestUser = user;
|
oldestUser = user;
|
||||||
|
@ -183,6 +185,6 @@ export function guessDMRoomTarget(room, me) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldestUser === undefined) return me;
|
if (oldestUser === undefined) return myUserId;
|
||||||
return oldestUser;
|
return oldestUser;
|
||||||
}
|
}
|
||||||
|
|
|
@ -342,8 +342,8 @@ module.exports = React.createClass({
|
||||||
if (!taggedRoom) {
|
if (!taggedRoom) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const me = taggedRoom.getMember(MatrixClientPeg.get().credentials.userId);
|
const myUserId = MatrixClientPeg.get().getUserId();
|
||||||
if (HIDE_CONFERENCE_CHANS && Rooms.isConfCallRoom(taggedRoom, me, this.props.ConferenceHandler)) {
|
if (HIDE_CONFERENCE_CHANS && Rooms.isConfCallRoom(taggedRoom, myUserId, this.props.ConferenceHandler)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -173,8 +173,7 @@ class RoomListStore extends Store {
|
||||||
if (!this._matrixClient) return;
|
if (!this._matrixClient) return;
|
||||||
|
|
||||||
this._matrixClient.getRooms().forEach((room, index) => {
|
this._matrixClient.getRooms().forEach((room, index) => {
|
||||||
const me = room.getMember(this._matrixClient.credentials.userId);
|
const membership = room.getMyMembership(this._matrixClient.getUserId());
|
||||||
const membership = me ? me.membership : room.getSyncedMembership();
|
|
||||||
|
|
||||||
if (membership == "invite") {
|
if (membership == "invite") {
|
||||||
lists["im.vector.fake.invite"].push(room);
|
lists["im.vector.fake.invite"].push(room);
|
||||||
|
|
|
@ -96,9 +96,10 @@ export default class DMRoomMap {
|
||||||
if (this.roomToUser[roomId] === undefined) {
|
if (this.roomToUser[roomId] === undefined) {
|
||||||
// no entry? if the room is an invite, look for the is_direct hint.
|
// no entry? if the room is an invite, look for the is_direct hint.
|
||||||
const room = this.matrixClient.getRoom(roomId);
|
const room = this.matrixClient.getRoom(roomId);
|
||||||
|
// TODO Use SUMMARYAPI to fix DM detection?
|
||||||
if (room) {
|
if (room) {
|
||||||
const me = room.getMember(this.matrixClient.getUserId());
|
const me = room.getMember(this.matrixClient.getUserId());
|
||||||
return me.getDMInviter();
|
return me && me.getDMInviter();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this.roomToUser[roomId];
|
return this.roomToUser[roomId];
|
||||||
|
|
Loading…
Reference in New Issue