Initial commit
This commit is contained in:
1 parent
d8329bf6ed
commit
d22da0f21a
10 files changed
+150
-117
No files matched your search
@@ -6,5 +6,7 @@
|
||||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-only</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -8,17 +8,42 @@
|
||||
import SwiftUI
|
||||
|
||||
struct ContentView: View {
|
||||
@State private var players: [Player] = []
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
Image(systemName: "globe")
|
||||
.imageScale(.large)
|
||||
.foregroundStyle(.tint)
|
||||
Text("Hello, world!")
|
||||
ZStack {
|
||||
VisualEffectBlur()
|
||||
.ignoresSafeArea()
|
||||
List(players) { player in
|
||||
HStack {
|
||||
Text(player.username)
|
||||
Spacer()
|
||||
Text("\(player.score)")
|
||||
.bold()
|
||||
}
|
||||
.padding(.vertical, 4)
|
||||
.listRowBackground(Color.clear)
|
||||
}
|
||||
.background(Color.clear)
|
||||
.scrollContentBackground(.hidden)
|
||||
.task {
|
||||
await loadPlayers()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func loadPlayers() async {
|
||||
do {
|
||||
players = try await loadLeaderboard()
|
||||
} catch {
|
||||
print("Failed to load leaderboard:", error)
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
ContentView()
|
||||
func loadLeaderboard() async throws -> [Player] {
|
||||
let url = URL(string: "https://berrydash.lncvrt.xyz/database/getTopPlayersAPI.php")!
|
||||
let (data, _) = try await URLSession.shared.data(from: url)
|
||||
guard let raw = String(data: data, encoding: .utf8) else { return [] }
|
||||
return parseLeaderboard(raw)
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
//
|
||||
// Player.swift
|
||||
// BerryLeaderboards
|
||||
//
|
||||
// Created by Lncvrt on 6/9/25.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct Player: Identifiable {
|
||||
let id = UUID()
|
||||
let username: String
|
||||
let score: Int
|
||||
}
|
||||
|
||||
func parseLeaderboard(_ raw: String) -> [Player] {
|
||||
raw.split(separator: ";").compactMap { entry in
|
||||
let parts = entry.split(separator: ":")
|
||||
guard parts.count == 2,
|
||||
let nameData = Data(base64Encoded: String(parts[0])),
|
||||
let username = String(data: nameData, encoding: .utf8),
|
||||
let score = Int(parts[1]) else { return nil }
|
||||
return Player(username: username, score: score)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// VisualEffectBlur.swift
|
||||
// BerryLeaderboards
|
||||
//
|
||||
// Created by Lncvrt on 6/9/25.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct VisualEffectBlur: NSViewRepresentable {
|
||||
func makeNSView(context: Context) -> NSVisualEffectView {
|
||||
let view = NSVisualEffectView()
|
||||
view.blendingMode = .behindWindow
|
||||
view.material = .underWindowBackground
|
||||
view.state = .active
|
||||
return view
|
||||
}
|
||||
func updateNSView(_ nsView: NSVisualEffectView, context: Context) {}
|
||||
}
|
||||
Reference in new issue
Block a user