Spaces:
Runtime error
Runtime error
Claude commited on
fix: 교사 토론 종료 시 학생 화면 자동 반영 — 3초 폴링 fragment 추가
Browse filesfetch_debate_status 캐시가 만료돼도 학생 페이지가 rerun되지 않아
종료 상태가 반영 안 되는 문제 수정.
@st .fragment(run_every=3)으로 3초마다 상태 확인 후 변경 시 전체 rerun.
https://claude.ai/code/session_016DE3uHLsVmA5Uv7gZGGaKT
app.py
CHANGED
|
@@ -48,6 +48,7 @@ if 'admin_auth' not in st.session_state: st.session_state['admin_auth'] = False
|
|
| 48 |
if 'teacher_id' not in st.session_state: st.session_state['teacher_id'] = ""
|
| 49 |
if 'is_working' not in st.session_state: st.session_state['is_working'] = False
|
| 50 |
if 'ai_hint_manual_mode' not in st.session_state: st.session_state['ai_hint_manual_mode'] = False
|
|
|
|
| 51 |
|
| 52 |
if st.session_state['page'] != "home":
|
| 53 |
col_home_btn, _ = st.columns([1, 7])
|
|
@@ -102,6 +103,15 @@ else:
|
|
| 102 |
st.title(f"🎙️ 말자취(Talk-Trace) AI [{room_name}]")
|
| 103 |
st.info(f"**현재 주제:** {current_topic} ({current_mode})")
|
| 104 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 105 |
@st.fragment
|
| 106 |
def _render_opinion_input(supabase, room_name, user_role, student_name, student_number, current_mode):
|
| 107 |
st.subheader("🗣️ 내 의견 작성")
|
|
@@ -202,6 +212,7 @@ def _render_opinion_input(supabase, room_name, user_role, student_name, student_
|
|
| 202 |
st.rerun()
|
| 203 |
|
| 204 |
if user_role == "학생" and opinion_changes_available():
|
|
|
|
| 205 |
debate_status = fetch_debate_status(supabase, room_name)
|
| 206 |
if debate_status == "ended":
|
| 207 |
render_post_opinion_section(supabase, room_name, student_name, act_type, current_topic)
|
|
|
|
| 48 |
if 'teacher_id' not in st.session_state: st.session_state['teacher_id'] = ""
|
| 49 |
if 'is_working' not in st.session_state: st.session_state['is_working'] = False
|
| 50 |
if 'ai_hint_manual_mode' not in st.session_state: st.session_state['ai_hint_manual_mode'] = False
|
| 51 |
+
if '_last_debate_status' not in st.session_state: st.session_state['_last_debate_status'] = None
|
| 52 |
|
| 53 |
if st.session_state['page'] != "home":
|
| 54 |
col_home_btn, _ = st.columns([1, 7])
|
|
|
|
| 103 |
st.title(f"🎙️ 말자취(Talk-Trace) AI [{room_name}]")
|
| 104 |
st.info(f"**현재 주제:** {current_topic} ({current_mode})")
|
| 105 |
|
| 106 |
+
@st.fragment(run_every=3)
|
| 107 |
+
def _poll_debate_status(room_name):
|
| 108 |
+
"""학생 화면에서 3초마다 토론 상태를 확인하고 변경 시 전체 rerun."""
|
| 109 |
+
current = fetch_debate_status(supabase, room_name)
|
| 110 |
+
if current != st.session_state.get("_last_debate_status"):
|
| 111 |
+
st.session_state["_last_debate_status"] = current
|
| 112 |
+
st.rerun()
|
| 113 |
+
|
| 114 |
+
|
| 115 |
@st.fragment
|
| 116 |
def _render_opinion_input(supabase, room_name, user_role, student_name, student_number, current_mode):
|
| 117 |
st.subheader("🗣️ 내 의견 작성")
|
|
|
|
| 212 |
st.rerun()
|
| 213 |
|
| 214 |
if user_role == "학생" and opinion_changes_available():
|
| 215 |
+
_poll_debate_status(room_name)
|
| 216 |
debate_status = fetch_debate_status(supabase, room_name)
|
| 217 |
if debate_status == "ended":
|
| 218 |
render_post_opinion_section(supabase, room_name, student_name, act_type, current_topic)
|