Muthuraja18 commited on
Commit
220e7d3
ยท
verified ยท
1 Parent(s): 9b345ce
Files changed (1) hide show
  1. app.py +38 -11
app.py CHANGED
@@ -1237,9 +1237,18 @@ def inbox_page():
1237
  # Leaderboard page
1238
  # ----------------- Leaderboard Page -----------------
1239
  def leaderboard_page():
 
 
 
 
1240
  st.header("๐Ÿ† Leaderboard")
1241
 
1242
- # Get leaderboard data
 
 
 
 
 
1243
  with open(LEADERBOARD_FILE, "rb") as f:
1244
  st.download_button(
1245
  "โฌ‡ Download Leaderboard CSV",
@@ -1248,35 +1257,53 @@ def leaderboard_page():
1248
  mime="text/csv"
1249
  )
1250
 
1251
- leaderboard = unified_get("leaderboard") or []
 
 
 
 
1252
 
1253
  if not leaderboard:
1254
  st.info("No scores yet.")
1255
  return
1256
 
1257
- # Sort by score descending
1258
- leaderboard = sorted(leaderboard, key=lambda x: x.get("score", 0), reverse=True)
 
 
 
 
1259
 
1260
- # Display top 10
1261
  st.subheader("Top Players")
1262
  for i, row in enumerate(leaderboard[:10], 1):
1263
  st.write(
1264
  f"{i}. {row.get('avatar','๐ŸŽฎ')} **{row.get('name','Guest')}** "
1265
- f"(Game {row.get('game_id','')}) โ€” {row.get('score',0)} pts โ€” {row.get('percentage',0)}%"
1266
  )
1267
 
1268
- # Weekly leaderboard (optional)
1269
  st.subheader("Weekly Leaderboard (Top 10)")
1270
- week_leaderboard = [r for r in leaderboard if datetime.fromisoformat(r.get("timestamp", now_iso())).isocalendar()[1] == datetime.now().isocalendar()[1]]
1271
- if not week_leaderboard:
 
 
 
 
 
 
 
 
 
 
1272
  st.info("No scores yet this week.")
1273
  else:
1274
- week_leaderboard = sorted(week_leaderboard, key=lambda x: x.get("score",0), reverse=True)
1275
- for i, r in enumerate(week_leaderboard[:10], 1):
1276
  st.write(
1277
  f"{i}. {r.get('avatar','๐ŸŽฎ')} **{r.get('name','Guest')}** "
1278
  f"(Game {r.get('game_id','')}) โ€” {r.get('score',0)} pts"
1279
  )
 
1280
 
1281
  def get_weekly_leaderboard(limit=10):
1282
  rows = unified_get("/leaderboard") or []
 
1237
  # Leaderboard page
1238
  # ----------------- Leaderboard Page -----------------
1239
  def leaderboard_page():
1240
+ import os, csv
1241
+ import streamlit as st
1242
+ from datetime import datetime
1243
+
1244
  st.header("๐Ÿ† Leaderboard")
1245
 
1246
+ # ---------------- File check ----------------
1247
+ if not os.path.exists(LEADERBOARD_FILE):
1248
+ st.info("No scores yet.")
1249
+ return
1250
+
1251
+ # ---------------- Download CSV ----------------
1252
  with open(LEADERBOARD_FILE, "rb") as f:
1253
  st.download_button(
1254
  "โฌ‡ Download Leaderboard CSV",
 
1257
  mime="text/csv"
1258
  )
1259
 
1260
+ # ---------------- Read CSV ----------------
1261
+ leaderboard = []
1262
+ with open(LEADERBOARD_FILE, "r", encoding="utf-8") as f:
1263
+ reader = csv.DictReader(f)
1264
+ leaderboard = list(reader)
1265
 
1266
  if not leaderboard:
1267
  st.info("No scores yet.")
1268
  return
1269
 
1270
+ # Convert score to int (CSV reads as string)
1271
+ for r in leaderboard:
1272
+ r["score"] = int(r.get("score", 0))
1273
+
1274
+ # ---------------- Sort by score ----------------
1275
+ leaderboard = sorted(leaderboard, key=lambda x: x["score"], reverse=True)
1276
 
1277
+ # ---------------- Top 10 ----------------
1278
  st.subheader("Top Players")
1279
  for i, row in enumerate(leaderboard[:10], 1):
1280
  st.write(
1281
  f"{i}. {row.get('avatar','๐ŸŽฎ')} **{row.get('name','Guest')}** "
1282
+ f"(Game {row.get('game_id','')}) โ€” {row.get('score',0)} pts"
1283
  )
1284
 
1285
+ # ---------------- Weekly Leaderboard ----------------
1286
  st.subheader("Weekly Leaderboard (Top 10)")
1287
+ current_week = datetime.now().isocalendar()[1]
1288
+
1289
+ weekly = []
1290
+ for r in leaderboard:
1291
+ try:
1292
+ ts = datetime.fromisoformat(r.get("timestamp", ""))
1293
+ if ts.isocalendar()[1] == current_week:
1294
+ weekly.append(r)
1295
+ except Exception:
1296
+ pass
1297
+
1298
+ if not weekly:
1299
  st.info("No scores yet this week.")
1300
  else:
1301
+ for i, r in enumerate(weekly[:10], 1):
 
1302
  st.write(
1303
  f"{i}. {r.get('avatar','๐ŸŽฎ')} **{r.get('name','Guest')}** "
1304
  f"(Game {r.get('game_id','')}) โ€” {r.get('score',0)} pts"
1305
  )
1306
+
1307
 
1308
  def get_weekly_leaderboard(limit=10):
1309
  rows = unified_get("/leaderboard") or []