This commit is contained in:
@ -5,6 +5,9 @@ import ScoreSaberPlayerToken from "@/common/model/token/scoresaber/score-saber-p
|
||||
import { ScoreSaberPlayersPageToken } from "@/common/model/token/scoresaber/score-saber-players-page-token";
|
||||
import { ScoreSort } from "../score-sort";
|
||||
import Service from "../service";
|
||||
import ScoreSaberPlayer, {
|
||||
getScoreSaberPlayerFromToken,
|
||||
} from "@/common/model/player/impl/scoresaber-player";
|
||||
|
||||
const API_BASE = "https://scoresaber.com/api";
|
||||
const SEARCH_PLAYERS_ENDPOINT = `${API_BASE}/players?search=:query`;
|
||||
@ -26,12 +29,15 @@ class ScoreSaberService extends Service {
|
||||
* @param useProxy whether to use the proxy or not
|
||||
* @returns the players that match the query, or undefined if no players were found
|
||||
*/
|
||||
async searchPlayers(query: string, useProxy = true): Promise<ScoreSaberPlayerSearchToken | undefined> {
|
||||
async searchPlayers(
|
||||
query: string,
|
||||
useProxy = true,
|
||||
): Promise<ScoreSaberPlayerSearchToken | undefined> {
|
||||
const before = performance.now();
|
||||
this.log(`Searching for players matching "${query}"...`);
|
||||
const results = await this.fetch<ScoreSaberPlayerSearchToken>(
|
||||
useProxy,
|
||||
SEARCH_PLAYERS_ENDPOINT.replace(":query", query)
|
||||
SEARCH_PLAYERS_ENDPOINT.replace(":query", query),
|
||||
);
|
||||
if (results === undefined) {
|
||||
return undefined;
|
||||
@ -40,7 +46,9 @@ class ScoreSaberService extends Service {
|
||||
return undefined;
|
||||
}
|
||||
results.players.sort((a, b) => a.rank - b.rank);
|
||||
this.log(`Found ${results.players.length} players in ${(performance.now() - before).toFixed(0)}ms`);
|
||||
this.log(
|
||||
`Found ${results.players.length} players in ${(performance.now() - before).toFixed(0)}ms`,
|
||||
);
|
||||
return results;
|
||||
}
|
||||
|
||||
@ -51,15 +59,23 @@ class ScoreSaberService extends Service {
|
||||
* @param useProxy whether to use the proxy or not
|
||||
* @returns the player that matches the ID, or undefined
|
||||
*/
|
||||
async lookupPlayer(playerId: string, useProxy = true): Promise<ScoreSaberPlayerToken | undefined> {
|
||||
async lookupPlayer(
|
||||
playerId: string,
|
||||
useProxy = true,
|
||||
): Promise<ScoreSaberPlayer | undefined> {
|
||||
const before = performance.now();
|
||||
this.log(`Looking up player "${playerId}"...`);
|
||||
const response = await this.fetch<ScoreSaberPlayerToken>(useProxy, LOOKUP_PLAYER_ENDPOINT.replace(":id", playerId));
|
||||
if (response === undefined) {
|
||||
const token = await this.fetch<ScoreSaberPlayerToken>(
|
||||
useProxy,
|
||||
LOOKUP_PLAYER_ENDPOINT.replace(":id", playerId),
|
||||
);
|
||||
if (token === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
this.log(`Found player "${playerId}" in ${(performance.now() - before).toFixed(0)}ms`);
|
||||
return response;
|
||||
this.log(
|
||||
`Found player "${playerId}" in ${(performance.now() - before).toFixed(0)}ms`,
|
||||
);
|
||||
return getScoreSaberPlayerFromToken(token);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -69,17 +85,22 @@ class ScoreSaberService extends Service {
|
||||
* @param useProxy whether to use the proxy or not
|
||||
* @returns the players on the page, or undefined
|
||||
*/
|
||||
async lookupPlayers(page: number, useProxy = true): Promise<ScoreSaberPlayersPageToken | undefined> {
|
||||
async lookupPlayers(
|
||||
page: number,
|
||||
useProxy = true,
|
||||
): Promise<ScoreSaberPlayersPageToken | undefined> {
|
||||
const before = performance.now();
|
||||
this.log(`Looking up players on page "${page}"...`);
|
||||
const response = await this.fetch<ScoreSaberPlayersPageToken>(
|
||||
useProxy,
|
||||
LOOKUP_PLAYERS_ENDPOINT.replace(":page", page.toString())
|
||||
LOOKUP_PLAYERS_ENDPOINT.replace(":page", page.toString()),
|
||||
);
|
||||
if (response === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
this.log(`Found ${response.players.length} players in ${(performance.now() - before).toFixed(0)}ms`);
|
||||
this.log(
|
||||
`Found ${response.players.length} players in ${(performance.now() - before).toFixed(0)}ms`,
|
||||
);
|
||||
return response;
|
||||
}
|
||||
|
||||
@ -94,18 +115,25 @@ class ScoreSaberService extends Service {
|
||||
async lookupPlayersByCountry(
|
||||
page: number,
|
||||
country: string,
|
||||
useProxy = true
|
||||
useProxy = true,
|
||||
): Promise<ScoreSaberPlayersPageToken | undefined> {
|
||||
const before = performance.now();
|
||||
this.log(`Looking up players on page "${page}" for country "${country}"...`);
|
||||
this.log(
|
||||
`Looking up players on page "${page}" for country "${country}"...`,
|
||||
);
|
||||
const response = await this.fetch<ScoreSaberPlayersPageToken>(
|
||||
useProxy,
|
||||
LOOKUP_PLAYERS_BY_COUNTRY_ENDPOINT.replace(":page", page.toString()).replace(":country", country)
|
||||
LOOKUP_PLAYERS_BY_COUNTRY_ENDPOINT.replace(
|
||||
":page",
|
||||
page.toString(),
|
||||
).replace(":country", country),
|
||||
);
|
||||
if (response === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
this.log(`Found ${response.players.length} players in ${(performance.now() - before).toFixed(0)}ms`);
|
||||
this.log(
|
||||
`Found ${response.players.length} players in ${(performance.now() - before).toFixed(0)}ms`,
|
||||
);
|
||||
return response;
|
||||
}
|
||||
|
||||
@ -136,22 +164,22 @@ class ScoreSaberService extends Service {
|
||||
this.log(
|
||||
`Looking up scores for player "${playerId}", sort "${sort}", page "${page}"${
|
||||
search ? `, search "${search}"` : ""
|
||||
}...`
|
||||
}...`,
|
||||
);
|
||||
const response = await this.fetch<ScoreSaberPlayerScoresPageToken>(
|
||||
useProxy,
|
||||
LOOKUP_PLAYER_SCORES_ENDPOINT.replace(":id", playerId)
|
||||
.replace(":limit", 8 + "")
|
||||
.replace(":sort", sort)
|
||||
.replace(":page", page + "") + (search ? `&search=${search}` : "")
|
||||
.replace(":page", page + "") + (search ? `&search=${search}` : ""),
|
||||
);
|
||||
if (response === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
this.log(
|
||||
`Found ${response.playerScores.length} scores for player "${playerId}" in ${(performance.now() - before).toFixed(
|
||||
0
|
||||
)}ms`
|
||||
`Found ${response.playerScores.length} scores for player "${playerId}" in ${(
|
||||
performance.now() - before
|
||||
).toFixed(0)}ms`,
|
||||
);
|
||||
return response;
|
||||
}
|
||||
@ -168,13 +196,18 @@ class ScoreSaberService extends Service {
|
||||
async lookupLeaderboardScores(
|
||||
leaderboardId: string,
|
||||
page: number,
|
||||
useProxy = true
|
||||
useProxy = true,
|
||||
): Promise<ScoreSaberLeaderboardScoresPageToken | undefined> {
|
||||
const before = performance.now();
|
||||
this.log(`Looking up scores for leaderboard "${leaderboardId}", page "${page}"...`);
|
||||
this.log(
|
||||
`Looking up scores for leaderboard "${leaderboardId}", page "${page}"...`,
|
||||
);
|
||||
const response = await this.fetch<ScoreSaberLeaderboardScoresPageToken>(
|
||||
useProxy,
|
||||
LOOKUP_LEADERBOARD_SCORES_ENDPOINT.replace(":id", leaderboardId).replace(":page", page.toString())
|
||||
LOOKUP_LEADERBOARD_SCORES_ENDPOINT.replace(":id", leaderboardId).replace(
|
||||
":page",
|
||||
page.toString(),
|
||||
),
|
||||
);
|
||||
if (response === undefined) {
|
||||
return undefined;
|
||||
@ -182,7 +215,7 @@ class ScoreSaberService extends Service {
|
||||
this.log(
|
||||
`Found ${response.scores.length} scores for leaderboard "${leaderboardId}" in ${(
|
||||
performance.now() - before
|
||||
).toFixed(0)}ms`
|
||||
).toFixed(0)}ms`,
|
||||
);
|
||||
return response;
|
||||
}
|
||||
|
Reference in New Issue
Block a user