(feat) you can now select your alternate avatar

pull/101/head^2
Ludovic Marcotte 2015-11-27 16:04:12 -05:00
parent 39455a283a
commit 403d6fa54f
9 changed files with 71 additions and 20 deletions

View File

@ -58,6 +58,7 @@
SOGoMailDomain = "localhost";
SOGoSelectedAddressBook = "collected";
SOGoRefreshViewCheck = "manually";
SOGoAlternateAvatar = "none";
SOGoMailMessageForwarding = "inline";
SOGoMailReplyPlacement = "below";
SOGoMailSignaturePlacement = "below";

View File

@ -120,6 +120,9 @@ extern NSString *SOGoWeekStartFirstFullWeek;
- (void) setRefreshViewCheck: (NSString *) newValue;
- (NSString *) refreshViewCheck;
- (void) setAlternateAvatar: (NSString *) newValue;
- (NSString *) alternateAvatar;
- (void) setMailComposeMessageType: (NSString *) newValue;
- (NSString *) mailComposeMessageType;

View File

@ -498,6 +498,16 @@ NSString *SOGoWeekStartFirstFullWeek = @"FirstFullWeek";
return [self stringForKey: @"SOGoRefreshViewCheck"];
}
- (void) setAlternateAvatar: (NSString *) newValue
{
[self setObject: newValue forKey: @"SOGoAlternateAvatar"];
}
- (NSString *) alternateAvatar
{
return [self stringForKey: @"SOGoAlternateAvatar"];
}
- (void) setMailComposeMessageType: (NSString *) newValue
{
[self setObject: newValue forKey: @"SOGoMailComposeMessageType"];

View File

@ -344,3 +344,10 @@
"Unhandled error response" = "Unhandled error response";
"Password change is not supported." = "Password change is not supported.";
"Unhandled HTTP error code: %{0}" = "Unhandled HTTP error code: %{0}";
/* Avatars */
"none" = "None";
"identicon" = "Ident Icon";
"monsterid" = "Monster";
"wavatar" = "Wavatar";
"retro" = "Retro";

View File

@ -96,6 +96,9 @@ static SoProduct *preferencesProduct = nil;
if (![[defaults source] objectForKey: @"SOGoRefreshViewCheck"])
[[defaults source] setObject: [defaults refreshViewCheck] forKey: @"SOGoRefreshViewCheck"];
if (![[defaults source] objectForKey: @"SOGoAlternateAvatar"])
[[defaults source] setObject: [defaults alternateAvatar] forKey: @"SOGoAlternateAvatar"];
//
// Default Calendar preferences
//

View File

@ -1380,6 +1380,18 @@ static NSArray *reminderValues = nil;
return [self labelForKey: item];
}
- (NSArray *) alternateAvatar
{
// See: https://en.gravatar.com/site/implement/images/
return [NSArray arrayWithObjects: @"none", @"identicon", @"monsterid", @"wavatar", @"retro", nil];
}
- (NSString *) itemAlternateAvatarText
{
return [self labelForKey: item];
}
// - (NSString *) userDefaultModule
// {
// NSString *userDefaultModule;

View File

@ -185,6 +185,17 @@
</var:foreach>
</md-select>
</md-input-container>
<md-input-container>
<label><var:string label:value="Alternate Avatar"/></label>
<md-select ng-model="app.preferences.defaults.SOGoAlternateAvatar">
<var:foreach list="alternateAvatar" item="item">
<md-option var:value="item">
<var:string value="itemAlternateAvatarText"/>
</md-option>
</var:foreach>
</md-select>
</md-input-container>
</div>
</md-content>
</md-tab>

View File

@ -8,10 +8,11 @@
* @memberof SOGo.Common
* @param {string} email
* @param {number} [size] - the size of the image
* @param {string} alternate avatar to use
* @ngInject
*/
function Gravatar() {
return function(email, size) {
return function(email, size, alternate_avatar) {
var x, y, hash, s = size;
if (!email) {
return '';
@ -27,10 +28,10 @@
}
hash = email.md5();
return 'https://www.gravatar.com/avatar/' + hash + '?s=' + s + '&d=404';
//return 'https://www.gravatar.com/avatar/' + hash + '?s=' + s + '&d=retro';
// return 'https://www.gravatar.com/avatar/' + hash + '?s=' + s + '&d=identicon';
// return 'https://www.gravatar.com/avatar/' + hash + '?s=' + s + '&d=wavatar';
if (alternate_avatar == "none")
alternate_avatar = "404";
return 'https://www.gravatar.com/avatar/' + hash + '?s=' + s + '&d=' + alternate_avatar;
};
}

View File

@ -48,25 +48,28 @@
/**
* @ngInject
*/
sgAvatarImageController.$inject = ['$scope', '$element', 'Gravatar'];
function sgAvatarImageController($scope, $element, Gravatar) {
sgAvatarImageController.$inject = ['$scope', '$element', 'Preferences', 'Gravatar'];
function sgAvatarImageController($scope, $element, Preferences, Gravatar) {
var vm = this;
$scope.$watch('vm.email', function(email) {
var img = $element.find('img')[0];
if (!email && !vm.genericAvatar) {
// If no email is specified, insert a generic avatar
vm.insertGenericAvatar(img);
}
else if (email && !vm.url) {
if (vm.genericAvatar) {
// Remove generic avatar and restore visibility of image
vm.genericAvatar.parentNode.removeChild(vm.genericAvatar);
delete vm.genericAvatar;
img.classList.remove('ng-hide');
Preferences.ready().then(function() {
var img = $element.find('img')[0];
if (!email && !vm.genericAvatar) {
// If no email is specified, insert a generic avatar
vm.insertGenericAvatar(img);
}
vm.url = Gravatar(email, vm.size);
}
else if (email && !vm.url) {
if (vm.genericAvatar) {
// Remove generic avatar and restore visibility of image
vm.genericAvatar.parentNode.removeChild(vm.genericAvatar);
delete vm.genericAvatar;
img.classList.remove('ng-hide');
}
vm.url = Gravatar(email, vm.size, Preferences.defaults.SOGoAlternateAvatar);
}
});
});
// If sg-src is defined, watch the expression for the URL of a local image