Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from app.db import supabase | |
| from app.chat import list_chat_sessions, create_chat_session, ensure_chat_session | |
| def restore_user_session_if_needed(): | |
| """Try to restore Supabase user session into st.session_state['user'] if missing.""" | |
| if st.session_state.get("user"): | |
| return | |
| try: | |
| current = supabase.auth.get_session() | |
| if current and getattr(current, "user", None): | |
| u = current.user | |
| st.session_state["user"] = {"id": u.id, "email": getattr(u, "email", None)} | |
| return | |
| if st.session_state.get("sb_session"): | |
| toks = st.session_state["sb_session"] | |
| if toks.get("access_token") and toks.get("refresh_token"): | |
| supabase.auth.set_session(toks["access_token"], toks["refresh_token"]) # may refresh | |
| ures = supabase.auth.get_user() | |
| user_obj = getattr(ures, "user", None) | |
| if user_obj: | |
| st.session_state["user"] = {"id": user_obj.id, "email": getattr(user_obj, "email", None)} | |
| except Exception: | |
| pass | |
| def ensure_active_session(user_id: str): | |
| """Ensure st.session_state['session_id'] points to an existing session; create one if needed.""" | |
| sid = st.session_state.get("session_id") | |
| if not sid: | |
| sessions = list_chat_sessions(user_id, limit=1) | |
| if sessions: | |
| sid = sessions[0]["id"] | |
| else: | |
| sid = create_chat_session(user_id, title="Percakapan Baru") | |
| st.session_state["session_id"] = sid | |
| try: | |
| ensure_chat_session(user_id, sid) # make sure exists in DB if missing | |
| except Exception: | |
| pass | |
| return st.session_state["session_id"] | |