Open
Description
Here I will collect all information around implementing broadcast channels, similar to the ones known from Telegram/WhatsApp. As oppsosed to Telegram/WhatsApp, channels will be end-to-end encrypted in Delta Chat. Some other features known from Telegram/WhatsApp will be missing.
Implementation
Show broadcast channels in their own, proper "Channel" chat
Click here to show Core work (#6901, #6975, #6983, #6984, #7007)
- Add new chat type
InBroadcastChannel
andOutBroadcastChannel
for incoming / outgoing channels, where the former is similar to aMailinglist
and the latter is similar to aBroadcast
(which is removed)- Consideration for naming:
InChannel
/OutChannel
(without "broadcast") would be shorter, but less greppable because we already have a lot of occurences ofchannel
in the code. Consistently calling themBcChannel
/bc_channel
in the code would be both short and greppable, but a bit arcane when reading it at first. Opinions are welcome; if I hear none, I'll keep withBroadcastChannel
.
- Consideration for naming:
- api: Add create_broadcast_channel(), deprecate create_broadcast_list() (or
create_channel()
/create_bc_channel()
if we decide to switch)- Adjust code comments to match the new behavior.
- ASK Desktop developers what they use
is_broadcast
field for, and whether it should be true for both outgoing & incoming channels (or look it up myself)- I added
is_out_broadcast_channel
, and deprecatedis_broadcast
, for now
- I added
- When the user changes the broadcast channel name, immediately show this change on receiving devices
- Allow to change brodacast channel avatar, and immediately apply it on the receiving device
- Make it possible to block InBroadcastChannel
- Make it possible to set the avatar of an OutgoingChannel, and apply it on the receiving side
- DECIDE whether we still want to use the broadcast icon as the default icon or whether we want to use the letter-in-a-circle
- We decided to use the letter-in-a-circle for now, because it's easier to implement, and I need to stay in the time plan
- chat.rs: Return an error if the user tries to modify a
InBroadcastChannel
- Add automated regression tests
- Grep for
broadcast
and see whether there is any other work I need to do - Bug: Don't show
~
in front of the sender's same in broadcast lists
UI work:
- Android: Show channels in a proper "Channel" chat deltachat/deltachat-android#3783, fix: Small channel fixes deltachat/deltachat-android#3807
- Desktop: Adapt to new Broadcast Channel chat types deltachat/deltachat-desktop#5258
- iOS: Adapt to new Broadcast Channel chat types deltachat/deltachat-ios#2762
UI Testing:
- Creating a channel
- Adding/removing members from a channel
- Set a channel avatar, and check that receivers see it
- Change the channel name, and check that receivers see it
- On the receiving side of a channel, check that it's not possible to send a message
- On the receiving side of a channel, check that it's not possible to change the name/avatar - neither by clicking on "Edit" in the menu, nor by enlarging the avatar and then clicking "Edit")
- On the receiving side of a channel, check that it's possible to block the chat
- On the sending side of a channel, check that it's possible to add and remove members, and that the shown texts are correct (e.g. "Remove X from Channel?" instead of "Remove X from Group?")
- Both on the receiving and sending side of a channel:
- In that chat, open the 3-dots menu, and check that things look fine
- In the chat, check that the subtitle is correct
- Open the profile page for a channel, and check that things look fine
- Check that ephemeral messages actually disappear
Symmetrically encrypt broadcast channels
Channels need to be symmetrically encrypted, because if we encrypted them asymetrically, like we do for all other messages:
- with some technical expertise, it would be possible to find out who the other recipients are
- when there are a lot of recipients, the messages would be very big.
This will need a lot of work (like new QR codes); I'm currently in the mode of experimenting with symmetric encryption, and implementing some things in #6995.
- Talk to some PGP experts that the general idea is fine