Make this project work again
This commit is contained in:
4 files changed
+87
-5
No files matched your search
@@ -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)
|
||||
|
||||
@@ -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) }
|
||||
}
|
||||
Reference in new issue
Block a user