Skip to content

Feature: Forward messages to another room #105

@mjkatgithub

Description

@mjkatgithub

Planning

  • Milestone: Phase 3
  • Priority: P2
  • Size: M
  • Estimate: 3 SP

Goal

Forward an existing room message to another room/conversation (Element-style Forward), including sane content sanitization.

Background — Forward vs Share (Element)

Research element-hq/element-web before implementation:

Action Meaning in Element
Forward In-app: pick target room(s), send a new event with copied/sanitized content from an existing message. Strips relations (m.relates_to), recalculates/strips m.mentions so context does not leak (PR #30884, ForwardDialog).
Share Broader: e.g. /share?msg= route to compose new text/HTML/markdown into Matrix via the same room picker (PR #29874); also room invite links / matrix.to — not the same as forward.

This issue covers Forward only. External/share-extension flows → #106.

Scope

  • Forward action on messages (action bar / menu).
  • Target room picker (joined rooms; filter spaces vs DMs as needed).
  • Content transform before send (strip reply/thread relations; mention sanitization per Element approach).
  • Support text first; media/location forward as follow-up in same issue or noted stretch.
  • i18n EN/DE.

Branch

feature/message-forward

Acceptance Criteria

  • User can forward a message to another joined room.
  • Forwarded message appears in target room with expected body/content type.
  • Original message unchanged; no broken relation metadata in target.
  • Mentions from source are not leaked inappropriately (empty or recalculated m.mentions).
  • Cancel/back from picker sends nothing.

Test Checklist

Unit

  • Content transform: strips m.relates_to, handles m.mentions.
  • Room list filtering for picker.

Manuell / E2E

  • Forward text message A → room B; visible in B.
  • Message with @mention does not ping wrong user in target room.

Notes

  • Spike: read Element ForwardDialog + transformEvent helpers first.

Epic

Sub-issue of #3 (Phase 3).

Metadata

Metadata

Assignees

No one assigned

    Projects

    Status
    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions