Skip to content

Commit ef9e461

Browse files
committed
App: Simplify the event bus.
This is MUCH better. Still a little loosey-goosey, but it has better safety :p
1 parent 83a5c3b commit ef9e461

12 files changed

Lines changed: 159 additions & 149 deletions

File tree

app/core/src/main/java/co/casterlabs/caffeinated/app/App.java

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
package co.casterlabs.caffeinated.app;
22

33
import java.time.Instant;
4-
import java.util.ArrayList;
54
import java.util.Arrays;
65
import java.util.Calendar;
76
import java.util.Collections;
87
import java.util.HashMap;
9-
import java.util.LinkedList;
10-
import java.util.List;
118
import java.util.Map;
129
import java.util.concurrent.ThreadLocalRandom;
1310
import java.util.concurrent.TimeUnit;
14-
import java.util.function.Consumer;
1511

1612
import app.saucer.bridge.JavascriptFunction;
1713
import app.saucer.bridge.JavascriptGetter;
@@ -73,10 +69,6 @@ public class App {
7369
@JavascriptValue(allowSet = false, watchForMutate = true)
7470
private static boolean hasUpdate = false;
7571

76-
// Event stuff
77-
private static Map<String, List<Consumer<JsonObject>>> appEventListeners = new HashMap<>();
78-
public static List<RealtimeApiListener> apiListeners = new ArrayList<>();
79-
8072
@SneakyThrows
8173
public static void init(@NonNull BuildInfo buildInfo, boolean isDev, NativeSystem nativeSystem, boolean traySupported) {
8274
App.buildInfo = buildInfo;
@@ -207,30 +199,6 @@ public static void shutdown() {
207199
AppAuth.shutdown();
208200
}
209201

210-
/**
211-
* Word of caution, you're not supposed to be able to unsubscribe to an event.
212-
* You have been warned.
213-
*
214-
* If u throw err, i kil.
215-
*/
216-
@Deprecated
217-
public static void onAppEvent(@NonNull String type, @NonNull Consumer<JsonObject> handler) {
218-
if (!appEventListeners.containsKey(type)) {
219-
appEventListeners.put(type, new LinkedList<>());
220-
}
221-
222-
appEventListeners.get(type).add(handler);
223-
}
224-
225-
@Deprecated
226-
public static void emitAppEvent(@NonNull String type, @NonNull JsonObject data) {
227-
if (appEventListeners.containsKey(type)) {
228-
appEventListeners
229-
.get(type)
230-
.forEach((c) -> c.accept(data));
231-
}
232-
}
233-
234202
/**
235203
* Sends a system notification, if that fails then it'll fallback on a UI-based
236204
* notification instead.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package co.casterlabs.caffeinated.app;
2+
3+
import co.casterlabs.caffeinated.util.EventBus;
4+
import co.casterlabs.koi.api.types.KoiEvent;
5+
import co.casterlabs.rakurai.json.element.JsonObject;
6+
7+
public enum AppEventBus {
8+
/**
9+
* {@link JsonObject}
10+
*/
11+
AUTH_PLATFORMS,
12+
/**
13+
* {@link JsonObject}
14+
*/
15+
AUTH_COMPLETION,
16+
17+
/**
18+
* {@link JsonObject}
19+
*/
20+
KOI_STATICS,
21+
/**
22+
* {@link KoiEvent}
23+
*/
24+
KOI_EVENT,
25+
26+
/**
27+
* {@link JsonObject}
28+
*/
29+
MUSIC_UPDATE,
30+
31+
/**
32+
* {@link JsonObject}
33+
*/
34+
APPEARANCE_UPDATE,
35+
;
36+
37+
public static final EventBus<AppEventBus, Object> bus = new EventBus<>();
38+
39+
}

app/core/src/main/java/co/casterlabs/caffeinated/app/RealtimeApiListener.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

app/core/src/main/java/co/casterlabs/caffeinated/app/auth/AppAuth.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import app.saucer.bridge.JavascriptObject;
1212
import app.saucer.bridge.JavascriptValue;
1313
import co.casterlabs.caffeinated.app.App;
14+
import co.casterlabs.caffeinated.app.AppEventBus;
1415
import co.casterlabs.caffeinated.app.NotificationType;
1516
import co.casterlabs.caffeinated.app.config.AppConfig;
1617
import co.casterlabs.caffeinated.app.koi.KoiImpl;
@@ -147,8 +148,8 @@ public static void updateBridgeData() {
147148
);
148149
}
149150
});
150-
App.emitAppEvent(
151-
"auth:platforms",
151+
AppEventBus.bus.post(
152+
AppEventBus.AUTH_PLATFORMS,
152153
platforms
153154
);
154155

@@ -165,7 +166,6 @@ private static void startAuthInstance(String tokenId) {
165166
authInstances.put(tokenId, new AuthInstance(tokenId));
166167
}
167168

168-
@SuppressWarnings("deprecation")
169169
@JavascriptFunction
170170
public static void requestOAuthSignin(@NonNull String type, @NonNull String platform, boolean shouldNavigateBackwards, @Nullable String tokenId) {
171171
try {
@@ -191,8 +191,8 @@ public static void requestOAuthSignin(@NonNull String type, @NonNull String plat
191191
.get()
192192
.addToken(type, $tokenId_ptr, token);
193193

194-
App.emitAppEvent(
195-
"auth:completion",
194+
AppEventBus.bus.post(
195+
AppEventBus.AUTH_COMPLETION,
196196
new JsonObject()
197197
.put("type", type)
198198
.put("platform", platform)

app/core/src/main/java/co/casterlabs/caffeinated/app/koi/KoiImpl.java

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@
1313
import app.saucer.bridge.JavascriptFunction;
1414
import app.saucer.bridge.JavascriptObject;
1515
import app.saucer.bridge.JavascriptValue;
16-
import co.casterlabs.caffeinated.app.App;
16+
import co.casterlabs.caffeinated.app.AppEventBus;
1717
import co.casterlabs.caffeinated.app.AppWindow;
18-
import co.casterlabs.caffeinated.app.RealtimeApiListener;
1918
import co.casterlabs.caffeinated.app.auth.AppAuth;
2019
import co.casterlabs.caffeinated.app.auth.AuthInstance;
2120
import co.casterlabs.caffeinated.app.chatbot.AppChatbot;
@@ -147,14 +146,10 @@ private void updateBridgeData() {
147146

148147
// Send update to the local api.
149148
AsyncTask.create(() -> {
150-
try {
151-
// Send the events to the widget instances.
152-
for (RealtimeApiListener listener : App.apiListeners.toArray(new RealtimeApiListener[0])) {
153-
listener.onKoiStaticsUpdate(extendedStatics);
154-
}
155-
} catch (Exception e) {
156-
e.printStackTrace();
157-
}
149+
AppEventBus.bus.post(
150+
AppEventBus.KOI_STATICS,
151+
extendedStatics
152+
);
158153
});
159154
}
160155

@@ -287,14 +282,10 @@ public void broadcastEvent(@NonNull KoiEvent e) {
287282

288283
// Notify the local api.
289284
AsyncTask.create(() -> {
290-
try {
291-
// Send the events to the widget instances.
292-
for (RealtimeApiListener listener : App.apiListeners.toArray(new RealtimeApiListener[0])) {
293-
listener.onKoiEvent(e);
294-
}
295-
} catch (Exception ex) {
296-
ex.printStackTrace();
297-
}
285+
AppEventBus.bus.post(
286+
AppEventBus.KOI_EVENT,
287+
e
288+
);
298289
});
299290

300291
boolean hideFromWidgets = AppChatbot.shouldHideFromWidgets(e);

app/core/src/main/java/co/casterlabs/caffeinated/app/music_integration/MusicImpl.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111
import app.saucer.bridge.JavascriptFunction;
1212
import app.saucer.bridge.JavascriptObject;
1313
import app.saucer.bridge.JavascriptValue;
14-
import co.casterlabs.caffeinated.app.App;
15-
import co.casterlabs.caffeinated.app.RealtimeApiListener;
14+
import co.casterlabs.caffeinated.app.AppEventBus;
1615
import co.casterlabs.caffeinated.app.api.AppApi;
1716
import co.casterlabs.caffeinated.app.config.AppConfig;
1817
import co.casterlabs.caffeinated.app.plugins.AppPlugins;
@@ -173,14 +172,7 @@ public void updateBridgeData() {
173172

174173
// Broadcast to the local api.
175174
AsyncTask.create(() -> {
176-
try {
177-
// Send the events to the widget instances.
178-
for (RealtimeApiListener listener : App.apiListeners.toArray(new RealtimeApiListener[0])) {
179-
listener.onMusicUpdate(music);
180-
}
181-
} catch (Exception e) {
182-
e.printStackTrace();
183-
}
175+
AppEventBus.bus.post(AppEventBus.MUSIC_UPDATE, music);
184176
});
185177
}
186178

app/core/src/main/java/co/casterlabs/caffeinated/app/music_integration/PretzelMusicProvider.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.util.List;
66
import java.util.concurrent.TimeUnit;
77

8-
import co.casterlabs.caffeinated.app.App;
8+
import co.casterlabs.caffeinated.app.AppEventBus;
99
import co.casterlabs.caffeinated.app.music_integration.PretzelMusicProvider.PretzelSettings;
1010
import co.casterlabs.caffeinated.pluginsdk.music.MusicTrack;
1111
import co.casterlabs.caffeinated.util.WebUtil;
@@ -31,10 +31,9 @@ public PretzelMusicProvider(@NonNull MusicImpl musicIntegration) {
3131
musicIntegration.getProviders().put(this.getServiceId(), this);
3232
}
3333

34-
@SuppressWarnings("deprecation")
3534
@Override
3635
public void init() {
37-
App.onAppEvent("auth:platforms", (JsonObject data) -> {
36+
AppEventBus.bus.subscribe(AppEventBus.AUTH_PLATFORMS, (JsonObject data) -> {
3837
try {
3938
if (data.containsKey("TWITCH")) {
4039
JsonObject twitchUserData = data

app/core/src/main/java/co/casterlabs/caffeinated/app/music_integration/SpotifyMusicProvider.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.util.List;
66
import java.util.concurrent.TimeUnit;
77

8-
import co.casterlabs.caffeinated.app.App;
8+
import co.casterlabs.caffeinated.app.AppEventBus;
99
import co.casterlabs.caffeinated.app.config.AppConfig;
1010
import co.casterlabs.caffeinated.app.music_integration.SpotifyMusicProvider.SpotifySettings;
1111
import co.casterlabs.caffeinated.pluginsdk.music.MusicTrack;
@@ -34,17 +34,15 @@ public SpotifyMusicProvider(@NonNull MusicImpl musicIntegration) {
3434
musicIntegration.getProviders().put(this.getServiceId(), this);
3535
}
3636

37-
@SuppressWarnings("deprecation")
3837
@Override
3938
public void init() {
40-
App
41-
.onAppEvent("auth:completion", (JsonObject data) -> {
42-
if (data.getString("type").equals("music") &&
43-
data.getString("platform").equals("spotify")) {
44-
this.logger.info("Completing OAuth.");
45-
this.completeOAuth();
46-
}
47-
});
39+
AppEventBus.bus.subscribe(AppEventBus.AUTH_COMPLETION, (JsonObject data) -> {
40+
if (data.getString("type").equals("music") &&
41+
data.getString("platform").equals("spotify")) {
42+
this.logger.info("Completing OAuth.");
43+
this.completeOAuth();
44+
}
45+
});
4846

4947
AsyncTask.create(() -> {
5048
while (true) {

app/core/src/main/java/co/casterlabs/caffeinated/app/ui/AppUI.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
import app.saucer.bridge.JavascriptValue;
1414
import app.saucer.webview.window.SaucerIcon;
1515
import co.casterlabs.caffeinated.app.App;
16+
import co.casterlabs.caffeinated.app.AppEventBus;
1617
import co.casterlabs.caffeinated.app.AppWindow;
1718
import co.casterlabs.caffeinated.app.NotificationType;
18-
import co.casterlabs.caffeinated.app.RealtimeApiListener;
1919
import co.casterlabs.caffeinated.app.auth.AppAuth;
2020
import co.casterlabs.caffeinated.app.config.AppConfig;
2121
import co.casterlabs.caffeinated.app.locale.AppLocale;
@@ -89,14 +89,7 @@ public static void onUpdatePreferences() {
8989

9090
// Broadcast to the local api.
9191
AsyncTask.create(() -> {
92-
try {
93-
// Send the events to the widget instances.
94-
for (RealtimeApiListener listener : App.apiListeners.toArray(new RealtimeApiListener[0])) {
95-
listener.onAppearanceUpdate(preferences);
96-
}
97-
} catch (Exception e) {
98-
e.printStackTrace();
99-
}
92+
AppEventBus.bus.post(AppEventBus.APPEARANCE_UPDATE, preferences);
10093
});
10194

10295
updateIcon();

0 commit comments

Comments
 (0)