Skip to content

Feature: Pinned messages #73

Description

@mjkatgithub

Goal

Let room members pin important messages and browse them from the room header, similar to Element and Discord.

Scope

  • Read and display pinned messages for the active room
  • Open a pinned-messages panel from the room header toolbar
  • Pin and unpin messages from the message action bar when room power levels allow it
  • Jump from a pinned entry to the message in the main timeline
  • English and German UI strings
  • Replace the current disabled pin placeholder in ChatRoomHeaderToolbar

Out of scope for this issue:

  • Premium-only features
  • Pinned message search or filters beyond a simple chronological list

Branch

feature/pinned-messages

Acceptance Criteria

  • The room header pin control opens a pinned-messages panel in the right sidebar
  • Pinned messages are listed with sender, snippet, and pin time
  • Users with sufficient power level can pin and unpin messages from the message action bar
  • Selecting a pinned message focuses or scrolls to that message in the room timeline
  • Pin and unpin changes sync from the homeserver and update the list without reload
  • The panel shows an empty state when the room has no pinned messages
  • The panel works alongside the existing threads and members sidebar modes

Test Checklist

Unit

  • Pinned event/state parsing and timeline mapping
  • Pin and unpin client helpers respect room power levels

Integration

  • Header toolbar switches the right sidebar to the pinned panel
  • Pin and unpin updates the visible pinned list for the active room

E2E

  • Pin a message, reopen the room, and verify it appears in the pinned list
  • Open a pinned entry and verify navigation to the original message
  • Unpin a message and verify it disappears from the pinned list

Notes

  • Shipped: matrixRoomPinnedEvents, matrixPinnedMessageEntries, ChatPinnedMessagesPanel, header toolbar + action bar pin/unpin, jumpToMessageInRoom with timeline pagination, EN/DE i18n, unit/component/E2E coverage.
  • Pin time in the list uses the pinned message's timestamp (not per-pin state history).
  • Follow the existing room header toolbar and right-sidebar patterns used for threads and members.
  • Matrix room state m.room.pinned_events is the expected protocol baseline; align with Element behavior where practical.

Metadata

Metadata

Assignees

Projects

Status
Done

Relationships

None yet

Development

No branches or pull requests

Issue actions