Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.mylyn.commons.identity.core/src/org/eclipse/mylyn/internal/commons/identity/core/gravatar/GravatarConnector.java')
-rw-r--r--org.eclipse.mylyn.commons.identity.core/src/org/eclipse/mylyn/internal/commons/identity/core/gravatar/GravatarConnector.java111
1 files changed, 111 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.commons.identity.core/src/org/eclipse/mylyn/internal/commons/identity/core/gravatar/GravatarConnector.java b/org.eclipse.mylyn.commons.identity.core/src/org/eclipse/mylyn/internal/commons/identity/core/gravatar/GravatarConnector.java
new file mode 100644
index 00000000..ad551d0c
--- /dev/null
+++ b/org.eclipse.mylyn.commons.identity.core/src/org/eclipse/mylyn/internal/commons/identity/core/gravatar/GravatarConnector.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.commons.identity.core.gravatar;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.mylyn.commons.identity.core.Account;
+import org.eclipse.mylyn.commons.identity.core.IIdentity;
+import org.eclipse.mylyn.commons.identity.core.spi.IdentityConnector;
+import org.eclipse.mylyn.commons.identity.core.spi.Profile;
+import org.eclipse.mylyn.commons.identity.core.spi.ProfileImage;
+
+/**
+ * @author Steffen Pingel
+ */
+public class GravatarConnector extends IdentityConnector {
+
+ public static final String KIND = "org.eclipse.mylyn.commons.identity.gravatar"; //$NON-NLS-1$
+
+ private final GravatarStore store;
+
+ private final int DEFAULT_SIZE = 80;
+
+ private final Map<String, Long> noImageHashByTimeStamp = new ConcurrentHashMap<String, Long>();
+
+ public GravatarConnector() {
+ this.store = new GravatarStore();
+ }
+
+ @Override
+ public ProfileImage getImage(IIdentity identity, int preferredWidth, int preferredHeight, IProgressMonitor monitor)
+ throws CoreException {
+ String id = getHash(identity);
+ if (id == null) {
+ return null;
+ }
+
+ // avoid retrieving image again i
+ if (noImageHashByTimeStamp.containsKey(id)) {
+ return null;
+ }
+
+ // store id for future retrieval
+ identity.addAccount(Account.id(id).kind(KIND));
+
+ int size = getSize(preferredWidth);
+ Gravatar gravatar;
+ try {
+ gravatar = store.loadGravatarByHash(id, size, null);
+ } catch (IOException e) {
+ throw new CoreException(new Status(IStatus.ERROR, KIND, e.getMessage(), e));
+ }
+
+ if (gravatar != null) {
+ return new ProfileImage(gravatar.getBytes(), size, size, "jpg"); //$NON-NLS-1$
+ } else {
+ noImageHashByTimeStamp.put(id, Long.valueOf(System.currentTimeMillis()));
+ }
+ return null;
+ }
+
+ private int getSize(int preferredSize) {
+ if (preferredSize < 1 && preferredSize > 512) {
+ return DEFAULT_SIZE;
+ }
+ return preferredSize;
+ }
+
+ @Override
+ public boolean supportsImageSize(int preferredWidth, int preferredHeight) {
+ return (preferredWidth >= 1 && preferredWidth <= 512 && preferredHeight >= 1 && preferredHeight <= 512 && preferredWidth == preferredHeight);
+ }
+
+ @Override
+ public void updateProfile(Profile profile, IProgressMonitor monitor) throws CoreException {
+ // TODO retrieve Gravatar profile information
+ }
+
+ private String getHash(IIdentity identity) {
+ Account account = identity.getAccountByKind(KIND);
+ if (account != null) {
+ if (GravatarUtils.isValidHash(account.getId())) {
+ return account.getId();
+ }
+ }
+
+ for (String alias : identity.getAliases()) {
+ if (GravatarUtils.isValidEmail(alias)) {
+ return GravatarUtils.getHash(alias);
+ }
+ }
+
+ return null;
+ }
+
+}

Back to the top