feat(collab): host/deel/join-UI voor realtime samenwerken (Matrix) #1061

Merged
brenno merged 1 commit from feat/matrix-host-join-ui into main 2026-08-01 09:05:29 +00:00
Owner

De demonstreerbare kern van de #977-plak: een realtime sessie starten, de link delen, en via een link deelnemen — vanuit het commandopalet (Ctrl/Cmd+K).

Wat

  • collabPaletteCommands toont de Matrix-acties zodra een Matrix-account is ingesteld (#1039), náást de bestaande WebDAV-acties: "Realtime samenwerken starten" en "Deelnemen via een link". Tijdens een sessie: de link opnieuw kopiëren (host) en verlaten.
  • matrix_collab_dialogs.dart: de host krijgt een deelbare-link-dialoog met één-tik-kopiëren; een guest plakt een link. De link is het room-geheim (toegang tot de sessie), niet tot de inhoud — die blijft E2EE met OciDecks eigen sleutels.
  • listenMatrixCollab toont de uitkomst reactief op de fase-overgang: de invite-dialoog van de host, "je doet nu live mee" voor een guest, of de gelokaliseerde reden bij mislukken. Nodig omdat een guest pas actief wordt zodra de baseline binnenkomt, ruim ná de actie. CollabSessionState.isMatrix onderscheidt de twee transports over de hele levenscyclus.

Toetsing

  • De twee dialogen (plakken → getrimde link; kopiëren → klembord + melding) en welke palette-commando's per accountstatus verschijnen. De sessie-levenscyclus zelf is headless getoetst tegen de fake-homeserver (#1036).
  • make check groen: 7806 tests, dekking 87,4%, per-bestandsvloer 0 onder.
  • l10n: 18 nieuwe bronstrings × 31 talen. SOURCE_MAP bijgewerkt. Twee bestandsgrootte-baselines bewust +2/+1 (imports + één listener-aanroep, gedrag in de collab-part).

Draaiende-app-review

De sessie-levenscyclus is volledig headless getoetst. Een échte tweezijdige host→join in de draaiende app vereist een live Matrix-homeserver (en twee clients); dat is infrastructuur die niet in deze omgeving staat. De UI-oppervlakken (Samenwerken-instellingen, palet-acties, dialogen) zijn per widgettest bevestigd; een beeldkeuring van die oppervlakken kan los volgen.

Sluit de verticale plak voor #977 (self-encrypted relay, pure Dart): datalaag → account → provider → UI, alles pure Dart, EUPL-1.2 behouden.

De demonstreerbare kern van de #977-plak: een realtime sessie starten, de link delen, en via een link deelnemen — vanuit het commandopalet (Ctrl/Cmd+K). ## Wat - **`collabPaletteCommands`** toont de Matrix-acties zodra een Matrix-account is ingesteld ([#1039](https://pawprint.vigilis.online/LibreKAT/Ocideck/pulls/1039)), náást de bestaande WebDAV-acties: **"Realtime samenwerken starten"** en **"Deelnemen via een link"**. Tijdens een sessie: de link opnieuw kopiëren (host) en verlaten. - **`matrix_collab_dialogs.dart`**: de host krijgt een deelbare-link-dialoog met één-tik-kopiëren; een guest plakt een link. De link is het room-geheim (toegang tot de sessie), niet tot de inhoud — die blijft E2EE met OciDecks eigen sleutels. - **`listenMatrixCollab`** toont de uitkomst reactief op de fase-overgang: de invite-dialoog van de host, "je doet nu live mee" voor een guest, of de gelokaliseerde reden bij mislukken. Nodig omdat een guest pas actief wordt zodra de baseline binnenkomt, ruim ná de actie. `CollabSessionState.isMatrix` onderscheidt de twee transports over de hele levenscyclus. ## Toetsing - De twee dialogen (plakken → getrimde link; kopiëren → klembord + melding) en welke palette-commando's per accountstatus verschijnen. De sessie-levenscyclus zelf is headless getoetst tegen de fake-homeserver ([#1036](https://pawprint.vigilis.online/LibreKAT/Ocideck/pulls/1036)). - `make check` groen: 7806 tests, dekking 87,4%, per-bestandsvloer 0 onder. - l10n: 18 nieuwe bronstrings × 31 talen. SOURCE_MAP bijgewerkt. Twee bestandsgrootte-baselines bewust +2/+1 (imports + één listener-aanroep, gedrag in de collab-part). ## Draaiende-app-review De sessie-levenscyclus is volledig headless getoetst. Een échte tweezijdige host→join in de draaiende app vereist een live Matrix-homeserver (en twee clients); dat is infrastructuur die niet in deze omgeving staat. De UI-oppervlakken (Samenwerken-instellingen, palet-acties, dialogen) zijn per widgettest bevestigd; een beeldkeuring van die oppervlakken kan los volgen. Sluit de verticale plak voor #977 (self-encrypted relay, pure Dart): datalaag → account → provider → UI, alles pure Dart, EUPL-1.2 behouden.
feat(collab): host/deel/join-UI voor realtime samenwerken (Matrix)
All checks were successful
scans / scans (pull_request) Successful in 3m35s
fd08db85f2
De demonstreerbare kern van de #977-plak (PR-3c): een sessie starten, de link
delen, en via een link deelnemen — vanuit het commandopalet.

- `collabPaletteCommands` toont nu ook de Matrix-acties zodra een Matrix-account
  is ingesteld (§6), náást de bestaande WebDAV-acties: "Realtime samenwerken
  starten" en "Deelnemen via een link". Tijdens een sessie: de link opnieuw
  kopiëren (host) en verlaten.
- `matrix_collab_dialogs.dart`: de host krijgt een deelbare-link-dialoog met
  één-tik-kopiëren; een guest plakt een link. De link is het room-geheim (toegang
  tot de sessie), niet tot de inhoud — die blijft E2EE met onze eigen sleutels.
- `listenMatrixCollab` toont de uitkomst reactief op de fase-overgang: de
  invite-dialoog van de host, "je doet nu live mee" voor een guest, of de
  gelokaliseerde reden bij mislukken. Nodig omdat een guest pas actief wordt als
  de baseline binnenkomt, ruim ná de actie. `CollabSessionState.isMatrix`
  onderscheidt de twee transports over de hele levenscyclus.

- Tests: de twee dialogen (plakken/kopiëren) en welke palette-commando's
  verschijnen per accountstatus. `make check` groen (7806 tests, 87,4% dekking).
- l10n: 18 nieuwe bronstrings × 31 talen. SOURCE_MAP bijgewerkt. Twee
  bestandsgrootte-baselines bewust +2/+1 (imports + één listener-aanroep).

Onderdeel van de verticale plak voor #977 (self-encrypted relay, pure Dart).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 490cde8be9 into main 2026-08-01 09:05:29 +00:00
brenno deleted branch feat/matrix-host-join-ui 2026-08-01 09:05:30 +00:00
Sign in to join this conversation.
No description provided.