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).
*/
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) {
VideoLayout.userAvatarChanged(resourceJid, thumbUrl);
ContactList.userAvatarChanged(resourceJid, contactListUrl);
UI.userAvatarChanged = function (resourceJid, avatarUrl) {
VideoLayout.userAvatarChanged(resourceJid, avatarUrl);
ContactList.userAvatarChanged(resourceJid, avatarUrl);
if(resourceJid === APP.xmpp.myResource())
SettingsMenu.changeAvatar(thumbUrl);
SettingsMenu.changeAvatar(avatarUrl);
};
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 users = {};
@ -18,55 +18,51 @@ var Avatar = {
}
users[jid] = id;
}
var thumbUrl = this.getThumbUrl(jid);
var contactListUrl = this.getContactListUrl(jid);
var avatarUrl = this.getAvatarUrl(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
* where current active speaker is presented.
* Returns the URL of the image for the avatar of a particular user,
* identified by its jid
* @param jid
* @param jid full MUC jid of the user for whom we want to obtain avatar URL
*/
getActiveSpeakerUrl: function (jid) {
return this.getGravatarUrl(jid, 100);
},
/**
* 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 {
getAvatarUrl: function (jid) {
if (config.disableThirdPartyRequests) {
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;

View File

@ -32,7 +32,7 @@ function updateNumberOfParticipants(delta) {
function createAvatar(jid) {
var avatar = document.createElement('img');
avatar.className = "icon-avatar avatar";
avatar.src = Avatar.getContactListUrl(jid);
avatar.src = Avatar.getAvatarUrl(jid);
return avatar;
}
@ -181,11 +181,11 @@ var ContactList = {
contactName.html(displayName);
},
userAvatarChanged: function (resourceJid, contactListUrl) {
userAvatarChanged: function (resourceJid, avatarUrl) {
// set the avatar in the contact list
var contact = $('#' + resourceJid + '>img');
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() {
var avatar = $("#activeSpeakerAvatar")[0];
var jid = currentSmallVideo.peerJid;
var url = Avatar.getActiveSpeakerUrl(jid);
var url = Avatar.getAvatarUrl(jid);
if (avatar.src === url)
return;
if (jid) {

View File

@ -369,7 +369,7 @@ SmallVideo.prototype.showAvatar = function (show) {
if (!this.hasAvatar) {
if (this.peerJid) {
// Init avatar
this.avatarChanged(Avatar.getThumbUrl(this.peerJid));
this.avatarChanged(Avatar.getAvatarUrl(this.peerJid));
} else {
console.error("Unable to init avatar - no peerjid", this);
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);
if(smallVideo)
smallVideo.avatarChanged(thumbUrl);
smallVideo.avatarChanged(avatarUrl);
else
console.warn(
"Missed avatar update - no small video yet for " + resourceJid);
LargeVideo.updateAvatar(resourceJid, thumbUrl);
LargeVideo.updateAvatar(resourceJid, avatarUrl);
};
my.createEtherpadIframe = function(src, onloadHandler)