Skip to content

Commit

Permalink
AboutApp: Request donator list from web
Browse files Browse the repository at this point in the history
  • Loading branch information
WeAthFoLD committed Mar 11, 2019
1 parent fecbc27 commit 0b35424
Show file tree
Hide file tree
Showing 8 changed files with 120 additions and 4 deletions.
5 changes: 5 additions & 0 deletions src/main/java/cn/academy/client/auxgui/TerminalUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import cn.academy.Resources;
import cn.academy.client.sound.ACSounds;
import cn.academy.terminal.DonatorList;
import cn.academy.util.RegACKeyHandler;
import cn.academy.terminal.App;
import cn.academy.terminal.AppEnvironment;
Expand Down Expand Up @@ -105,6 +106,10 @@ public void onEnable() {

KeyManager.dynamic.addKeyHandler("terminal_click",KeyManager.MOUSE_LEFT, clickHandler = new LeftClickHandler());
ControlOverrider.override(OVERRIDE_GROUP, KeyManager.MOUSE_LEFT);

// There is a chance that About App will be opened
// to improve user experience we request that ahead of time
DonatorList.Instance.tryRequest();
}

@Override
Expand Down
80 changes: 80 additions & 0 deletions src/main/java/cn/academy/terminal/DonatorList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package cn.academy.terminal;

import cn.academy.AcademyCraft;
import cn.lambdalib2.util.Debug;
import com.google.gson.Gson;
import net.minecraft.client.Minecraft;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.Event;
import org.apache.commons.io.IOUtils;

import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Collections;
import java.util.List;

public enum DonatorList {
Instance;

List<String> _donators = Collections.emptyList();

final Gson _gson = new Gson();

volatile boolean _requesting = false;

public boolean isLoaded() {
return _donators.size() > 0;
}

private class Attributes {
public List<String> list;
}

private class ResponseData {
public boolean success;
public Attributes attributes;
}

public List<String> getList() {
return _donators;
}

public void tryRequest() {
if (!isLoaded() && !_requesting) {
_requesting = true;
new Thread(() -> {
try {
String url = "http://144.34.208.247:8080/lambda/donation/sponsor";
URLConnection con = new URL(url).openConnection();
con.setDoInput(true);

InputStream is = con.getInputStream();
String text = IOUtils.toString(is, "UTF-8");
ResponseData rsp = _gson.fromJson(text, ResponseData.class);

if (rsp.success) {
Debug.assertNotNull(rsp.attributes);
Debug.assertNotNull(rsp.attributes.list);

// Acknowledge the result in CLIENT thread
Minecraft.getMinecraft().addScheduledTask(() -> {
_donators = rsp.attributes.list;
MinecraftForge.EVENT_BUS.post(new DonatorListRefreshEvent());
});
} else {
Debug.error("AcademyCraft failed when requesting donator list.");
if (AcademyCraft.DEBUG_MODE)
Debug.error("Rsp str: " + text);
}
} catch (Exception e) {
if (AcademyCraft.DEBUG_MODE)
Debug.error(e);
}
_requesting = false;
}).run();
}
}

public static class DonatorListRefreshEvent extends Event {}
}
20 changes: 19 additions & 1 deletion src/main/java/cn/academy/terminal/app/AppAbout.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import cn.academy.Resources;
import cn.academy.terminal.App;
import cn.academy.terminal.AppEnvironment;
import cn.academy.terminal.DonatorList;
import cn.academy.terminal.DonatorList.DonatorListRefreshEvent;
import cn.academy.terminal.RegApp;
import cn.lambdalib2.cgui.CGuiScreen;
import cn.lambdalib2.cgui.Widget;
Expand All @@ -26,6 +28,8 @@
import com.typesafe.config.ConfigValue;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.lwjgl.input.Mouse;
Expand Down Expand Up @@ -229,6 +233,14 @@ enum TabType { Credits, Donate }
});

onTabTypeChanged(TabType.Credits);
DonatorList.Instance.tryRequest();
MinecraftForge.EVENT_BUS.register(this);
}

@Override
public void onGuiClosed() {
super.onGuiClosed();
MinecraftForge.EVENT_BUS.unregister(this);
}

private void initTexts() {
Expand Down Expand Up @@ -276,7 +288,8 @@ private void initTexts() {

y += 1.5f * FontSize;

List<String> donators = root.getStringList("donators");
List<String> donators = DonatorList.Instance.isLoaded() ?
DonatorList.Instance.getList() : root.getStringList("donators");
Collections.shuffle(donators); // Randomize the list
for (int i = 0; i < donators.size(); ++i) {
float tw = 150, margin = 30;
Expand Down Expand Up @@ -348,6 +361,11 @@ public void handleMouseInput() throws IOException {
}
}

@SubscribeEvent
public void onDonatorListRefresh(DonatorListRefreshEvent e) {
initTexts();
}

private void onTabTypeChanged(TabType type) {
_tabType = type;
setTabButtonEnable(_btnCredits, _tabType == TabType.Credits);
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/assets/academy/config/about.conf
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ credits {
"berry64",
]
]
// ! This list is not being maintained anymore and only serves as a fallback.
donators: [
// patreon
"anon katon",
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/assets/academy/lang/en_us.lang
Original file line number Diff line number Diff line change
Expand Up @@ -497,4 +497,4 @@ ac.converter.desc_template=Converts %s to %s
ac.skill_tree.dev_developing=Developing...

# About App
ac.about.donators_info=In no particular order\nThe list will be updated once a version
ac.about.donators_info=In no particular order
2 changes: 1 addition & 1 deletion src/main/resources/assets/academy/lang/zh_cn.lang
Original file line number Diff line number Diff line change
Expand Up @@ -496,4 +496,4 @@ ac.headsOrTails.1=硬币反面朝上
ac.converter.desc_template=转换%s到%s

# About App
ac.about.donators_info=排名不分先后\n名单每个版本更新一次
ac.about.donators_info=排名不分先后
2 changes: 1 addition & 1 deletion src/main/resources/assets/academy/lang/zh_tw.lang
Original file line number Diff line number Diff line change
Expand Up @@ -496,4 +496,4 @@ ac.converter.desc_template=轉換%s到%s

# About App
ac.app.about.name=關於
ac.about.donators_info=排名不分先後\n名單每個版本更新壹次
ac.about.donators_info=排名不分先後
12 changes: 12 additions & 0 deletions src/test/java/DonatorListTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import java.net.URL

// Tests donation interface.
fun main(args: Array<String>) {
val url = "http://144.34.208.247:8080/lambda/donation/sponsor"
val con = URL(url).openConnection()
con.doInput = true

val wr = con.getInputStream()
val text = wr.bufferedReader().readText()
println(text)
}

0 comments on commit 0b35424

Please sign in to comment.