-
Notifications
You must be signed in to change notification settings - Fork 497
/
Version.java
155 lines (120 loc) · 4.65 KB
/
Version.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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package buildcraft.core;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import net.minecraftforge.common.Property;
import buildcraft.BuildCraftCore;
import buildcraft.core.proxy.CoreProxy;
import cpw.mods.fml.common.FMLLog;
public class Version {
public enum EnumUpdateState {
CURRENT, OUTDATED, CONNECTION_ERROR
}
public static final String VERSION = "@VERSION@";
public static final String BUILD_NUMBER = "@BUILD_NUMBER@";
private static final String REMOTE_VERSION_FILE = "http://bit.ly/buildcraftver";
private static final String REMOTE_CHANGELOG_ROOT = "https://dl.dropbox.com/u/44760587/buildcraft/changelog/";
public static EnumUpdateState currentVersion = EnumUpdateState.CURRENT;
public static final int FORGE_VERSION_MAJOR = 4;
public static final int FORGE_VERSION_MINOR = 0;
public static final int FORGE_VERSION_PATCH = 0;
private static String recommendedVersion;
private static String[] cachedChangelog;
public static String getVersion() {
return VERSION + " (:" + BUILD_NUMBER + ")";
}
public static boolean isOutdated() {
return currentVersion == EnumUpdateState.OUTDATED;
}
public static boolean needsUpdateNoticeAndMarkAsSeen() {
if (!isOutdated())
return false;
Property property = BuildCraftCore.mainConfiguration.get("vars", "version.seen", VERSION);
property.comment = "indicates the last version the user has been informed about and will suppress further notices on it.";
String seenVersion = property.value;
if (recommendedVersion == null || recommendedVersion.equals(seenVersion))
return false;
property.value = recommendedVersion;
BuildCraftCore.mainConfiguration.save();
return true;
}
public static String getRecommendedVersion() {
return recommendedVersion;
}
public static void versionCheck() {
try {
String location = REMOTE_VERSION_FILE;
HttpURLConnection conn = null;
while (location != null && !location.isEmpty()) {
URL url = new URL(location);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)");
conn.connect();
location = conn.getHeaderField("Location");
}
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
String mcVersion = CoreProxy.proxy.getMinecraftVersion();
while ((line = reader.readLine()) != null) {
if (line.startsWith(mcVersion)) {
if (line.contains(DefaultProps.MOD)) {
String[] tokens = line.split(":");
recommendedVersion = tokens[2];
if (line.endsWith(VERSION)) {
FMLLog.finer(DefaultProps.MOD + ": Using the latest version [" + getVersion() + "] for Minecraft " + mcVersion);
currentVersion = EnumUpdateState.CURRENT;
return;
}
}
}
}
FMLLog.warning(DefaultProps.MOD + ": Using outdated version [" + VERSION + " (build:" + BUILD_NUMBER + ")] for Minecraft " + mcVersion
+ ". Consider updating.");
currentVersion = EnumUpdateState.OUTDATED;
} catch (Exception e) {
e.printStackTrace();
FMLLog.warning(DefaultProps.MOD + ": Unable to read from remote version authority.");
currentVersion = EnumUpdateState.CONNECTION_ERROR;
}
}
public static String[] getChangelog() {
if (cachedChangelog == null) {
cachedChangelog = grabChangelog(recommendedVersion);
}
return cachedChangelog;
}
public static String[] grabChangelog(String version) {
try {
String location = REMOTE_CHANGELOG_ROOT + version;
HttpURLConnection conn = null;
while (location != null && !location.isEmpty()) {
URL url = new URL(location);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)");
conn.connect();
location = conn.getHeaderField("Location");
}
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
ArrayList<String> changelog = new ArrayList<String>();
while ((line = reader.readLine()) != null) {
if (line.startsWith("#")) {
continue;
}
if (line.isEmpty()) {
continue;
}
changelog.add(line);
}
return changelog.toArray(new String[0]);
} catch (Exception ex) {
ex.printStackTrace();
FMLLog.warning(DefaultProps.MOD + ": Unable to read changelog from remote site.");
}
return new String[] { String.format("Unable to retrieve changelog for %s %s", DefaultProps.MOD, version) };
}
}