diff --git a/src/main/java/cc/fascinated/platform/impl/ScoreSaberPlatform.java b/src/main/java/cc/fascinated/platform/impl/ScoreSaberPlatform.java index 1e8fb9c..7191145 100644 --- a/src/main/java/cc/fascinated/platform/impl/ScoreSaberPlatform.java +++ b/src/main/java/cc/fascinated/platform/impl/ScoreSaberPlatform.java @@ -187,7 +187,7 @@ public class ScoreSaberPlatform extends Platform { @Override public void updateLeaderboards() { - List scores = this.trackedScoreService.getTrackedScores(this.getPlatform(), true); + List scores = this.trackedScoreService.getTrackedScores(this.getPlatform(), false); List leaderboardIds = scores.stream().map(TrackedScore::getLeaderboardId).toList(); log.info("Updating {} leaderboards for platform '{}'", @@ -197,6 +197,19 @@ public class ScoreSaberPlatform extends Platform { int finished = 0; + // Delete duplicated score ids + List duplicatedScores = scores.stream().filter(score -> { + long count = scores.stream().filter(s -> s.getScoreId().equals(score.getScoreId())).count(); + return count > 1; + }).toList(); + if (!duplicatedScores.isEmpty()) { + this.trackedScoreService.deleteScores(duplicatedScores.toArray(TrackedScore[]::new)); + log.info("Deleted {} duplicated scores for platform '{}'", + duplicatedScores.size(), + this.getPlatform().getPlatformName() + ); + } + // Update the leaderboards for (String id : leaderboardIds) { try { diff --git a/src/main/java/cc/fascinated/services/TrackedScoreService.java b/src/main/java/cc/fascinated/services/TrackedScoreService.java index 58fd53c..c613b2d 100644 --- a/src/main/java/cc/fascinated/services/TrackedScoreService.java +++ b/src/main/java/cc/fascinated/services/TrackedScoreService.java @@ -85,8 +85,8 @@ public class TrackedScoreService { * @param platform the platform to get the scores from * @return the tracked scores */ - public List getTrackedScores(Platform.Platforms platform, boolean ranked) { - if (ranked) { + public List getTrackedScores(Platform.Platforms platform, boolean onlyRanked) { + if (onlyRanked) { return trackedScoreRepository.findAllByPlatformRankedOnly(platform.getPlatformName()); } return trackedScoreRepository.findAllByPlatform(platform.getPlatformName()); @@ -102,4 +102,15 @@ public class TrackedScoreService { this.trackedScoreRepository.updateScorePp(score.getScoreId(), score.getPp()); } } + + /** + * Deletes a list of tracked scores. + * + * @param scores the scores to delete + */ + public void deleteScores(TrackedScore... scores) { + for (TrackedScore score : scores) { + this.trackedScoreRepository.delete(score); + } + } }