From 797322eb90a1f5d21166fd691479b050ad7b754b Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 21 Nov 2011 09:24:05 -0500 Subject: [PATCH] Tighter Gravatar integration. New window/tab on most activity links. --- src/com/gitblit/utils/ActivityUtils.java | 66 +++++++++++++++++++++++++++++++++ 1 files changed, 66 insertions(+), 0 deletions(-) diff --git a/src/com/gitblit/utils/ActivityUtils.java b/src/com/gitblit/utils/ActivityUtils.java index 8c8a7ec..204fe3c 100644 --- a/src/com/gitblit/utils/ActivityUtils.java +++ b/src/com/gitblit/utils/ActivityUtils.java @@ -15,7 +15,11 @@ */ package com.gitblit.utils; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.lang.reflect.Type; import java.text.DateFormat; +import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -33,8 +37,10 @@ import com.gitblit.GitBlit; import com.gitblit.models.Activity; import com.gitblit.models.Activity.RepositoryCommit; +import com.gitblit.models.GravatarProfile; import com.gitblit.models.RefModel; import com.gitblit.models.RepositoryModel; +import com.google.gson.reflect.TypeToken; /** * Utility class for building activity information from repositories. @@ -127,4 +133,64 @@ } return recentActivity; } + + /** + * Returns the Gravatar profile, if available, for the specified email + * address. + * + * @param emailaddress + * @return a Gravatar Profile + * @throws IOException + */ + public static GravatarProfile getGravatarProfileFromAddress(String emailaddress) + throws IOException { + return getGravatarProfile(StringUtils.getMD5(emailaddress.toLowerCase())); + } + + /** + * Creates a Gravatar thumbnail url from the specified email address. + * + * @param email + * address to query Gravatar + * @param width + * size of thumbnail. if width <= 0, the defalt of 60 is used. + * @return + */ + public static String getGravatarThumbnailUrl(String email, int width) { + if (width <= 0) { + width = 60; + } + String emailHash = StringUtils.getMD5(email); + String url = MessageFormat.format( + "http://www.gravatar.com/avatar/{0}?s={1,number,0}&d=identicon", emailHash, width); + return url; + } + + /** + * Returns the Gravatar profile, if available, for the specified hashcode. + * address. + * + * @param hash + * the hash of the email address + * @return a Gravatar Profile + * @throws IOException + */ + public static GravatarProfile getGravatarProfile(String hash) throws IOException { + String url = MessageFormat.format("http://www.gravatar.com/{0}.json", hash); + // Gravatar has a complex json structure + Type profileType = new TypeToken<Map<String, List<GravatarProfile>>>() { + }.getType(); + Map<String, List<GravatarProfile>> profiles = null; + try { + profiles = JsonUtils.retrieveJson(url, profileType); + } catch (FileNotFoundException e) { + } + if (profiles == null || profiles.size() == 0) { + return null; + } + // due to the complex json structure we need to pull out the profile + // from a list 2 levels deep + GravatarProfile profile = profiles.values().iterator().next().get(0); + return profile; + } } -- Gitblit v1.9.1