kingame21/BioTech.ai
0
1# main.py2# ATTENZIONE: httpx_patch DEVE essere il PRIMO import, prima di groq/httpx3import httpx_patch # noqa: F401 ← fix "Connection error" (proxies kwarg)4 5import os6import flet as ft7 8from config import BG_PAGE, BG_CARD, TEXT_MAIN, WINDOW_WIDTH, WINDOW_HEIGHT9from state import AppState10from app_ui import build_app11from auth import user_exists12 13SP_UID = "biomech.user_id"14SP_USER = "biomech.username"15 16 17async def main(page: ft.Page):18 page.title = "BioMech AI Coach"19 page.theme_mode = ft.ThemeMode.LIGHT20 page.bgcolor = BG_PAGE21 page.scroll = ft.ScrollMode.ADAPTIVE22 23 try:24 page.window.width = WINDOW_WIDTH25 page.window.height = WINDOW_HEIGHT26 except Exception:27 pass28 29 state = AppState()30 31 # Auto-login (resta connesso)32 # Verifica che user_id salvato esista ancora nel DB SQLite.33 # Se non esiste (es. DB resettato o vecchio JSON auth) forza il login.34 try:35 sp = ft.SharedPreferences()36 saved_uid = await sp.get(SP_UID)37 saved_user = await sp.get(SP_USER)38 if saved_uid and saved_user and user_exists(str(saved_uid)):39 state.user_id = str(saved_uid)40 state.username = str(saved_user)41 elif saved_uid:42 # user_id obsoleto — pulisci SharedPreferences43 print(f"[WARN] auto-login: user_id {saved_uid!r} non nel DB, forzato login.")44 try:45 await sp.remove(SP_UID)46 await sp.remove(SP_USER)47 except Exception:48 pass49 except Exception as ex:50 print(f"[WARN] SharedPreferences get error: {ex}")51 52 content_area, nav_bar, nav_changed = build_app(page, state)53 54 page.appbar = ft.AppBar(55 title=ft.Text("BIOMECH", color=TEXT_MAIN, weight="bold", size=20),56 center_title=True,57 bgcolor=BG_CARD,58 )59 page.navigation_bar = nav_bar60 page.add(content_area)61 62 nav_bar.selected_index = 063 nav_changed(0)64 65 66if __name__ == "__main__":67 os.makedirs("uploads", exist_ok=True)68 69 is_web = bool(70 os.environ.get("HUGGINGFACE_SPACE_ID") or os.environ.get("PORT")71 )72 73 if is_web:74 ft.run(75 main,76 view=ft.AppView.WEB_BROWSER,77 host="0.0.0.0",78 port=int(os.environ.get("PORT", 7860)),79 upload_dir="uploads",80 )81 else:82 ft.run(main, upload_dir="uploads")