From 3e3315d223162fbf4072d9ac33a8be7dc5bd34f1 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:35:47 -0700 Subject: [PATCH] migrate updateAllSavedata to api --- src/constants.ts | 3 +++ src/plugins/api/api.ts | 21 ++++++++++++++++++++- src/plugins/api/models/UpdateAllSavedata.ts | 8 ++++++++ src/system/game-data.ts | 3 +-- 4 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 src/plugins/api/models/UpdateAllSavedata.ts diff --git a/src/constants.ts b/src/constants.ts index 5779813dffc..63f00b9f33f 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -6,3 +6,6 @@ export const USE_SEASONAL_SPLASH_MESSAGES: boolean = false; /** Name of the session ID cookie */ export const SESSION_ID_COOKIE_NAME: string = "pokerogue_sessionId"; + +/** Max value for an integer attribute in {@linkcode SystemSaveData} */ +export const MAX_INT_ATTR_VALUE = 0x80000000; diff --git a/src/plugins/api/api.ts b/src/plugins/api/api.ts index 796f7d1b830..1f4e8a4bd40 100644 --- a/src/plugins/api/api.ts +++ b/src/plugins/api/api.ts @@ -1,12 +1,13 @@ import type { PokerogueApiClearSessionData } from "#app/@types/pokerogue-api"; import { loggedInUser } from "#app/account"; -import { SESSION_ID_COOKIE_NAME } from "#app/constants"; +import { MAX_INT_ATTR_VALUE, SESSION_ID_COOKIE_NAME } from "#app/constants"; import type { SessionSaveData } from "#app/system/game-data"; import type { RankingEntry, ScoreboardCategory } from "#app/ui/daily-run-scoreboard"; import { getCookie, removeCookie, setCookie } from "#app/utils"; import type { AccountInfoResponse } from "./models/AccountInfo"; import type { AccountLoginRequest, AccountLoginResponse } from "./models/AccountLogin"; import type { TitleStatsResponse } from "./models/TitleStats"; +import type { UpdateAllSavedataRequest } from "./models/UpdateAllSavedata"; import type { VerifySavedataResponse } from "./models/VerifySavedata"; type DataType = "json" | "form-urlencoded"; @@ -289,6 +290,24 @@ export class Api { return null; } + /** + * Update all savedata + * @param bodyData The {@linkcode UpdateAllSavedataRequest | request data} to send + * @returns an error message if something went wrong + */ + public async updateAllSavedata(bodyData: UpdateAllSavedataRequest) { + try { + const rawBodyData = JSON.stringify(bodyData, (_k: any, v: any) => + typeof v === "bigint" ? (v <= MAX_INT_ATTR_VALUE ? Number(v) : v.toString()) : v + ); + const response = await this.doPost("/savedata/updateall", rawBodyData); + return await response.text(); + } catch (err) { + console.warn("Could not update all savedata!", err); + return null; + } + } + /** * Get the daily rankings for a {@linkcode ScoreboardCategory}. * @param category The {@linkcode ScoreboardCategory} to fetch. diff --git a/src/plugins/api/models/UpdateAllSavedata.ts b/src/plugins/api/models/UpdateAllSavedata.ts new file mode 100644 index 00000000000..a313cd708c7 --- /dev/null +++ b/src/plugins/api/models/UpdateAllSavedata.ts @@ -0,0 +1,8 @@ +import type { SessionSaveData, SystemSaveData } from "#app/system/game-data"; + +export interface UpdateAllSavedataRequest { + system: SystemSaveData; + session: SessionSaveData; + sessionSlotId: number; + clientSessionId: string; +} diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 4123b9af1c3..e29a509d0c7 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -1309,8 +1309,7 @@ export class GameData { console.debug("Session data saved"); if (!bypassLogin && sync) { - Utils.apiPost("savedata/updateall", JSON.stringify(request, (k: any, v: any) => typeof v === "bigint" ? v <= maxIntAttrValue ? Number(v) : v.toString() : v), undefined, true) - .then(response => response.text()) + api.updateAllSavedata(request) .then(error => { if (sync) { this.scene.lastSavePlayTime = 0;