diff --git a/requirements.txt b/requirements.txt index 0b84076..aee33a7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,4 +4,5 @@ pandas plotly scipy openpyxl -beautifulsoup4 \ No newline at end of file +beautifulsoup4 +streamlit-autorefresh \ No newline at end of file diff --git a/view_live_mt5_eas.py b/view_live_mt5_eas.py index 861431a..dd17689 100644 --- a/view_live_mt5_eas.py +++ b/view_live_mt5_eas.py @@ -19,6 +19,12 @@ import json import ftplib from pathlib import Path +try: + from streamlit_autorefresh import st_autorefresh + HAS_AUTOREFRESH = True +except ImportError: + HAS_AUTOREFRESH = False + CONFIG_FILE = Path("ftp_config.json") ACCOUNTS_FILE = Path("ftp_accounts.json") CACHE_DIR = Path("cache") @@ -481,11 +487,19 @@ cache/ oldest = max(ages) st.caption(f"Updated {oldest:.0f}m ago") - # Auto-refresh: trigger on first load, manual refresh, or when interval elapsed - last_auto = st.session_state.get("ftp_last_auto_refresh", 0) - now_ts = datetime.now().timestamp() + # JavaScript-based auto-refresh — triggers a full rerun on a timer + if poll_interval > 0: + if HAS_AUTOREFRESH: + st_autorefresh(interval=poll_interval * 60 * 1000, key="ftp_autorefresh") + else: + st.caption("💡 Install `streamlit-autorefresh` for auto-refresh: " + "`pip install streamlit-autorefresh`") + + # Pull from FTP on first load or when poll interval has elapsed + last_auto = st.session_state.get("ftp_last_auto_refresh", 0) + now_ts = datetime.now().timestamp() interval_elapsed = poll_interval > 0 and (now_ts - last_auto) >= poll_interval * 60 - auto_refresh = first_load or interval_elapsed + auto_refresh = first_load or interval_elapsed if do_refresh or no_cache or auto_refresh: st.session_state["ftp_last_auto_refresh"] = datetime.now().timestamp() @@ -1370,14 +1384,4 @@ def _render_year_grid(year, day_map, today, unit, balance): f'