diff --git a/src/Avatar.js b/src/Avatar.js index 67608da53d..2e15874b4e 100644 --- a/src/Avatar.js +++ b/src/Avatar.js @@ -17,6 +17,7 @@ limitations under the License. 'use strict'; import {ContentRepo} from 'matrix-js-sdk'; import MatrixClientPeg from './MatrixClientPeg'; +import DMRoomMap from './utils/DMRoomMap'; module.exports = { avatarUrlForMember: function(member, width, height, resizeMethod) { @@ -62,6 +63,8 @@ module.exports = { /** * returns the first (non-sigil) character of 'name', * converted to uppercase + * @param {string} name + * @return {string} the first letter */ getInitialLetter(name) { if (name.length < 1) { @@ -90,4 +93,37 @@ module.exports = { const firstChar = name.substring(idx, idx+chars); return firstChar.toUpperCase(); }, + + avatarUrlForRoom(room, width, height, resizeMethod) { + const explicitRoomAvatar = room.getAvatarUrl( + MatrixClientPeg.get().getHomeserverUrl(), + width, + height, + resizeMethod, + false, + ); + if (explicitRoomAvatar) { + return explicitRoomAvatar; + } + + let otherMember = null; + const otherUserId = DMRoomMap.shared().getUserIdForRoomId(room.roomId); + if (otherUserId) { + otherMember = room.getMember(otherUserId); + } else { + // if the room is not marked as a 1:1, but only has max 2 members + // then still try to show any avatar (pref. other member) + otherMember = room.getAvatarFallbackMember(); + } + if (otherMember) { + return otherMember.getAvatarUrl( + MatrixClientPeg.get().getHomeserverUrl(), + width, + height, + resizeMethod, + false, + ); + } + return null; + }, }; diff --git a/src/components/views/avatars/RoomAvatar.js b/src/components/views/avatars/RoomAvatar.js index 38f088238f..557a4d8dbf 100644 --- a/src/components/views/avatars/RoomAvatar.js +++ b/src/components/views/avatars/RoomAvatar.js @@ -19,7 +19,7 @@ import {ContentRepo} from "matrix-js-sdk"; import MatrixClientPeg from "../../../MatrixClientPeg"; import Modal from '../../../Modal'; import sdk from "../../../index"; -import DMRoomMap from '../../../utils/DMRoomMap'; +import Avatar from '../../../Avatar'; module.exports = React.createClass({ displayName: 'RoomAvatar', @@ -89,7 +89,6 @@ module.exports = React.createClass({ props.resizeMethod, ), // highest priority this.getRoomAvatarUrl(props), - this.getOneToOneAvatar(props), // lowest priority ].filter(function(url) { return (url != null && url != ""); }); @@ -98,41 +97,14 @@ module.exports = React.createClass({ getRoomAvatarUrl: function(props) { if (!props.room) return null; - return props.room.getAvatarUrl( - MatrixClientPeg.get().getHomeserverUrl(), + return Avatar.avatarUrlForRoom( + props.room, Math.floor(props.width * window.devicePixelRatio), Math.floor(props.height * window.devicePixelRatio), props.resizeMethod, - false, ); }, - getOneToOneAvatar: function(props) { - const room = props.room; - if (!room) { - return null; - } - let otherMember = null; - const otherUserId = DMRoomMap.shared().getUserIdForRoomId(room.roomId); - if (otherUserId) { - otherMember = room.getMember(otherUserId); - } else { - // if the room is not marked as a 1:1, but only has max 2 members - // then still try to show any avatar (pref. other member) - otherMember = room.getAvatarFallbackMember(); - } - if (otherMember) { - return otherMember.getAvatarUrl( - MatrixClientPeg.get().getHomeserverUrl(), - Math.floor(props.width * window.devicePixelRatio), - Math.floor(props.height * window.devicePixelRatio), - props.resizeMethod, - false, - ); - } - return null; - }, - onRoomAvatarClick: function() { const avatarUrl = this.props.room.getAvatarUrl( MatrixClientPeg.get().getHomeserverUrl(),