MSC2867: Marking rooms as unread (#2867)
* marking rooms as unread Signed-off-by: Marcus Hoffmann <bubu@bubu1.eu> * Add alternative suggestion by @turt2live Co-authored-by: Travis Ralston <travpc@gmail.com> * mention that this msc lacks thread support * typo fix * clarify type of notification we are referring to * fix some small typos * Update proposals/2867-rooms_marked_unread.md grammar improvement Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> --------- Signed-off-by: Marcus Hoffmann <bubu@bubu1.eu> Co-authored-by: Travis Ralston <travpc@gmail.com> Co-authored-by: Andrew Morgan <andrew@amorgan.xyz> Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>pull/4164/head
parent
9acf41a92b
commit
d04470eca4
@ -0,0 +1,81 @@
|
||||
# MSC2867: Marking rooms as unread
|
||||
|
||||
There is currently no way to mark a room for later attention. A common use-case is receiving a
|
||||
notification on the go and opening the corresponding room but then deciding to deal with it at a later time.
|
||||
|
||||
This MSC introduces an option to manually mark an room as *Unread*.
|
||||
|
||||
In the above use-case the user would just mark the room as unread and when later opening a matrix
|
||||
client on their desktop PC that room would appear prominently in their room list waiting for attention.
|
||||
|
||||
A related use-case solved by this proposal is wanting to mute a room's notifications while there's an
|
||||
ongoing discussion but still flag it for catching up later.
|
||||
|
||||
Both WhatsApp and Telegram offer this functionality.
|
||||
|
||||
## Proposal
|
||||
|
||||
We add a [room account data](https://matrix.org/docs/spec/client_server/r0.6.1#put-matrix-client-r0-user-userid-rooms-roomid-account-data-type)
|
||||
field `m.marked_unread` which just stores the following:
|
||||
|
||||
```json
|
||||
{
|
||||
"unread": true | false
|
||||
}
|
||||
```
|
||||
|
||||
When this is true a client should show the room with an indeterminate unread marker. This marker should
|
||||
be of similar visual importance to a non-highlight notification badge without the notification count. For example if
|
||||
you have a red circle with small numbers inside for counting notifications next to a room, then a room
|
||||
without notifications but marked as unread should have just the red circle. If a client gets new
|
||||
notifications after marking a room as unread the notification count should be displayed instead as normal.
|
||||
|
||||
The `m.fully_read` marker should not be touched when marking a room as unread to keep the users read position
|
||||
in the room.
|
||||
|
||||
Marking a room as read, if a client implements such a functionality, now involves sending a read receipt for the last
|
||||
event, as well as setting `m.marked_unread` to false.
|
||||
|
||||
The unread flag should be cleared when opening the room again.
|
||||
|
||||
## Potential issues
|
||||
|
||||
Client not aware of this feature will not clear the unread flag, when reading the room. In addition they'll obviously
|
||||
not show the room with a special badge. This seems preferable to the alternative of clearing the unread flag of a room
|
||||
without intending to because it didn't actually show up as unread.
|
||||
|
||||
This proposal has no support for marking threads as unread. This should be handled in a future MSC.
|
||||
|
||||
## Alternatives
|
||||
|
||||
There are multiple possible alternatives here:
|
||||
|
||||
* Marking individual messages as unread as discussed [here](https://github.com/matrix-org/matrix-doc/issues/2506):
|
||||
This is a far more complex feature that has possible interactions with server-side implementations and notification
|
||||
counts. This proposal aims to be a far more lightweight alternative. Looking at other messengers marking a room as
|
||||
unread is a more common operation than marking messages as unread, so it could be argued that others already found
|
||||
this to strike a good balance of complexity and use-cases covered.
|
||||
* Modifying the `m.fully_read` marker instead of introducing a new `m.marked_unread` field:
|
||||
Another idea was setting the `m.fully_read` marker to some earlier event which would then cause clients to show
|
||||
unread messages again. This has two problems:
|
||||
* It makes it harder to distinguish between rooms which happen to have unread messages that you don't necessarily
|
||||
care about and rooms which were manually marked as such and thus should be shown much more prominently.
|
||||
* When trying to work around this, by setting the marker at a special location like the room creation event, we completely
|
||||
lose the user's actual read position in a room whenever they use this feature.
|
||||
* Read receipts could be allowed to go "backwards" to restore notification
|
||||
counts, though this is likely to be riddled with bugs and unexpected
|
||||
behaviour for users. It's better for everyone to keep read receipts linearly
|
||||
progressing forwards.
|
||||
|
||||
## Security considerations
|
||||
|
||||
None.
|
||||
|
||||
## Unstable prefix
|
||||
|
||||
While this feature is not yet fully specced, implementers can use the `com.famedly.marked_unread` room
|
||||
account data type.
|
||||
|
||||
Implementations using this unstable prefix in a released version should automatically migrate
|
||||
user's unread rooms to `m.marked_unread` when this is released as stable.
|
||||
This ensures user's unread rooms are not lost.
|
||||
Loading…
Reference in New Issue