Muthuraja18 commited on
Commit
96baf4e
ยท
verified ยท
1 Parent(s): 4f299ae

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -95
app.py CHANGED
@@ -700,11 +700,13 @@ def home_page():
700
  sessions = unified_get("sessions") or {}
701
  active_list = []
702
  threshold = timedelta(seconds=HEARTBEAT_THRESHOLD_SECONDS)
703
- for gid, users in (sessions or {}).items():
704
  for uname, rec in (users or {}).items():
705
- last = parse_iso(rec.get('last_heartbeat'))
706
- if last and (datetime.utcnow() - last) < threshold:
707
- active_list.append((gid, uname, rec.get('last_heartbeat')))
 
 
708
 
709
  st.subheader("Active players (recent)")
710
  st.markdown(f"**{len(active_list)} players active now**")
@@ -714,112 +716,94 @@ def home_page():
714
  st.markdown("---")
715
 
716
  # Recent games
717
- games = unified_get("games") or {}
718
- players_map = unified_get("players") or {}
719
-
720
- st.subheader("Recent games")
721
-
722
- for g in sorted(games.values(), key=lambda x: x.get("created_at", ""), reverse=True)[:10]:
723
- gid = g.get("game_id")
724
-
725
- st.markdown(f"### ๐ŸŽฎ Game: **{gid}** {'(Closed)' if g.get('closed') else ''}")
726
- st.write(f"Host: {g.get('host')} โ€” Topics: {', '.join(g.get('topics', []))}")
727
- st.write(f"Created: {g.get('created_at')}")
728
-
729
- # โœ… Players for THIS game
730
- players_here = players_map.get(gid, {}) or {}
731
-
732
- st.write(f"Players joined: **{len(players_here)}**")
733
-
734
- # โœ… Submitted count
735
- submitted_count = sum(1 for p in players_here.values() if p.get("submitted"))
736
- st.write(f"Submitted: **{submitted_count} / {len(players_here)}**")
737
 
738
- # โœ… Final scores
739
- if players_here:
740
- st.markdown("**๐Ÿ“Š Final Scores**")
741
- for uname_p, info in players_here.items():
742
- if info.get("submitted"):
743
- st.write(
744
- f"{info.get('avatar','๐ŸŽฎ')} **{uname_p}** โ€” "
745
- f"Score: **{info.get('score', 0)}**, "
746
- f"Percentage: **{info.get('percentage', 0)}%**"
747
- )
748
 
749
- # โœ… Player status
750
- if players_here:
751
- st.markdown("**๐Ÿ‘ฅ Player Status**")
752
- for uname_p, info in players_here.items():
753
- status = "โœ… Submitted" if info.get('submitted') else "โณ Playing"
754
- st.write(f"{info.get('avatar','๐ŸŽฎ')} **{uname_p}** โ€” {status}")
755
 
756
- st.markdown("---")
757
-
758
-
759
- players_here = players_map.get(gid, {}) or {}
760
- st.write(f"Players joined: **{len(players_here)}**")
761
- # Players for this game
762
  players_here = players_map.get(gid, {}) or {}
763
  st.write(f"Players joined: **{len(players_here)}**")
764
 
765
- # Player status
766
- if players_here:
767
- for uname_p, info in players_here.items():
768
- status = "โœ… Submitted" if info.get('submitted') else "โณ Playing"
769
- st.write(f"{info.get('avatar','๐ŸŽฎ')} **{uname_p}** โ€” {status}")
770
-
771
- # Only show submitted players in a table
772
- submitted_players = {u:i for u,i in players_here.items() if i.get('submitted')}
773
- if submitted_players:
774
- st.markdown("**๐ŸŽฏ Submitted Players Results:**")
775
- df = pd.DataFrame([
776
- {
777
- "Avatar": info.get('avatar','๐ŸŽฎ'),
778
- "Player": uname,
779
- "Score": info.get('score',0),
780
- "Correct Answers": info.get('correct_flags',0)
781
- }
782
- for uname, info in submitted_players.items()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
783
  ])
784
  st.dataframe(df)
785
 
786
- # Invite / Challenge buttons only if game is open
787
  if not g.get('closed'):
788
  st.info(f"Share this Game ID: {gid}")
789
  render_copy_button(gid, gid)
790
 
791
- if st.session_state.get('username'):
792
- if st.button(f"Invite your friends to {gid}", key=f"invite_{gid}"):
793
- friends = get_friends_map().get(st.session_state['username'], [])
794
- if not friends:
795
- st.warning("No friends to invite.")
796
- else:
797
- for f in friends:
798
- send_game_invite(st.session_state['username'], f, gid)
799
- st.success("Invites sent to friends.")
800
-
801
- if st.button(f"Challenge friends with a new game like {gid}", key=f"challenge_{gid}"):
802
- new_id = create_game(
803
- st.session_state.get('username','Host'),
804
- g.get('topics',[]),
805
- num_questions=len(g.get('questions',[]))
806
- )
807
- st.success(f"Challenge created: {new_id}")
808
-
809
- st.markdown("---")
810
 
811
- # Weekly leaderboard
812
- st.subheader("๐Ÿ† Weekly Leaderboard (Top 10)")
813
- weekly = get_weekly_leaderboard()
814
- if not weekly:
815
- st.info("No scores yet this week.")
816
- else:
817
- for i, r in enumerate(weekly, 1):
818
- st.write(
819
- f"{i}. {r.get('avatar','๐ŸŽฎ')} **{r['name']}** "
820
- f"(Game {r['game_id']}) โ€” {r['score']} pts"
821
- )
822
 
 
 
 
 
 
 
 
 
 
 
 
823
  # Create game
824
  def create_game(topics=None, num_questions=5, auto_close=True, ai_topic=None):
825
  topics = topics or []
 
700
  sessions = unified_get("sessions") or {}
701
  active_list = []
702
  threshold = timedelta(seconds=HEARTBEAT_THRESHOLD_SECONDS)
703
+ for gid, users in sessions.items():
704
  for uname, rec in (users or {}).items():
705
+ last = rec.get('last_heartbeat')
706
+ if last:
707
+ last_dt = datetime.fromisoformat(last)
708
+ if datetime.utcnow() - last_dt < threshold:
709
+ active_list.append((gid, uname, last))
710
 
711
  st.subheader("Active players (recent)")
712
  st.markdown(f"**{len(active_list)} players active now**")
 
716
  st.markdown("---")
717
 
718
  # Recent games
719
+ games = unified_get("games") or {}
720
+ players_map = unified_get("players") or {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
721
 
722
+ st.subheader("Recent games")
723
+ for g in sorted(games.values(), key=lambda x: x.get("created_at", ""), reverse=True)[:10]:
724
+ gid = g.get("game_id")
 
 
 
 
 
 
 
725
 
726
+ st.markdown(f"### ๐ŸŽฎ Game: **{gid}** {'(Closed)' if g.get('closed') else ''}")
727
+ st.write(f"Host: {g.get('host')} โ€” Topics: {', '.join(g.get('topics', []))}")
728
+ st.write(f"Created: {g.get('created_at')}")
 
 
 
729
 
730
+ # Players for this game
 
 
 
 
 
731
  players_here = players_map.get(gid, {}) or {}
732
  st.write(f"Players joined: **{len(players_here)}**")
733
 
734
+ # Submitted count
735
+ submitted_count = sum(1 for p in players_here.values() if p.get("submitted"))
736
+ st.write(f"Submitted: **{submitted_count} / {len(players_here)}**")
737
+
738
+ # Final scores
739
+ if players_here:
740
+ st.markdown("**๐Ÿ“Š Final Scores**")
741
+ for uname_p, info in players_here.items():
742
+ if info.get("submitted"):
743
+ st.write(
744
+ f"{info.get('avatar','๐ŸŽฎ')} **{uname_p}** โ€” "
745
+ f"Score: **{info.get('score', 0)}**, "
746
+ f"Percentage: **{info.get('percentage', 0)}%**"
747
+ )
748
+
749
+ # Player status
750
+ if players_here:
751
+ st.markdown("**๐Ÿ‘ฅ Player Status**")
752
+ for uname_p, info in players_here.items():
753
+ status = "โœ… Submitted" if info.get('submitted') else "โณ Playing"
754
+ st.write(f"{info.get('avatar','๐ŸŽฎ')} **{uname_p}** โ€” {status}")
755
+
756
+ # Submitted players table
757
+ submitted_players = {u:i for u,i in players_here.items() if i.get('submitted')}
758
+ if submitted_players:
759
+ st.markdown("**๐ŸŽฏ Submitted Players Results:**")
760
+ df = pd.DataFrame([
761
+ {
762
+ "Avatar": info.get('avatar','๐ŸŽฎ'),
763
+ "Player": uname,
764
+ "Score": info.get('score',0),
765
+ "Correct Answers": info.get('correct_flags',0)
766
+ }
767
+ for uname, info in submitted_players.items()
768
  ])
769
  st.dataframe(df)
770
 
771
+ # Invite / Challenge if game is open
772
  if not g.get('closed'):
773
  st.info(f"Share this Game ID: {gid}")
774
  render_copy_button(gid, gid)
775
 
776
+ if st.session_state.get('username'):
777
+ if st.button(f"Invite your friends to {gid}", key=f"invite_{gid}"):
778
+ friends = get_friends_map().get(st.session_state['username'], [])
779
+ if not friends:
780
+ st.warning("No friends to invite.")
781
+ else:
782
+ for f in friends:
783
+ send_game_invite(st.session_state['username'], f, gid)
784
+ st.success("Invites sent to friends.")
785
+
786
+ if st.button(f"Challenge friends with a new game like {gid}", key=f"challenge_{gid}"):
787
+ new_id = create_game(
788
+ st.session_state.get('username','Host'),
789
+ g.get('topics',[]),
790
+ num_questions=len(g.get('questions',[]))
791
+ )
792
+ st.success(f"Challenge created: {new_id}")
 
 
793
 
794
+ st.markdown("---")
 
 
 
 
 
 
 
 
 
 
795
 
796
+ # Weekly Leaderboard
797
+ st.subheader("๐Ÿ† Weekly Leaderboard (Top 10)")
798
+ weekly = get_weekly_leaderboard()
799
+ if not weekly:
800
+ st.info("No scores yet this week.")
801
+ else:
802
+ for i, r in enumerate(weekly, 1):
803
+ st.write(
804
+ f"{i}. {r.get('avatar','๐ŸŽฎ')} **{r['name']}** "
805
+ f"(Game {r['game_id']}) โ€” {r['score']} pts"
806
+ )
807
  # Create game
808
  def create_game(topics=None, num_questions=5, auto_close=True, ai_topic=None):
809
  topics = topics or []