add mobile updater, update gdx natives

This commit is contained in:
Anthony Calosa
2024-10-25 11:41:06 +08:00
parent a0c865b4b3
commit 8c085bbd33
20 changed files with 1628 additions and 174 deletions

View File

@@ -0,0 +1,113 @@
package forge.app;
import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class AtomReader {
private static final String ns = null;
public List<Entry> parse(InputStream in) throws Exception {
try {
XmlPullParser parser = Xml.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in, "UTF-8");
parser.nextTag();
return readFeed(parser);
} finally {
in.close();
}
}
private List<Entry> readFeed(XmlPullParser parser) throws Exception {
List<Entry> entries = new ArrayList<>();
parser.require(XmlPullParser.START_TAG, ns, "feed");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
// Starts by looking for the entry tag.
if (name.equals("entry")) {
entries.add(readEntry(parser));
} else {
skip(parser);
}
}
return entries;
}
private void skip(XmlPullParser parser) throws Exception {
if (parser.getEventType() != XmlPullParser.START_TAG) {
throw new IllegalStateException();
}
int depth = 1;
while (depth != 0) {
switch (parser.next()) {
case XmlPullParser.END_TAG:
depth--;
break;
case XmlPullParser.START_TAG:
depth++;
break;
}
}
}
public static class Entry {
public final String title;
public final String updated;
private Entry(String title, String updated) {
this.title = title;
this.updated = updated;
}
}
private Entry readEntry(XmlPullParser parser) throws Exception {
parser.require(XmlPullParser.START_TAG, ns, "entry");
String title = null;
String updated = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("title")) {
title = readTitle(parser);
} else if (name.equals("updated")) {
updated = readUpdated(parser);
} else {
skip(parser);
}
}
return new Entry(title, updated);
}
private String readTitle(XmlPullParser parser) throws Exception {
parser.require(XmlPullParser.START_TAG, ns, "title");
String title = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "title");
return title;
}
private String readUpdated(XmlPullParser parser) throws Exception {
parser.require(XmlPullParser.START_TAG, ns, "updated");
String updated = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "updated");
return updated;
}
private String readText(XmlPullParser parser) throws Exception {
String result = "";
if (parser.next() == XmlPullParser.TEXT) {
result = parser.getText();
parser.nextTag();
}
return result;
}
}

View File

@@ -0,0 +1,49 @@
package forge.app;
import forge.util.TextUtil;
import org.apache.commons.text.StringEscapeUtils;
import java.io.InputStream;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class GitLogs {
public String getLatest(Date buildDateOriginal, Date maxDate) {
String message = "";
try {
URL url = new URL("https://github.com/Card-Forge/forge/commits/master.atom");
InputStream inputStream = url.openStream();
List<AtomReader.Entry> entries = new AtomReader().parse(inputStream);
StringBuilder logs = new StringBuilder();
SimpleDateFormat simpleDate = TextUtil.getSimpleDate();
SimpleDateFormat atomDate = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss");
int c = 0;
for (AtomReader.Entry entry : entries) {
if (entry.title == null)
continue;
String title = TextUtil.stripNonValidXMLCharacters(entry.title);
if (title.contains("Merge"))
continue;
if (entry.updated == null)
continue;
Date feedDate = atomDate.parse(entry.updated);
if (buildDateOriginal != null && feedDate.before(buildDateOriginal))
continue;
if (maxDate != null && feedDate.after(maxDate))
continue;
logs.append(simpleDate.format(feedDate)).append(" | ").append(StringEscapeUtils.unescapeXml(title).replace("\n", "").replace(" ", "")).append("\n\n");
if (c >= 15)
break;
c++;
}
if (logs.length() > 0)
message += ("\n\nLatest Changes:\n\n" + logs);
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return message;
}
}

View File

@@ -71,6 +71,7 @@ import java.io.InputStreamReader;
import java.io.OutputStream;
import java.text.Normalizer;
import java.util.ArrayList;
import java.util.Date;
public class Main extends ForgeAndroidApplication {
private AndroidAdapter Gadapter;
@@ -633,6 +634,11 @@ public class Main extends ForgeAndroidApplication {
return versionString;
}
@Override
public String getLatestChanges(Date buildDateOriginal, Date maxDate) {
return new GitLogs().getLatest(buildDateOriginal, maxDate);
}
@Override
public boolean openFile(String filename) {
try {