-
Notifications
You must be signed in to change notification settings - Fork 426
Expand file tree
/
Copy pathGitHubHelper.java
More file actions
130 lines (101 loc) · 4.95 KB
/
GitHubHelper.java
File metadata and controls
130 lines (101 loc) · 4.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.thirtydegreesray.openhub.util;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.webkit.MimeTypeMap;
import java.util.regex.Pattern;
/**
* Created on 2017/8/19 17:24:29
* Copied from Copyright (C) 2017 Kosh.
* Modified by Copyright (C) 2017 ThirtyDegreesRay.
*/
public class GitHubHelper {
private static final String[] IMAGE_EXTENSIONS = {".png", ".jpg", ".jpeg", ".gif", ".svg"};
private static final String[] MARKDOWN_EXTENSIONS = {
".md", ".mkdn", ".mdwn", ".mdown", ".markdown", ".mkd", ".mkdown", ".ron", ".rst", "adoc"
};
private static final String[] ARCHIVE_EXTENSIONS = {
".zip", ".zipx", ".7z", "s7z", "zz", ".rar", ".tar.gz", ".tgz", ".tar.Z", ".tar.bz2", ".tbz2", ".tar.lzma",
".tlz", ".apk", ".jar", ".dmg", "ipa", "war", "cab", "dar", "aar"
};
private static final String GITHUB_BASE_URL_PATTERN_STR = "(https://)?(http://)?(www.)?github.com";
public static final Pattern REPO_FULL_NAME_PATTERN =
Pattern.compile("([a-z]|[A-Z]|\\d|-)+/([a-z]|[A-Z]|\\d|-|\\.|_)+");
private static final Pattern USER_PATTERN = Pattern.compile(GITHUB_BASE_URL_PATTERN_STR
+ "/([a-z]|[A-Z]|\\d|-)+(/)?");
private static final Pattern REPO_PATTERN = Pattern.compile(GITHUB_BASE_URL_PATTERN_STR
+ "/([a-z]|[A-Z]|\\d|-)+/([a-z]|[A-Z]|\\d|-|\\.|_)+(/)?");
private static final Pattern ISSUE_PATTERN = Pattern.compile(GITHUB_BASE_URL_PATTERN_STR
+ "/([a-z]|[A-Z]|\\d|-)+/([a-z]|[A-Z]|\\d|-|\\.|_)+/issues/(\\d)*(/)?");
private static final Pattern RELEASES_PATTERN = Pattern.compile(GITHUB_BASE_URL_PATTERN_STR
+ "/([a-z]|[A-Z]|\\d|-)+/([a-z]|[A-Z]|\\d|-|\\.|_)+/releases(/latest)?(/)?");
private static final Pattern RELEASE_TAG_PATTERN = Pattern.compile(GITHUB_BASE_URL_PATTERN_STR
+ "/([a-z]|[A-Z]|\\d|-)+/([a-z]|[A-Z]|\\d|-|\\.|_)+/releases/tag/([^/])*(/)?");
private static final Pattern COMMIT_PATTERN = Pattern.compile(GITHUB_BASE_URL_PATTERN_STR
+ "/([a-z]|[A-Z]|\\d|-)+/([a-z]|[A-Z]|\\d|-|\\.|_)+/commit(s)?/([a-z]|\\d)*(/)?");
private static final Pattern GITHUB_URL_PATTERN = Pattern.compile(GITHUB_BASE_URL_PATTERN_STR + "(.)*");
public static boolean isImage(@Nullable String name) {
return checkFileType(name, IMAGE_EXTENSIONS);
}
public static boolean isMarkdown(@Nullable String name) {
if (StringUtils.isBlank(name)) return false;
name = name.toLowerCase();
for (String value : MARKDOWN_EXTENSIONS) {
String extension = MimeTypeMap.getFileExtensionFromUrl(name);
if ((extension != null && value.replace(".", "").equals(extension)) ||
name.equalsIgnoreCase("README") || name.endsWith(value))
return true;
}
return false;
}
public static boolean isArchive(@Nullable String name) {
return checkFileType(name, ARCHIVE_EXTENSIONS);
}
private static boolean checkFileType(@Nullable String name, String[] extensions) {
if (StringUtils.isBlank(name)) return false;
name = name.toLowerCase();
for (String value : extensions) {
String extension = MimeTypeMap.getFileExtensionFromUrl(name);
if ((extension != null && value.replace(".", "").equals(extension))
|| name.endsWith(value))
return true;
}
return false;
}
public static String getExtension(@Nullable String name) {
if (StringUtils.isBlank(name)) return null;
return MimeTypeMap.getFileExtensionFromUrl(name);
}
public static boolean isUserUrl(@NonNull String url){
return USER_PATTERN.matcher(url).matches();
}
public static boolean isRepoUrl(@NonNull String url){
return REPO_PATTERN.matcher(url).matches();
}
public static boolean isIssueUrl(@NonNull String url){
return ISSUE_PATTERN.matcher(url).matches();
}
public static boolean isGitHubUrl(@NonNull String url){
return GITHUB_URL_PATTERN.matcher(url).matches();
}
public static boolean isReleasesUrl(@NonNull String url){
return RELEASES_PATTERN.matcher(url).matches();
}
public static boolean isReleaseTagUrl(@NonNull String url){
return RELEASE_TAG_PATTERN.matcher(url).matches();
}
public static boolean isCommitUrl(@NonNull String url){
return COMMIT_PATTERN.matcher(url).matches();
}
@Nullable
public static String getUserFromUrl(@NonNull String url){
if(!isUserUrl(url)) return null;
if(url.endsWith("/")) url = url.substring(0, url.length() - 1);
return url.substring(url.lastIndexOf("/") + 1);
}
@Nullable
public static String getRepoFullNameFromUrl(@NonNull String url){
if(!isRepoUrl(url)) return null;
if(url.endsWith("/")) url = url.substring(0, url.length() - 1);
return url.substring(url.indexOf("com/") + 4);
}
}