From b83d9b6d355b407afd4637fc60507f0e874fb846 Mon Sep 17 00:00:00 2001 From: bruno Date: Tue, 14 Jul 2026 21:13:37 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20board.=5Fsidebar=5Fdata=20now=20handles?= =?UTF-8?q?=20Gitea=20workspace=20cookie=20=E2=80=94=20tree=20persists=20a?= =?UTF-8?q?cross=20all=20pages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root cause: board._sidebar_data tried int(gitea:owner:repo) → ValueError → lost context Library, Trash, page editor pages showed empty workspace tree Fix: board._sidebar_data now mirrors dashboard._sidebar_data logic: - Detects gitea: prefixed cookie - Preserves active_ws_name, workspace_key, gitea_workspace - Loads local_ws_id for mirror workspace - Tree stays visible on /library, /trash, page editor, etc. --- app/routers/board.py | 47 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/app/routers/board.py b/app/routers/board.py index 0a0a9c2..73f0d15 100644 --- a/app/routers/board.py +++ b/app/routers/board.py @@ -225,14 +225,46 @@ def _sidebar_data(request: Request, owner: str = "", repo: str = "") -> dict: from app.routers.dashboard import WORKSPACE_COOKIE ws_cookie = request.cookies.get(WORKSPACE_COOKIE, "") active_ws_name = "Workspace" - if ws_cookie: + workspace_pages = [] + gitea_workspace = False + gitea_owner = "" + gitea_repo = "" + + if ws_cookie and ws_cookie.startswith("gitea:"): + # Gitea workspace: preserve context across pages + parts = ws_cookie.split(":", 2) + if len(parts) >= 3: + gitea_owner = parts[1] + gitea_repo = parts[2] + active_ws_name = f"{gitea_owner}/{gitea_repo}" + gitea_workspace = True + workspace_pages = [] # loaded client-side + # Get local workspace ID for mirror + if user: + try: + with get_conn() as conn: + row = conn.execute( + "SELECT id FROM workspaces WHERE owner_id=? AND name=? AND settings_json LIKE ?", + (user["id"], f"{gitea_owner}/{gitea_repo}", "%gitea_repo%") + ).fetchone() + if row: + local_ws_id = row["id"] + except Exception: + pass + elif ws_cookie and user: try: + wsi = int(ws_cookie) with get_conn() as conn: - ws = conn.execute("SELECT name FROM workspaces WHERE id=?", (int(ws_cookie),)).fetchone() - if ws: - active_ws_name = ws["name"] + row = conn.execute( + "SELECT id, name, owner_id FROM workspaces WHERE id=? AND owner_id=?", + (wsi, user["id"]) + ).fetchone() + if row: + active_ws_name = row["name"] + workspace_pages = _load_workspace_pages(ws_cookie) except (ValueError, Exception): pass + local_ws_id = 0 recent = [] if owner and repo: view_map = { @@ -331,12 +363,15 @@ def _sidebar_data(request: Request, owner: str = "", repo: str = "") -> dict: return {"workspace_name": ws_name, "workspace_initial": ws_name[0].upper() if ws_name else "B", "active_ws_name": active_ws_name, - "workspace_pages": _load_workspace_pages(ws_cookie), + "workspace_key": f"{gitea_owner}/{gitea_repo}" if gitea_workspace else ws_key, + "workspace_pages": workspace_pages, + "gitea_workspace": gitea_workspace, + "local_ws_id": local_ws_id, "current_page": repo or "Dashboard", "last_edited": "now", "recent_pages": recent, "private_pages": private_items, "favorite_pages": favorites, "shared_pages": shared_pages, "published_pages": published_pages, - "user": user, "workspace_key": ws_key, + "user": user, "auth_method": auth_method, "gitea_linked": gitea_linked, "github_linked": github_linked}