package com.gh4a.utils; import android.content.Context; import android.graphics.Color; import android.net.Uri; import android.text.TextUtils; import com.gh4a.R; import org.eclipse.egit.github.core.CommitUser; import org.eclipse.egit.github.core.Label; import org.eclipse.egit.github.core.RepositoryCommit; import org.eclipse.egit.github.core.User; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class ApiHelpers { public interface IssueState { String OPEN = "open"; String CLOSED = "closed"; String MERGED = "merged"; String UNMERGED = "unmerged"; } public interface UserType { String USER = "User"; String ORG = "Organization"; } public interface MilestoneState { String OPEN = "open"; String CLOSED = "closed"; } //RepositoryCommit public static String getAuthorName(Context context, RepositoryCommit commit) { if (commit.getAuthor() != null) { return commit.getAuthor().getLogin(); } if (commit.getCommit().getAuthor() != null) { return commit.getCommit().getAuthor().getName(); } return context.getString(R.string.unknown); } public static String getAuthorLogin(RepositoryCommit commit) { if (commit.getAuthor() != null) { return commit.getAuthor().getLogin(); } return null; } public static String getCommitterName(Context context, RepositoryCommit commit) { if (commit.getCommitter() != null) { return commit.getCommitter().getLogin(); } if (commit.getCommit().getCommitter() != null) { return commit.getCommit().getCommitter().getName(); } return context.getString(R.string.unknown); } public static boolean authorEqualsCommitter(RepositoryCommit commit) { if (commit.getCommitter() != null && commit.getAuthor() != null) { return TextUtils.equals(commit.getCommitter().getLogin(), commit.getAuthor().getLogin()); } CommitUser author = commit.getCommit().getAuthor(); CommitUser committer = commit.getCommit().getCommitter(); if (author.getEmail() != null && committer.getEmail() != null) { return TextUtils.equals(author.getEmail(), committer.getEmail()); } return TextUtils.equals(author.getName(), committer.getName()); } public static String getUserLogin(Context context, User user) { if (user != null && user.getLogin() != null) { return user.getLogin(); } return context.getString(R.string.unknown); } public static int colorForLabel(Label label) { return Color.parseColor("#" + label.getColor()); } public static boolean userEquals(User lhs, User rhs) { if (lhs == null || rhs == null) { return false; } return loginEquals(lhs.getLogin(), rhs.getLogin()); } public static boolean loginEquals(User user, String login) { if (user == null) { return false; } return loginEquals(user.getLogin(), login); } public static boolean loginEquals(String user, String login) { return user != null && user.equalsIgnoreCase(login); } public static Uri normalizeUri(Uri uri) { if (uri == null || uri.getAuthority() == null) { return uri; } // Only normalize API links if (!uri.getPath().contains("/api/v3/") && !uri.getAuthority().contains("api.")) { return uri; } String path = uri.getPath() .replace("/api/v3/", "/") .replace("repos/", "") .replace("commits/", "commit/") .replace("pulls/", "pull/"); String authority = uri.getAuthority() .replace("api.", ""); return uri.buildUpon() .path(path) .authority(authority) .build(); } public static String md5(String input) { try { MessageDigest digest = MessageDigest.getInstance("MD5"); digest.update(input.getBytes()); byte[] messageDigest = digest.digest(); StringBuilder builder = new StringBuilder(); for (byte b : messageDigest) { String hexString = Integer.toHexString(0xFF & b); while (hexString.length() < 2) { hexString = "0" + hexString; } builder.append(hexString); } return builder.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } }