Skip to content

Commit 8ccb8c3

Browse files
committed
handle API outages better
this fixes #8
1 parent 3bc7abd commit 8ccb8c3

File tree

5 files changed

+41
-20
lines changed

5 files changed

+41
-20
lines changed

src/main/java/lol/hyper/customlauncher/accounts/windows/MainWindow.java

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import lol.hyper.customlauncher.accounts.Account;
2222
import lol.hyper.customlauncher.accounts.JSONManager;
2323
import lol.hyper.customlauncher.fieldofficetracker.FieldOfficeTracker;
24-
import lol.hyper.customlauncher.generic.ErrorWindow;
2524
import lol.hyper.customlauncher.invasiontracker.InvasionTracker;
2625
import lol.hyper.customlauncher.login.LoginHandler;
2726
import lol.hyper.customlauncher.login.LoginRequest;
@@ -93,16 +92,34 @@ public MainWindow(InvasionTracker invasionTracker, FieldOfficeTracker fieldOffic
9392

9493
// invasions button
9594
JButton invasionsButton = new JButton("Invasions");
96-
invasionsButton.addActionListener(
97-
e -> invasionTracker.showWindow());
95+
invasionsButton.addActionListener(e -> {
96+
if (invasionTracker.isDown) {
97+
int dialogButton = JOptionPane.YES_NO_OPTION;
98+
int dialogResult = JOptionPane.showConfirmDialog (null, "It looks like the invasion API is currently offline. Would you like to try checking it again?","Error",dialogButton);
99+
if (dialogResult == JOptionPane.YES_OPTION){
100+
invasionTracker.invasionTaskTimer.start();
101+
}
102+
} else {
103+
invasionTracker.showWindow();
104+
}
105+
});
98106
invasionsButton.setAlignmentX(Component.CENTER_ALIGNMENT);
99107
invasionsButton.setMaximumSize(new Dimension(300, invasionsButton.getMinimumSize().height));
100108
panel.add(invasionsButton);
101109

102110
// field office button
103111
JButton fieldOfficesButton = new JButton("Field Offices");
104-
fieldOfficesButton.addActionListener(
105-
e -> fieldOfficeTracker.showWindow());
112+
fieldOfficesButton.addActionListener(e -> {
113+
if (fieldOfficeTracker.isDown) {
114+
int dialogButton = JOptionPane.YES_NO_OPTION;
115+
int dialogResult = JOptionPane.showConfirmDialog (null, "It looks like the field office API is currently offline. Would you like to try checking it again?","Error",dialogButton);
116+
if (dialogResult == JOptionPane.YES_OPTION){
117+
fieldOfficeTracker.fieldOfficeTaskTimer.start();
118+
}
119+
} else {
120+
fieldOfficeTracker.showWindow();
121+
}
122+
});
106123
fieldOfficesButton.setAlignmentX(Component.CENTER_ALIGNMENT);
107124
fieldOfficesButton.setMaximumSize(
108125
new Dimension(300, fieldOfficesButton.getMinimumSize().height));
@@ -190,9 +207,6 @@ public static void refreshAccountList() {
190207
private void updateTTRStatus() {
191208
JSONObject ttrStatusJSON = JSONManager.requestJSON("https://www.toontownrewritten.com/api/status");
192209
if (ttrStatusJSON == null) {
193-
ErrorWindow errorWindow = new ErrorWindow("Unable to check TTR's game status!", null);
194-
errorWindow.dispose();
195-
timer.stop();
196210
return;
197211
}
198212
boolean isOpen = ttrStatusJSON.getBoolean("open");

src/main/java/lol/hyper/customlauncher/fieldofficetracker/FieldOfficeTask.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package lol.hyper.customlauncher.fieldofficetracker;
22

33
import lol.hyper.customlauncher.accounts.JSONManager;
4-
import lol.hyper.customlauncher.generic.ErrorWindow;
54
import org.json.JSONObject;
65

76
import java.awt.event.ActionEvent;
@@ -25,10 +24,13 @@ public void actionPerformed(ActionEvent e) {
2524
// each field office is stored under the JSONObject "fieldOffices"
2625
JSONObject fieldOfficeRoot = JSONManager.requestJSON(FIELD_OFFICE_URL);
2726
if (fieldOfficeRoot == null) {
28-
ErrorWindow errorWindow = new ErrorWindow("Unable to read field office API!", null);
29-
errorWindow.dispose();
27+
fieldOfficeTracker.isDown = true;
28+
fieldOfficeTracker.fieldOfficeTaskTimer.stop();
3029
return;
3130
}
31+
32+
fieldOfficeTracker.isDown = false;
33+
3234
JSONObject fieldOfficeJSON = fieldOfficeRoot.getJSONObject("fieldOffices");
3335

3436
fieldOfficeTracker.logger.info(

src/main/java/lol/hyper/customlauncher/fieldofficetracker/FieldOfficeTracker.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public class FieldOfficeTracker {
2323
public JFrame frame;
2424
public static final HashMap<Integer, String> zonesToStreets = new HashMap<>();
2525
int calls = 0;
26+
public boolean isDown = false;
27+
public Timer fieldOfficeTaskTimer;
2628

2729
public FieldOfficeTracker() {
2830
// zone IDs to street names
@@ -126,9 +128,9 @@ private void updateFieldOfficeList() {
126128
/** Read field office API every 5 seconds. */
127129
private void startFieldOfficeRefresh() {
128130
ActionListener actionListener = new FieldOfficeTask(this);
129-
Timer timer = new Timer(0, actionListener);
130-
timer.setDelay(5000);
131-
timer.start();
131+
fieldOfficeTaskTimer = new Timer(0, actionListener);
132+
fieldOfficeTaskTimer.setDelay(5000);
133+
fieldOfficeTaskTimer.start();
132134
}
133135

134136
public void showNotification(FieldOffice fieldOffice, boolean newFieldOffice) {

src/main/java/lol/hyper/customlauncher/invasiontracker/InvasionTask.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package lol.hyper.customlauncher.invasiontracker;
22

33
import lol.hyper.customlauncher.accounts.JSONManager;
4-
import lol.hyper.customlauncher.generic.ErrorWindow;
54
import org.json.JSONObject;
65

76
import java.awt.event.ActionEvent;
@@ -27,11 +26,13 @@ public void actionPerformed(ActionEvent e) {
2726
// that hold all the invasions
2827
JSONObject invasionsJSON = JSONManager.requestJSON(INVASION_URL);
2928
if (invasionsJSON == null) {
30-
ErrorWindow errorWindow = new ErrorWindow("Unable to read invasion API!", null);
31-
errorWindow.dispose();
29+
invasionTracker.isDown = true;
30+
invasionTracker.invasionTaskTimer.stop();
3231
return;
3332
}
3433

34+
invasionTracker.isDown = false;
35+
3536
invasionTracker.logger.info("Reading " + INVASION_URL + " for current invasions...");
3637

3738
// iterate through each of the invasions (separate JSONs)

src/main/java/lol/hyper/customlauncher/invasiontracker/InvasionTracker.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public class InvasionTracker {
4141
public DefaultTableModel invasionTableModel;
4242
public JFrame frame;
4343
int calls = 0;
44+
public boolean isDown = false;
45+
public Timer invasionTaskTimer;
4446

4547
public InvasionTracker() {
4648
startInvasionRefresh();
@@ -138,9 +140,9 @@ private void updateInvasionListGUI() {
138140
/** Read invasion API every 5 seconds. */
139141
public void startInvasionRefresh() {
140142
ActionListener actionListener = new InvasionTask(this);
141-
Timer timer = new Timer(0, actionListener);
142-
timer.setDelay(5000);
143-
timer.start();
143+
invasionTaskTimer = new Timer(0, actionListener);
144+
invasionTaskTimer.setDelay(5000);
145+
invasionTaskTimer.start();
144146
}
145147

146148
/**

0 commit comments

Comments
 (0)