-
Notifications
You must be signed in to change notification settings - Fork 529
/
ContributionsConnector.java
140 lines (116 loc) · 4.31 KB
/
ContributionsConnector.java
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
131
132
133
134
135
136
137
138
139
140
package io.github.thebusybiscuit.slimefun4.core.services.github;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import javax.annotation.Nonnull;
import javax.annotation.ParametersAreNonnullByDefault;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import io.github.thebusybiscuit.slimefun4.implementation.Slimefun;
class ContributionsConnector extends GitHubConnector {
/**
* GitHub Bots that do not count as Contributors
* (includes "invalid-email-address" because it is an invalid contributor)
*/
private final List<String> ignoredAccounts = new ArrayList<>();
/**
* Matches a GitHub name with a Minecraft name.
*/
private final Map<String, String> aliases = new HashMap<>();
private final String prefix;
private final String role;
private final int page;
private boolean finished = false;
@ParametersAreNonnullByDefault
ContributionsConnector(GitHubService github, String prefix, int page, String repository, ContributorRole role) {
super(github, repository);
this.prefix = prefix;
this.page = page;
this.role = role.getId();
loadConfiguration();
}
/**
* This method loads all aliases.
* This mapping matches a GitHub username with a Minecraft username.
* These people are... "special cases".
*/
private void loadConfiguration() {
// Bots and invalid accounts we want to ignore.
ignoredAccounts.add("invalid-email-address");
ignoredAccounts.add("renovate");
ignoredAccounts.add("renovate-bot");
ignoredAccounts.add("renovate[bot]");
ignoredAccounts.add("TheBusyBot");
ignoredAccounts.add("ImgBotApp");
ignoredAccounts.add("imgbot");
ignoredAccounts.add("imgbot[bot]");
ignoredAccounts.add("github-actions[bot]");
ignoredAccounts.add("gitlocalize-app");
ignoredAccounts.add("gitlocalize-app[bot]");
ignoredAccounts.add("mt-gitlocalize");
// Known Minecraft aliases.
aliases.put("WalshyDev", "HumanRightsAct");
aliases.put("J3fftw1", "_lagpc_");
aliases.put("ajan-12", "ajan_12");
aliases.put("mrcoffee1026", "mr_coffee1026");
aliases.put("Cyber-MC", "CyberPatriot");
aliases.put("BurningBrimstone", "Bluedevil74");
aliases.put("bverhoeven", "soczol");
aliases.put("ramdon-person", "ramdon_person");
aliases.put("NCBPFluffyBear", "FluffyBear_");
aliases.put("martinbrom", "OneTime97");
aliases.put("LilBC", "Lil_BC");
aliases.put("st392", "BlueWood");
}
/**
* This returns whether this {@link ContributionsConnector} has finished its task.
*
* @return Whether it is finished
*/
public boolean hasFinished() {
return finished;
}
@Override
public void onSuccess(@Nonnull JsonElement response) {
finished = true;
if (response.isJsonArray()) {
computeContributors(response.getAsJsonArray());
} else {
Slimefun.logger().log(Level.WARNING, "Received an unusual answer from GitHub, possibly a timeout? ({0})", response);
}
}
@Override
public void onFailure() {
finished = true;
}
@Override
public String getFileName() {
return prefix + "_contributors";
}
@Override
public String getEndpoint() {
return "/contributors";
}
@Override
public Map<String, Object> getParameters() {
Map<String, Object> parameters = new HashMap<>();
parameters.put("per_page", 100);
parameters.put("page", page);
return parameters;
}
private void computeContributors(@Nonnull JsonArray array) {
for (JsonElement element : array) {
JsonObject object = element.getAsJsonObject();
String name = object.get("login").getAsString();
int commits = object.get("contributions").getAsInt();
String profile = object.get("html_url").getAsString();
if (!ignoredAccounts.contains(name)) {
String username = aliases.getOrDefault(name, name);
github.addContributor(username, profile, role, commits);
}
}
}
}