Skip to content

Commit 87b642a

Browse files
committed
chore(ui): move to ui-ready pattern
1 parent b665d9f commit 87b642a

46 files changed

Lines changed: 256 additions & 215 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎src/backend/backup-manager.ts‎

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,12 @@ class BackupManager {
3939

4040
SettingsManager.on("settings:setting-updated:BackupLocation", () => {
4141
this.updateBackupFolderPath();
42+
this.triggerUiRefresh();
4243
});
4344

44-
frontendCommunicator.onAsync("backups:get-backup-folder-path", async () => {
45-
return this._backupFolderPath;
46-
});
45+
frontendCommunicator.onAsync("backups:ui-service-ready",
46+
async () => this.triggerUiRefresh()
47+
);
4748

4849
frontendCommunicator.onAsync("backups:get-backup-list", async () => {
4950
return await this.getBackupList();
@@ -392,6 +393,13 @@ class BackupManager {
392393
frontendCommunicator.send("backups:move-backup-folder-completed", success);
393394
return success;
394395
}
396+
397+
triggerUiRefresh(): void {
398+
this.logger.debug("Triggering UI refresh");
399+
frontendCommunicator.send("backups:backup-data-updated", {
400+
backupFolderPath: this._backupFolderPath
401+
});
402+
}
395403
}
396404

397405
const backupManager = new BackupManager();

‎src/backend/common/icon-manager.ts‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { FontAwesomeIcon } from "../../types";
22

33
import frontendCommunicator from "./frontend-communicator";
4+
import { LoggerCache } from "../logger-cache";
45

56
enum FontAwesomeStyle {
67
Brands = "brands",
@@ -41,10 +42,13 @@ type FontAwesomeIconDefinitions = {
4142
const ICON_DEFINITION_URL = "https://cdn.jsdelivr.net/gh/FortAwesome/Font-Awesome@master/metadata/icons.json";
4243

4344
class IconManager {
45+
private logger = LoggerCache.getLogger("Icons");
4446
icons: FontAwesomeIcon[] = [];
4547

4648
constructor() {
47-
frontendCommunicator.onAsync("all-font-awesome-icons", async () => this.icons);
49+
frontendCommunicator.onAsync("icons:ui-service-ready",
50+
async () => this.triggerUiRefresh()
51+
);
4852
}
4953

5054
async loadFontAwesomeIcons(): Promise<void> {
@@ -80,6 +84,11 @@ class IconManager {
8084
}
8185
});
8286
}
87+
88+
triggerUiRefresh(): void {
89+
this.logger.debug("Triggering UI refresh");
90+
frontendCommunicator.send("icons:icons-updated", this.icons ?? []);
91+
}
8392
}
8493

8594
const iconManager = new IconManager();

‎src/backend/currency/currency-access.ts‎

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ class CurrencyAccess extends EventEmitter {
2121
constructor() {
2222
super();
2323

24+
frontendCommunicator.onAsync("currencies:ui-service-ready",
25+
async () => this.triggerUiRefresh()
26+
);
27+
2428
frontendCommunicator.onAsync("currencies:get-currencies", async () => {
2529
return this.getCurrencies();
2630
});
@@ -77,7 +81,7 @@ class CurrencyAccess extends EventEmitter {
7781
}
7882

7983
this._currencyCache = cache;
80-
frontendCommunicator.send("currencies:currencies-updated", this.getCurrencies());
84+
this.triggerUiRefresh();
8185
}
8286

8387
getCurrencies(): CurrencyCache {
@@ -187,7 +191,12 @@ class CurrencyAccess extends EventEmitter {
187191

188192
private saveAllCurrencies(): void {
189193
this.getCurrencyDb().push("/", this._currencyCache);
190-
frontendCommunicator.send("currencies:currencies-updated", this.getCurrencies());
194+
this.triggerUiRefresh();
195+
}
196+
197+
triggerUiRefresh(): void {
198+
this.logger.debug("Triggering UI refresh");
199+
frontendCommunicator.send("currencies:currencies-updated", Object.values(this.getCurrencies()));
191200
}
192201
}
193202

‎src/backend/effects/builtin/custom-variable.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ const effect: EffectType<{
7474
}
7575

7676
$scope.openVariableInspector = function () {
77-
backendCommunicator.fireEvent("show-variable-inspector");
77+
backendCommunicator.send("show-variable-inspector");
7878
};
7979

8080
$scope.editors = [

‎src/backend/events/events-access.ts‎

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ class EventsAccess {
2727
private _sortTags: SortTag[] = [];
2828

2929
constructor() {
30+
frontendCommunicator.onAsync("events:ui-service-ready",
31+
async () => this.triggerUiRefresh()
32+
);
33+
3034
frontendCommunicator.onAsync("events:get-all-event-data", async () => {
3135
this.logger.debug("got 'get all event data' request");
3236
return {
@@ -313,7 +317,7 @@ class EventsAccess {
313317
this._mainEvents[index] = event;
314318

315319
this.saveMainEvents(this._mainEvents);
316-
frontendCommunicator.send("main-events-update");
320+
this.triggerUiRefresh();
317321
} else {
318322
for (const [groupId, group] of Object.entries(this._groups)) {
319323
event = this._groups[groupId].events.find(e => e.id === eventId);
@@ -346,8 +350,15 @@ class EventsAccess {
346350
frontendCommunicator.send("event-group-update", group);
347351
}
348352

349-
triggerUiRefresh() {
350-
frontendCommunicator.send("main-events-update");
353+
triggerUiRefresh(): void {
354+
this.logger.debug("Triggering UI update");
355+
frontendCommunicator.send("events:main-events-update", {
356+
mainEvents: Array.isArray(this._mainEvents)
357+
? this._mainEvents
358+
: Object.values(this._mainEvents),
359+
groups: Object.values(this._groups),
360+
sortTags: this._sortTags
361+
});
351362
}
352363
}
353364

‎src/backend/overlay-widgets/overlay-widget-config-manager.ts‎

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,30 @@ type ExtraEvents = {
1313
class OverlayWidgetConfigManager extends JsonDbManager<OverlayWidgetConfig, ExtraEvents> {
1414
constructor() {
1515
super("Overlay Widget", "/overlay-widgets", "Overlay Widgets");
16+
17+
frontendCommunicator.onAsync("overlay-widgets:ui-service-ready",
18+
async () => this.triggerUiRefresh()
19+
);
20+
21+
frontendCommunicator.onAsync("overlay-widgets:save-config", async (config: OverlayWidgetConfig) => {
22+
const existing = this.getItem(config.id);
23+
if (existing) {
24+
config.state = existing.state;
25+
}
26+
return this.saveWidgetConfig(config);
27+
});
28+
29+
frontendCommunicator.onAsync("overlay-widgets:save-new-config",
30+
async (config: OverlayWidgetConfig) => this.saveWidgetConfig(config, true)
31+
);
32+
33+
frontendCommunicator.on("overlay-widgets:save-all-configs",
34+
(configs: OverlayWidgetConfig[]) => this.saveAllItems(configs)
35+
);
36+
37+
frontendCommunicator.on("overlay-widgets:delete-config", (configId: string) =>
38+
this.removeWidgetConfigById(configId)
39+
);
1640
}
1741

1842
saveWidgetConfig(config: OverlayWidgetConfig, isNew = false): OverlayWidgetConfig {
@@ -67,34 +91,11 @@ class OverlayWidgetConfigManager extends JsonDbManager<OverlayWidgetConfig, Extr
6791
}
6892

6993
triggerUiRefresh(): void {
70-
frontendCommunicator.send("overlay-widgets:configs-updated");
94+
this.logger.debug("Triggering widget config UI refresh");
95+
frontendCommunicator.send("overlay-widgets:configs-updated", this.getAllItems());
7196
}
7297
}
7398

7499
const manager = new OverlayWidgetConfigManager();
75100

76-
frontendCommunicator.onAsync("overlay-widgets:get-all-configs",
77-
async () => manager.getAllItems()
78-
);
79-
80-
frontendCommunicator.onAsync("overlay-widgets:save-config", async (config: OverlayWidgetConfig) => {
81-
const existing = manager.getItem(config.id);
82-
if (existing) {
83-
config.state = existing.state;
84-
}
85-
return manager.saveWidgetConfig(config);
86-
});
87-
88-
frontendCommunicator.onAsync("overlay-widgets:save-new-config",
89-
async (config: OverlayWidgetConfig) => manager.saveWidgetConfig(config, true)
90-
);
91-
92-
frontendCommunicator.on("overlay-widgets:save-all-configs",
93-
(configs: OverlayWidgetConfig[]) => manager.saveAllItems(configs)
94-
);
95-
96-
frontendCommunicator.on("overlay-widgets:delete-config", (configId: string) =>
97-
manager.removeWidgetConfigById(configId)
98-
);
99-
100101
export = manager;

‎src/backend/overlay-widgets/overlay-widgets-manager.ts‎

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ class OverlayWidgetsManager extends TypedEmitter<Events> {
2929

3030
constructor() {
3131
super();
32+
33+
frontendCommunicator.onAsync("overlay-widgets:ui-service-ready",
34+
async () => this.triggerUiRefresh()
35+
);
3236
}
3337

3438
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -169,28 +173,30 @@ class OverlayWidgetsManager extends TypedEmitter<Events> {
169173
}))
170174
};
171175
}
176+
177+
private formatStateDisplaysForFrontend(): Record<string, string> {
178+
const configs = overlayWidgetConfigManager.getAllItems();
179+
return configs.reduce((acc, config) => {
180+
const type = this.getOverlayWidgetType(config.type);
181+
if (type?.stateDisplay) {
182+
const display = type.stateDisplay(config);
183+
if (display) {
184+
acc[config.id] = display;
185+
}
186+
}
187+
return acc;
188+
}, {} as Record<string, string>);
189+
}
190+
191+
triggerUiRefresh(): void {
192+
logger.debug("Triggering types/state displays UI refresh");
193+
frontendCommunicator.send("overlay-widget:types-updated", this.getOverlayWidgetTypesForFrontend());
194+
frontendCommunicator.send("overlay-widget:state-displays-updated", this.formatStateDisplaysForFrontend());
195+
}
172196
}
173197

174198
const manager = new OverlayWidgetsManager();
175199

176-
frontendCommunicator.onAsync("overlay-widgets:get-all-types",
177-
async () => manager.getOverlayWidgetTypesForFrontend()
178-
);
179-
180-
frontendCommunicator.onAsync("overlay-widgets:get-state-displays", async () => {
181-
const configs = overlayWidgetConfigManager.getAllItems();
182-
return configs.reduce((acc, config) => {
183-
const type = manager.getOverlayWidgetType(config.type);
184-
if (type?.stateDisplay) {
185-
const display = type.stateDisplay(config);
186-
if (display) {
187-
acc[config.id] = display;
188-
}
189-
}
190-
return acc;
191-
}, {} as Record<string, string>);
192-
});
193-
194200
overlayWidgetConfigManager.on("widget-config-active-changed", (config) => {
195201
if (config.active === false) {
196202
void manager.sendWidgetEventToOverlay("remove", config);

‎src/backend/power-ups/power-ups-manager.ts‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ class PowerUpsManager {
2121
powerUps: Record<string, SavedPowerUp> = {};
2222

2323
constructor() {
24+
frontendCommunicator.onAsync("power-ups:ui-service-ready",
25+
async () => this.triggerUiRefresh()
26+
);
27+
2428
frontendCommunicator.onAsync("power-ups:get-all", async () => Object.values(this.powerUps));
2529

2630
frontendCommunicator.onAsync("power-ups:save", async (powerUp: SavedPowerUp) => this.savePowerUp(powerUp));
@@ -114,7 +118,7 @@ class PowerUpsManager {
114118

115119
this.logger.debug(`Loaded power-ups.`);
116120

117-
frontendCommunicator.send("power-ups:updated-all", Object.values(this.powerUps));
121+
this.triggerUiRefresh();
118122
} catch (err) {
119123
this.logger.warn(`There was an error reading power-ups file.`, err);
120124
}
@@ -231,6 +235,11 @@ class PowerUpsManager {
231235

232236
return this.triggerPowerUpEffects(metadata, savedPowerUp.effects, manual);
233237
}
238+
239+
triggerUiRefresh(): void {
240+
this.logger.debug("Triggering UI refresh");
241+
frontendCommunicator.send("power-ups:updated-all", Object.values(this.powerUps));
242+
}
234243
}
235244

236245
const powerUpsManager = new PowerUpsManager();

‎src/backend/sort-tags/sort-tag-manager.ts‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ class SortTagManager {
1414
sortTags: SortTagCache = { };
1515

1616
constructor() {
17+
frontendCommunicator.onAsync("sort-tags:ui-service-ready",
18+
async () => this.triggerUiRefresh()
19+
);
20+
1721
frontendCommunicator.onAsync("sort-tags:get-sort-tags", async () => {
1822
return this.sortTags ?? { };
1923
});
@@ -103,12 +107,17 @@ class SortTagManager {
103107
try {
104108
this.getSortTagsDb().push("/", this.sortTags);
105109

106-
frontendCommunicator.send("sort-tags:updated-sort-tags", this.sortTags);
110+
this.triggerUiRefresh();
107111
this.logger.debug("Saved tags");
108112
} catch (error) {
109113
this.logger.warn("There was an error saving tags", error);
110114
}
111115
}
116+
117+
triggerUiRefresh(): void {
118+
this.logger.debug("Triggering UI refresh");
119+
frontendCommunicator.send("sort-tags:updated-sort-tags", this.sortTags ?? { });
120+
}
112121
}
113122

114123
const sortTagManager = new SortTagManager();

‎src/backend/variables/macro-manager.ts‎

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,22 @@ import frontendCommunicator from "../common/frontend-communicator";
55
class MacroManager extends JsonDbManager<VariableMacro> {
66
constructor() {
77
super("Variable Macro", "/variable-macros", "Variable Macros");
8+
9+
frontendCommunicator.onAsync("macros:ui-service-ready",
10+
async () => this.triggerUiRefresh()
11+
);
12+
13+
frontendCommunicator.onAsync("macros:get-all",
14+
async () => this.getAllItems());
15+
16+
frontendCommunicator.onAsync("macros:save",
17+
async (macros: VariableMacro) => this.saveItem(macros));
18+
19+
frontendCommunicator.onAsync("macros:save-all",
20+
async (macros: VariableMacro[]) => this.saveAllItems(macros));
21+
22+
frontendCommunicator.on("macros:delete",
23+
(macroId: string) => this.deleteItem(macroId));
824
}
925

1026
getMacroByName(name: string) {
@@ -16,22 +32,11 @@ class MacroManager extends JsonDbManager<VariableMacro> {
1632
}
1733

1834
triggerUiRefresh(): void {
35+
this.logger.debug("Triggering UI refresh");
1936
frontendCommunicator.send("macros:updated");
2037
}
2138
}
2239

2340
const manager = new MacroManager();
2441

25-
frontendCommunicator.onAsync("macros:get-all",
26-
async () => manager.getAllItems());
27-
28-
frontendCommunicator.onAsync("macros:save",
29-
async (macros: VariableMacro) => manager.saveItem(macros));
30-
31-
frontendCommunicator.onAsync("macros:save-all",
32-
async (macros: VariableMacro[]) => manager.saveAllItems(macros));
33-
34-
frontendCommunicator.on("macros:delete",
35-
(macroId: string) => manager.deleteItem(macroId));
36-
3742
export = manager;

0 commit comments

Comments
 (0)