diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-08-19 16:36:29 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-08-19 16:36:29 +0200 |
| commit | 90c3c6a01f46c9b29c5d92702d7383f32e8951d7 (patch) | |
| tree | 779f5ee3557d5111e0a7f1fdc211a2845bc3bc69 /packages/meshbay-node/src/meshbay_node/roots.py | |
| parent | 9498ce0a34cc363e8cf9a42575c8fcf7dfe0fd1a (diff) | |
| download | meshbay-90c3c6a01f46c9b29c5d92702d7383f32e8951d7.tar.gz | |
feat(ui): 11-point UI overhaul — tabs, transfers, settings, uploads
Hub/UI:
- Icon-only group tabs (chat, files, settings) with per-group default tab
- Transfer widget: filename becomes a clickable link to open completed downloads
- Pulse animation on transfer icon (pale→dark green) while active
- Download button feedback in FilePreview (spinner, auto-reset)
- Group mute toggle persists across navigation
- Login page autofocus, chat refocus after send
- Theme toggle closes menu, status badge and duplicate connecting removed
- Create-folder restricted to operators, download-path note removed
- User preferences API (CRUD) with Alembic migration
- Profile: email display/edit via PATCH /v1/users/me
- Settings: "Defaults" section for default tab selector
- All 10 locale files updated
Node:
- upload_dir in node.toml: separate filesystem path for uploads
- Root.direct flag: uploads land at root path, no subdirectory
- CLI --upload-dir flag on `group add`
- Admin UI accepts upload_dir
Client (Electron):
- shell.openPath bridge for opening completed downloads
- platform.js passes open callback from native save
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/roots.py')
| -rw-r--r-- | packages/meshbay-node/src/meshbay_node/roots.py | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/roots.py b/packages/meshbay-node/src/meshbay_node/roots.py index 8f999d7..bc27bf7 100644 --- a/packages/meshbay-node/src/meshbay_node/roots.py +++ b/packages/meshbay-node/src/meshbay_node/roots.py @@ -51,6 +51,7 @@ class Root: path: Path kind: str = "generic" upload: bool = False + direct: bool = False # Runtime, not configuration: set by the indexer when the directory can no # longer be read, and cleared when it comes back. available: bool = True @@ -139,7 +140,8 @@ class RootSet: kind = "generic" root = Root(name=name, path=path, kind=kind, - upload=bool(spec.get("upload", False))) + upload=bool(spec.get("upload", False)), + direct=bool(spec.get("direct", False))) _refuse_nesting(root, roots) roots.append(root) by_folded[root.folded] = root @@ -277,11 +279,14 @@ class RootSet: def describe(self) -> list[dict]: """Per-root state for the index payload and the admin UI.""" - return [ - {"name": r.name, "kind": r.kind, "available": r.available, - "upload": r.upload} - for r in self.roots - ] + out = [] + for r in self.roots: + d: dict = {"name": r.name, "kind": r.kind, + "available": r.available, "upload": r.upload} + if r.direct: + d["direct"] = True + out.append(d) + return out def entry_abs_path(roots: RootSet, entry) -> Path | None: |