From 7d9b268f8a827d961686d6050a4182b66e501d17 Mon Sep 17 00:00:00 2001 From: Dennis van Hest Date: Sun, 23 Jun 2024 21:25:22 +0200 Subject: [PATCH] Fixed error for players with no scores in ScoreSaber + fixed error for players not registered in ScoreSaber for at least 50 days --- MapMaven.Core/Models/PlayerProfile.cs | 2 +- .../Leaderboards/ScoreSaberService.cs | 31 ++++++++++++++----- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/MapMaven.Core/Models/PlayerProfile.cs b/MapMaven.Core/Models/PlayerProfile.cs index 7e97b9a..51133dc 100644 --- a/MapMaven.Core/Models/PlayerProfile.cs +++ b/MapMaven.Core/Models/PlayerProfile.cs @@ -28,7 +28,7 @@ public PlayerProfile(ApiClients.ScoreSaber.Player player) LeaderboardProvider = LeaderboardProvider.ScoreSaber; var playerRankHistory = player.Histories - ?.Split(',') + ?.Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(int.Parse) .Cast() .ToArray() ?? []; diff --git a/MapMaven.Core/Services/Leaderboards/ScoreSaberService.cs b/MapMaven.Core/Services/Leaderboards/ScoreSaberService.cs index 57ca0d0..039a6b4 100644 --- a/MapMaven.Core/Services/Leaderboards/ScoreSaberService.cs +++ b/MapMaven.Core/Services/Leaderboards/ScoreSaberService.cs @@ -67,13 +67,30 @@ public class ScoreSaberService : ILeaderboardProviderService do { - var scoreCollection = await _scoreSaber.ScoresAsync( - playerId: playerId, - limit: 100, - sort: Sort.Top, - page: page, - withMetadata: true - ); + PlayerScoreCollection scoreCollection; + + try + { + scoreCollection = await _scoreSaber.ScoresAsync( + playerId: playerId, + limit: 100, + sort: Sort.Top, + page: page, + withMetadata: true + ); + } + catch (ScoreSaberApiClient.ApiException exception) + { + // The ScoreSaber API returns 404 when player has no scores, so just return an empty list of PlayerScores. + if (exception.StatusCode == 404) + { + break; + } + else + { + throw; + } + } totalScores = scoreCollection.Metadata.Total;