Peering: end-user "Send to peer" UI #105
Labels
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Cordy/Cairn#105
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The user-facing sliver, exactly as Manuel framed it: "Der Endbenutzer sieht bei dem Senden von einer Datei zu seinem Empfänger nur ein Dropdown mit den Instanzen, die der Admin in die Peeringliste eingetragen hat."
Scope:
feat.spaces).GET /api/v1/peering/transfers: file, peer, recipient, status, failure reason).Open questions:
Carried here from closed issues — two things this UI must cover
1. Inbox notification (from #104)
#104 asked "how does the recipient learn a file arrived?" and it is the one question from that issue not resolved by the implementation. Today a recipient finds out by opening their Inbox and noticing. That is a real gap, not a deferral, and closing #104 should not have made it disappear.
#104's own recommendation, which I would keep: a UI badge fed by a newest-inbox-mtime probe. No mailer — Cairn has none, and adding one for this would be a dependency out of all proportion to the feature. The probe is cheap:
Staton/home/<user>/Inbox, compare against a last-seen timestamp held client-side.Worth deciding as part of the interaction design rather than bolted on: does the badge count files or just say "something new"? Counting means walking the inbox on every poll, which is a bounded but real cost on a large one.
2. Admin warning: group-only
receiverslists (from #123)CanReceivetakes groups as a parameter rather than resolving them, because the recipient is not authenticated — they are a name on the wire with no session to read live groups from. The wiring currently passesnil.Consequence: user-based
receiverslists work in every auth mode; group-based lists only work where the IdP admin client is configured. Without it, a group-only list matches nobody. That is correctly fail-closed, but silently useless — and the failure surfaces on the peer's side asSTATUS_UNKNOWN_RECIPIENT, which is the worst possible place to debug it.The admin peering UI should either refuse to save a group-only
receiverslist when the admin client is absent, or warn plainly at save time. Cheaper to prevent than to diagnose from another instance.Already available for this UI
GET /api/v1/peering/peersreturns only the peers the caller may actually send to, as a projection that deliberately excludes the peering key — so the dropdown offers exactly what will work and leaks no credential.GET /api/v1/peering/transfersreturns the caller's own transfers withpending/streaming/done/failed+ reason, scoped to the owner.Still needs your interaction design
Where the send entry point lives (per-row action, detail pane, multi-select), whether folder-send is offered at all given v1 is files-only, and what the transfer list looks like — inline in the file browser, a sidebar view, or its own page.
Implemented — closing
PR #128, built to the approved wireframe, all inside
web/static/index.htmlfollowing its own patterns.Shipped: per-row download + share quick actions (Nikola's addition — promoted from the ⋯ menu, folders excluded), "Send to peer" in the ⋯ menu gated on
feat.peerSend(probed viaGET /peering/peersat boot — 200 shows the surface, 404/401 hides everything, no new server code), the two-field send dialog with in-dialog errors, the Transfers sidebar view modelled onopenTrashViewwith state chips and failure reasons, and the inbox dot — one list call per minute against alocalStoragewatermark, cleared by viewing the Inbox. All strings in EN/DE/FR/IT. Fixed in passing:um-peering's duplicatedata-i18nattribute, which had it mislabelled "License".Deliberately not here:
receiverslists → split to #129 so it survives this issue closing.node --checkprove structure, not layout. First real render lands on the dogfood with the next tag; v0.6 beta is the declared design-review point, and Nikola will raise whatever it surfaces.The known sharp edge, by design: the recipient field is free text (no cross-instance roster exists), so a typo becomes a failed transfer with
UNKNOWN_RECIPIENTvisible in the Transfers view.