Compare commits

...

5 Commits

Author SHA1 Message Date
Rosalina 7d6b71d752
Merge remote-tracking branch 'upstream/main' into splashcat-exporter-v2 2024-01-14 03:18:07 -05:00
Rosalina 055b1405df run deno fmt 2024-01-14 15:10:33 +08:00
Rosalina b8e53fc719 simplify cli arguments to just nxapi-presence and add to readme 2024-01-14 15:10:33 +08:00
Rosalina cbe7a5424a switch to polling every monitor interval 2024-01-14 15:10:33 +08:00
Rosalina 21b02fb44d event stream implementation
(committing this right now because event streams seem broke)
2024-01-14 15:10:33 +08:00
4 changed files with 43 additions and 3 deletions

View File

@ -30,6 +30,7 @@ Options:
("vs", "coop") ("vs", "coop")
--with-summary Include summary in the output --with-summary Include summary in the output
--help Show this help message and exit --help Show this help message and exit
--nxapi-presence Extends monitoring mode to use Nintendo Switch presence from nxapi
``` ```
3. If it's your first time running this, follow the instructions to login to 3. If it's your first time running this, follow the instructions to login to

12
s3si.ts
View File

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

View File

@ -10,6 +10,7 @@ import { delay, showError } from "./utils.ts";
import { GameFetcher } from "./GameFetcher.ts"; import { GameFetcher } from "./GameFetcher.ts";
import { DEFAULT_ENV, Env } from "./env.ts"; import { DEFAULT_ENV, Env } from "./env.ts";
import { SplashcatExporter } from "./exporters/splashcat.ts"; import { SplashcatExporter } from "./exporters/splashcat.ts";
import { SPLATOON3_TITLE_ID } from "./constant.ts";
export type Opts = { export type Opts = {
profilePath: string; profilePath: string;
@ -22,6 +23,7 @@ export type Opts = {
cache?: Cache; cache?: Cache;
stateBackend?: StateBackend; stateBackend?: StateBackend;
env: Env; env: Env;
nxapiPresenceUrl?: string;
}; };
export const DEFAULT_OPTS: Opts = { export const DEFAULT_OPTS: Opts = {
@ -163,6 +165,7 @@ function progress({ total, currentUrl, done }: StepProgress): Progress {
export class App { export class App {
profile: Profile; profile: Profile;
env: Env; env: Env;
splatoon3PreviouslyActive = false;
constructor(public opts: Opts) { constructor(public opts: Opts) {
const stateBackend = opts.stateBackend ?? const stateBackend = opts.stateBackend ??
@ -419,6 +422,30 @@ 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() { async monitor() {
while (true) { while (true) {
await this.exportOnce(); await this.exportOnce();
@ -456,7 +483,9 @@ export class App {
}); });
} }
if (this.opts.monitor) { if (this.opts.nxapiPresenceUrl) {
await this.monitorWithNxapi();
} else if (this.opts.monitor) {
await this.monitor(); await this.monitor();
} else { } else {
await this.exportOnce(); await this.exportOnce();

View File

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