Uses a single avatar URL, allows to override gravatar with a custom URL for avatars in interface_config.js.

This commit is contained in:
Boris Grozev 2015-12-08 17:19:51 -06:00
parent a647400cb8
commit a2c41392dd
7 changed files with 52 additions and 54 deletions

View File

@ -27,5 +27,7 @@ var interfaceConfig = {
/** /**
* Whether to only show the filmstrip (and hide the toolbar). * Whether to only show the filmstrip (and hide the toolbar).
*/ */
filmStripOnly: false filmStripOnly: false,
RANDOM_AVATAR_URL_PREFIX: false,
RANDOM_AVATAR_URL_SUFFIX: false
}; };

View File

@ -896,11 +896,11 @@ UI.setVideoMuteButtonsState = function (mute) {
} }
}; };
UI.userAvatarChanged = function (resourceJid, thumbUrl, contactListUrl) { UI.userAvatarChanged = function (resourceJid, avatarUrl) {
VideoLayout.userAvatarChanged(resourceJid, thumbUrl); VideoLayout.userAvatarChanged(resourceJid, avatarUrl);
ContactList.userAvatarChanged(resourceJid, contactListUrl); ContactList.userAvatarChanged(resourceJid, avatarUrl);
if(resourceJid === APP.xmpp.myResource()) if(resourceJid === APP.xmpp.myResource())
SettingsMenu.changeAvatar(thumbUrl); SettingsMenu.changeAvatar(avatarUrl);
}; };
UI.setVideoMute = setVideoMute; UI.setVideoMute = setVideoMute;

View File

@ -1,4 +1,4 @@
/* global Strophe, APP, MD5, config */ /* global Strophe, APP, MD5, config, interfaceConfig */
var Settings = require("../../settings/Settings"); var Settings = require("../../settings/Settings");
var users = {}; var users = {};
@ -18,55 +18,51 @@ var Avatar = {
} }
users[jid] = id; users[jid] = id;
} }
var thumbUrl = this.getThumbUrl(jid); var avatarUrl = this.getAvatarUrl(jid);
var contactListUrl = this.getContactListUrl(jid);
var resourceJid = Strophe.getResourceFromJid(jid); var resourceJid = Strophe.getResourceFromJid(jid);
APP.UI.userAvatarChanged(resourceJid, thumbUrl, contactListUrl); APP.UI.userAvatarChanged(resourceJid, avatarUrl);
}, },
/** /**
* Returns image URL for the avatar to be displayed on large video area * Returns the URL of the image for the avatar of a particular user,
* where current active speaker is presented. * identified by its jid
* @param jid
* @param jid full MUC jid of the user for whom we want to obtain avatar URL * @param jid full MUC jid of the user for whom we want to obtain avatar URL
*/ */
getActiveSpeakerUrl: function (jid) { getAvatarUrl: function (jid) {
return this.getGravatarUrl(jid, 100); if (config.disableThirdPartyRequests) {
},
/**
* Returns image URL for the avatar to be displayed on small video thumbnail
* @param jid full MUC jid of the user for whom we want to obtain avatar URL
*/
getThumbUrl: function (jid) {
return this.getGravatarUrl(jid, 100);
},
/**
* Returns the URL for the avatar to be displayed as contactlist item
* @param jid full MUC jid of the user for whom we want to obtain avatar URL
*/
getContactListUrl: function (jid) {
return this.getGravatarUrl(jid, 30);
},
getGravatarUrl: function (jid, size) {
if (!jid) {
console.error("Get gravatar - jid is undefined");
return null;
}
var id = users[jid];
if (!id) {
console.warn(
"No avatar stored yet for " + jid + " - using JID as ID");
id = jid;
}
if (!config.disableThirdPartyRequests) {
return 'https://www.gravatar.com/avatar/' +
MD5.hexdigest(id.trim().toLowerCase()) +
"?d=wavatar&size=" + (size || "30");
} else {
return 'images/avatar2.png'; return 'images/avatar2.png';
} else {
if (!jid) {
console.error("Get avatar - jid is undefined");
return null;
}
var id = users[jid];
// If the ID looks like an email, we'll use gravatar.
// Otherwise, it's a random avatar, and we'll use the configured
// URL.
var random = !id || id.indexOf('@') < 0;
if (!id) {
console.warn(
"No avatar stored yet for " + jid + " - using JID as ID");
id = jid;
}
id = MD5.hexdigest(id.trim().toLowerCase());
// Default to using gravatar.
var urlPref = 'https://www.gravatar.com/avatar/';
var urlSuf = "?d=wavatar&size=100";
if (random && interfaceConfig.RANDOM_AVATAR_URL_PREFIX) {
urlPref = interfaceConfig.RANDOM_AVATAR_URL_PREFIX;
urlSuf = interfaceConfig.RANDOM_AVATAR_URL_SUFFIX;
}
return urlPref + id + urlSuf;
} }
} }
}; };
module.exports = Avatar; module.exports = Avatar;

View File

@ -32,7 +32,7 @@ function updateNumberOfParticipants(delta) {
function createAvatar(jid) { function createAvatar(jid) {
var avatar = document.createElement('img'); var avatar = document.createElement('img');
avatar.className = "icon-avatar avatar"; avatar.className = "icon-avatar avatar";
avatar.src = Avatar.getContactListUrl(jid); avatar.src = Avatar.getAvatarUrl(jid);
return avatar; return avatar;
} }
@ -181,11 +181,11 @@ var ContactList = {
contactName.html(displayName); contactName.html(displayName);
}, },
userAvatarChanged: function (resourceJid, contactListUrl) { userAvatarChanged: function (resourceJid, avatarUrl) {
// set the avatar in the contact list // set the avatar in the contact list
var contact = $('#' + resourceJid + '>img'); var contact = $('#' + resourceJid + '>img');
if (contact && contact.length > 0) { if (contact && contact.length > 0) {
contact.get(0).src = contactListUrl; contact.get(0).src = avatarUrl;
} }
} }

View File

@ -242,7 +242,7 @@ function getCameraVideoSize(videoWidth,
function updateActiveSpeakerAvatarSrc() { function updateActiveSpeakerAvatarSrc() {
var avatar = $("#activeSpeakerAvatar")[0]; var avatar = $("#activeSpeakerAvatar")[0];
var jid = currentSmallVideo.peerJid; var jid = currentSmallVideo.peerJid;
var url = Avatar.getActiveSpeakerUrl(jid); var url = Avatar.getAvatarUrl(jid);
if (avatar.src === url) if (avatar.src === url)
return; return;
if (jid) { if (jid) {

View File

@ -369,7 +369,7 @@ SmallVideo.prototype.showAvatar = function (show) {
if (!this.hasAvatar) { if (!this.hasAvatar) {
if (this.peerJid) { if (this.peerJid) {
// Init avatar // Init avatar
this.avatarChanged(Avatar.getThumbUrl(this.peerJid)); this.avatarChanged(Avatar.getAvatarUrl(this.peerJid));
} else { } else {
console.error("Unable to init avatar - no peerjid", this); console.error("Unable to init avatar - no peerjid", this);
return; return;

View File

@ -1005,14 +1005,14 @@ var VideoLayout = (function (my) {
} }
}; };
my.userAvatarChanged = function(resourceJid, thumbUrl) { my.userAvatarChanged = function(resourceJid, avatarUrl) {
var smallVideo = VideoLayout.getSmallVideo(resourceJid); var smallVideo = VideoLayout.getSmallVideo(resourceJid);
if(smallVideo) if(smallVideo)
smallVideo.avatarChanged(thumbUrl); smallVideo.avatarChanged(avatarUrl);
else else
console.warn( console.warn(
"Missed avatar update - no small video yet for " + resourceJid); "Missed avatar update - no small video yet for " + resourceJid);
LargeVideo.updateAvatar(resourceJid, thumbUrl); LargeVideo.updateAvatar(resourceJid, avatarUrl);
}; };
my.createEtherpadIframe = function(src, onloadHandler) my.createEtherpadIframe = function(src, onloadHandler)