Make this project work again

This commit is contained in:
Lncvrt committed 2026-03-24 23:36:05 -07:00
1 parent e3cc2406b8
commit cb342db135
4 files changed
+87 -5

No files matched your search

+1 -1
View File
@@ -76,7 +76,7 @@ struct ContentView: View {
}
func loadLeaderboard() async throws -> [Player] {
let url = URL(string: "https://berrydash.lncvrt.xyz/database/getTopPlayersAPI.php")!
let url = URL(string: "https://games.lncvrt.xyz/api/berrydash/leaderboard/score")!
let (data, _) = try await URLSession.shared.data(from: url)
guard let raw = String(data: data, encoding: .utf8) else { return [] }
return parseLeaderboard(raw)
+44 -2
View File
@@ -7,12 +7,54 @@
import Foundation
struct LeaderboardResponse: Codable {
let success: Bool
let message: String?
let data: [PlayerData]
}
struct PlayerData: Codable {
let id: Int
let username: String
let value: Int
let icon: IntOrString
let overlay: IntOrString
let birdColor: [Int]
let overlayColor: [Int]
let customIcon: String?
}
enum IntOrString: Codable {
case int(Int)
case string(String)
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
if let int = try? container.decode(Int.self) {
self = .int(int)
} else if let str = try? container.decode(String.self) {
self = .string(str)
} else {
throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid value"))
}
}
func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
switch self {
case .int(let i): try container.encode(i)
case .string(let s): try container.encode(s)
}
}
}
struct Player: Codable {
let username: String
let score: Int
}
func parseLeaderboard(_ raw: String) -> [Player] {
guard let data = raw.data(using: .utf8) else { return [] }
return (try? JSONDecoder().decode([Player].self, from: data)) ?? []
guard let data = raw.data(using: .utf8) else { return [] }
guard let response = try? JSONDecoder().decode(LeaderboardResponse.self, from: data) else { return [] }
return response.data.map { Player(username: $0.username, score: $0.value) }
}