From 7a2fe3d35c61d7ca276ed689bb497f274047f3d4 Mon Sep 17 00:00:00 2001 From: Samuel Elliott Date: Sun, 17 Aug 2025 21:41:11 +0100 Subject: [PATCH] Use show error alerts preference for SplatNet 3 presence monitoring --- src/app/main/monitor.ts | 4 +++- src/discord/monitor/splatoon3.ts | 2 ++ src/discord/types.ts | 1 + src/util/loop.ts | 16 +++++++++------- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/app/main/monitor.ts b/src/app/main/monitor.ts index a81a683..5b47712 100644 --- a/src/app/main/monitor.ts +++ b/src/app/main/monitor.ts @@ -67,9 +67,11 @@ export class PresenceMonitorManager { error: err, buttons: ['OK', 'Retry', 'Stop'], defaultId: 0, - app: this.app, }); + const show_error_alerts: boolean = await this.app.store.storage.getItem('ShowErrorAlertsPreference') ?? false; + if (!show_error_alerts) return ErrorResult.DEFER; + if (response === 1) { return ErrorResult.RETRY; } diff --git a/src/discord/monitor/splatoon3.ts b/src/discord/monitor/splatoon3.ts index e80d3bd..83d1261 100644 --- a/src/discord/monitor/splatoon3.ts +++ b/src/discord/monitor/splatoon3.ts @@ -91,6 +91,7 @@ export default class SplatNet3Monitor extends EmbeddedLoop { debug('Error authenticating to SplatNet 3', err); const result = await this.discord_presence.handleError(err as Error); if (result === ErrorResult.RETRY) return this.init(); + if (result === ErrorResult.DEFER) return this.errors++, LoopResult.DEFER_NEXT_UPDATE; if (result === ErrorResult.STOP) return LoopResult.STOP; } @@ -168,6 +169,7 @@ export default class SplatNet3Monitor extends EmbeddedLoop { async handleError(err: Error) { const result = await this.discord_presence.handleError(err as Error); if (result === ErrorResult.RETRY) return LoopResult.OK_SKIP_INTERVAL; + if (result === ErrorResult.DEFER) return LoopResult.DEFER_NEXT_UPDATE; this.friend = null; this.discord_presence.refreshPresence(); diff --git a/src/discord/types.ts b/src/discord/types.ts index 787460b..86f8a1d 100644 --- a/src/discord/types.ts +++ b/src/discord/types.ts @@ -148,5 +148,6 @@ export interface ExternalMonitor extends EmbeddedLoop { export enum ErrorResult { STOP, RETRY, + DEFER, IGNORE, } diff --git a/src/util/loop.ts b/src/util/loop.ts index dd0a110..0d4cdfd 100644 --- a/src/util/loop.ts +++ b/src/util/loop.ts @@ -52,6 +52,7 @@ export default abstract class Loop { } else { await new Promise(rs => setTimeout(this.timeout_resolve = rs, this.next_update_interval * 1000)); } + return LoopResult.DEFER_NEXT_UPDATE; } if (result === LoopResult.STOP) { return LoopResult.STOP; @@ -109,25 +110,26 @@ export abstract class EmbeddedLoop extends Loop { private async _run() { this._running++; const i = this._running; + let init = true; try { - const result = await this.loop(true); - if (result === LoopResult.STOP) return; - while (i === this._running) { - const result = await this.loop(); + const result = await this.loop(init); + + if (init && result !== LoopResult.DEFER_NEXT_UPDATE) { + init = false; + } if (result === LoopResult.STOP) { - await this.onStop?.(); + if (!init) await this.onStop?.(); return; } } - if (this._running === 0 && !this.onStop) { + if (this._running === 0 && !init && !this.onStop) { // Run one more time after the loop ends const result = await this.loopRun(); } - } finally { this._running = 0; }