Compare commits

...

2 Commits

Author SHA1 Message Date
Rosalina 72c3b7c9d3
switch to polling every monitor interval 2024-01-13 02:10:38 -05:00
Rosalina 81a228cfb8
event stream implementation
(committing this right now because event streams seem broke)
2024-01-13 01:59:04 -05:00
3 changed files with 31 additions and 3 deletions

View File

@ -4,7 +4,7 @@ import { flags } from "./deps.ts";
const parseArgs = (args: string[]) => {
const parsed = flags.parse(args, {
string: ["profilePath", "exporter", "skipMode", "listMethod"],
string: ["profilePath", "exporter", "skipMode", "listMethod", "nxapiPresenceUrl"],
boolean: ["help", "noProgress", "monitor", "withSummary"],
alias: {
"help": "h",
@ -15,6 +15,7 @@ const parseArgs = (args: string[]) => {
"skipMode": ["s", "skip-mode"],
"withSummary": "with-summary",
"listMethod": "list-method",
"nxapiPresenceUrl": ["nxapi-presence-url", "nxapi-presence"]
},
});
return parsed;
@ -39,7 +40,8 @@ Options:
--skip-mode <mode>, -s Skip mode (default: null)
("vs", "coop")
--with-summary Include summary in the output
--help Show this help message and exit`,
--help Show this help message and exit
--nxapi-presence-url Extends monitoring mode to use Nintendo Switch presence from nxapi`,
);
Deno.exit(0);
}

View File

@ -9,6 +9,7 @@ import { FileExporter } from "./exporters/file.ts";
import { delay, showError } from "./utils.ts";
import { GameFetcher } from "./GameFetcher.ts";
import { DEFAULT_ENV, Env } from "./env.ts";
import { SPLATOON3_TITLE_ID } from "./constant.ts";
export type Opts = {
profilePath: string;
@ -21,6 +22,7 @@ export type Opts = {
cache?: Cache;
stateBackend?: StateBackend;
env: Env;
nxapiPresenceUrl?: string;
};
export const DEFAULT_OPTS: Opts = {
@ -162,6 +164,7 @@ function progress({ total, currentUrl, done }: StepProgress): Progress {
export class App {
profile: Profile;
env: Env;
splatoon3PreviouslyActive = false;
constructor(public opts: Opts) {
const stateBackend = opts.stateBackend ??
@ -395,6 +398,25 @@ export class App {
}
}
}
async monitorWithNxapi() {
this.env.logger.debug("Monitoring with nxapi presence");
await this.exportOnce();
while (true) {
await this.countDown(this.profile.state.monitorInterval);
const nxapiResponse = await fetch(this.opts.nxapiPresenceUrl!);
const nxapiData = await nxapiResponse.json();
const isSplatoon3Active = nxapiData.title?.id === SPLATOON3_TITLE_ID;
if (isSplatoon3Active || this.splatoon3PreviouslyActive) {
this.env.logger.log("Splatoon 3 is active, exporting data");
await this.exportOnce();
}
if (isSplatoon3Active !== this.splatoon3PreviouslyActive) {
this.env.logger.debug("Splatoon 3 status has changed from", this.splatoon3PreviouslyActive, "to", isSplatoon3Active)
}
this.splatoon3PreviouslyActive = isSplatoon3Active
}
}
async monitor() {
while (true) {
await this.exportOnce();
@ -432,7 +454,9 @@ export class App {
});
}
if (this.opts.monitor) {
if (this.opts.nxapiPresenceUrl) {
await this.monitorWithNxapi();
} else if (this.opts.monitor) {
await this.monitor();
} else {
await this.exportOnce();

View File

@ -116,3 +116,5 @@ export const SPLATNET3_STATINK_MAP: {
2: "high",
},
};
export const SPLATOON3_TITLE_ID = "0100c2500fc20000";