element-hq / synapse

Synapse: Matrix homeserver written in Python/Twisted.
https://element-hq.github.io/synapse
GNU Affero General Public License v3.0
1.42k stars 164 forks source link

Native sliding sync: add `membership` field to rooms #17838

Open jmartinesp opened 7 hours ago

jmartinesp commented 7 hours ago

Description:

At the moment, to check if a room is a joined, invited or knocked one we need to do something like:

Does it have invite_state?

  1. Yes: it can be either an invited or knocked room. We need to check the membership state event for our user, if any. 1.1. There is a knocked membership event: it's a knocked room. 1.2. There is either an invite membership event: it's an invite. 1.3. No membership event, or an invalid one: assume it's an invite and there was some server error.
  2. No: assume it's a joined room.

That's kind of complex, it assumes several cases when we're not sure how to proceed and doesn't detail how we should differentiate between a joined room and a room with a left, kicked or banned membership (apparently, this would be another membership event check on branch 2 above).

We've discussed in chats a couple of times adding some membership field to the rooms so it's the server that tells us which membership we have in the room instead of the client having to make the decisions: it would simplify the work for clients a lot and also make sure we have consistent results between clients.

I'm adding this issue so we keep track of this suggestion.

MadLittleMods commented 5 hours ago

Sounds good to me. I was also tempted to add this field myself while implementing :+1:

It would be good to re-add your MSC comment as a discussion on the diff so people can discuss the idea in a resolvable thread.