feat: sidebar arborescence Gitea + tab user repos avec vrai username
1. Tab user repos: fetch username via /auth/user → affiche 'bruno' au lieu de 'Personal' 2. Sidebar: ws_cookie='gitea:owner:repo' → _sidebar_data() fetch le tree depuis Gitea API 3. base.html: data-gitea-path/type/sha sur les items workspace pour les projets Gitea 4. gitea_workspace.html: refonte sans tree panel → navigation via sidebar - Clic fichier → ouvre dans le contenu (lecture + edit + commit) - Clic dossier → lazy-load les enfants dans le sidebar 5. openGitea(): set cookie flowdeck_workspace avant navigation
This commit is contained in:
@@ -69,7 +69,41 @@ def _sidebar_data(request: Request, repos: list[dict]) -> dict:
|
||||
ws_cookie = request.cookies.get("flowdeck_workspace", "")
|
||||
active_ws_name = "Workspace"
|
||||
workspace_pages = []
|
||||
if ws_cookie:
|
||||
gitea_workspace = False
|
||||
|
||||
if ws_cookie and ws_cookie.startswith("gitea:"):
|
||||
# Gitea workspace: fetch repo tree for sidebar
|
||||
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
|
||||
# Fetch root tree from Gitea API (use admin token as fallback)
|
||||
try:
|
||||
from app.services.gitea_client import get_user_gitea_client, GiteaClient
|
||||
gitea = get_user_gitea_client(request) or GiteaClient()
|
||||
import asyncio
|
||||
tree_items = asyncio.run(gitea.get_repo_contents(gitea_owner, gitea_repo))
|
||||
for item in tree_items:
|
||||
is_folder = item.get("type") == "dir"
|
||||
workspace_pages.append({
|
||||
"id": item.get("path", ""),
|
||||
"name": item.get("name", ""),
|
||||
"icon": "📁" if is_folder else "📄",
|
||||
"url": f"javascript:void(0)",
|
||||
"active": False,
|
||||
"indent": 0,
|
||||
"depth": 0,
|
||||
"has_children": is_folder,
|
||||
"children": [],
|
||||
"_gitea_path": item.get("path", ""),
|
||||
"_gitea_type": "folder" if is_folder else "file",
|
||||
"_gitea_sha": item.get("sha", ""),
|
||||
})
|
||||
except Exception:
|
||||
pass
|
||||
elif ws_cookie:
|
||||
workspace_pages = _load_workspace_pages(ws_cookie)
|
||||
try:
|
||||
with get_conn() as conn:
|
||||
@@ -83,6 +117,7 @@ def _sidebar_data(request: Request, repos: list[dict]) -> dict:
|
||||
"workspace_name": ws, "workspace_initial": initial,
|
||||
"active_ws_name": active_ws_name,
|
||||
"workspace_pages": workspace_pages,
|
||||
"gitea_workspace": gitea_workspace,
|
||||
"current_page": "Dashboard", "last_edited": "now",
|
||||
"recent_pages": recent_pages,
|
||||
"private_pages": [],
|
||||
|
||||
Reference in New Issue
Block a user