Skip to content
Snippets Groups Projects
Commit ebbabc49 authored by David Baker's avatar David Baker
Browse files

Handle room invites in email notifs

parent 53677082
No related branches found
No related tags found
No related merge requests found
...@@ -13,9 +13,13 @@ ...@@ -13,9 +13,13 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
</div> </div>
<div> {% if room.invite %}
{% for notif in room.notifs %} <a href="{{ room.link }}">Join the conversation.</a>
{% include 'notif.html' with context %} {% else %}
{% endfor %} <div>
</div> {% for notif in room.notifs %}
{% include 'notif.html' with context %}
{% endfor %}
</div>
{% endif %}
</div> </div>
...@@ -39,6 +39,8 @@ MESSAGE_FROM_PERSON = "You have a message from %s" ...@@ -39,6 +39,8 @@ MESSAGE_FROM_PERSON = "You have a message from %s"
MESSAGES_FROM_PERSON = "You have messages from %s" MESSAGES_FROM_PERSON = "You have messages from %s"
MESSAGES_IN_ROOM = "There are some messages for you in the %s room" MESSAGES_IN_ROOM = "There are some messages for you in the %s room"
MESSAGES_IN_ROOMS = "Here are some messages you may have missed" MESSAGES_IN_ROOMS = "Here are some messages you may have missed"
INVITE_FROM_PERSON_TO_ROOM = "%s has invited you to join the %s room"
INVITE_FROM_PERSON = "%s has invited you to chat"
CONTEXT_BEFORE = 1 CONTEXT_BEFORE = 1
...@@ -148,17 +150,24 @@ class Mailer(object): ...@@ -148,17 +150,24 @@ class Mailer(object):
@defer.inlineCallbacks @defer.inlineCallbacks
def get_room_vars(self, room_id, user_id, notifs, notif_events, room_state): def get_room_vars(self, room_id, user_id, notifs, notif_events, room_state):
my_member_event = room_state[("m.room.member", user_id)]
is_invite = my_member_event.content["membership"] == "invite"
room_vars = { room_vars = {
"title": calculate_room_name(room_state, user_id), "title": calculate_room_name(room_state, user_id),
"hash": string_ordinal_total(room_id), # See sender avatar hash "hash": string_ordinal_total(room_id), # See sender avatar hash
"notifs": [], "notifs": [],
"invite": is_invite
} }
for n in notifs: if is_invite:
vars = yield self.get_notif_vars( room_vars["link"] = self.make_room_link(room_id)
n, user_id, notif_events[n['event_id']], room_state else:
) for n in notifs:
room_vars['notifs'].append(vars) vars = yield self.get_notif_vars(
n, user_id, notif_events[n['event_id']], room_state
)
room_vars['notifs'].append(vars)
defer.returnValue(room_vars) defer.returnValue(room_vars)
...@@ -235,6 +244,18 @@ class Mailer(object): ...@@ -235,6 +244,18 @@ class Mailer(object):
state_by_room[room_id], user_id, fallback_to_members=False state_by_room[room_id], user_id, fallback_to_members=False
) )
my_member_event = state_by_room[room_id][("m.room.member", user_id)]
if my_member_event.content["membership"] == "invite":
inviter_member_event = state_by_room[room_id][
("m.room.member", my_member_event.sender)
]
inviter_name = name_from_member_event(inviter_member_event)
if room_name is None:
return INVITE_FROM_PERSON % (inviter_name,)
else:
return INVITE_FROM_PERSON_TO_ROOM % (inviter_name, room_name)
sender_name = None sender_name = None
if len(notifs_by_room[room_id]) == 1: if len(notifs_by_room[room_id]) == 1:
# There is just the one notification, so give some detail # There is just the one notification, so give some detail
...@@ -242,6 +263,7 @@ class Mailer(object): ...@@ -242,6 +263,7 @@ class Mailer(object):
if ("m.room.member", event.sender) in state_by_room[room_id]: if ("m.room.member", event.sender) in state_by_room[room_id]:
state_event = state_by_room[room_id][("m.room.member", event.sender)] state_event = state_by_room[room_id][("m.room.member", event.sender)]
sender_name = name_from_member_event(state_event) sender_name = name_from_member_event(state_event)
if sender_name is not None and room_name is not None: if sender_name is not None and room_name is not None:
return MESSAGE_FROM_PERSON_IN_ROOM % (sender_name, room_name) return MESSAGE_FROM_PERSON_IN_ROOM % (sender_name, room_name)
elif sender_name is not None: elif sender_name is not None:
...@@ -268,6 +290,9 @@ class Mailer(object): ...@@ -268,6 +290,9 @@ class Mailer(object):
# Stuff's happened in multiple different rooms # Stuff's happened in multiple different rooms
return MESSAGES_IN_ROOMS return MESSAGES_IN_ROOMS
def make_room_link(self, room_id):
return "https://matrix.to/%s" % (room_id,)
def make_notif_link(self, notif): def make_notif_link(self, notif):
return "https://matrix.to/%s/%s" % ( return "https://matrix.to/%s/%s" % (
notif['room_id'], notif['event_id'] notif['room_id'], notif['event_id']
......
...@@ -52,6 +52,9 @@ def calculate_room_name(room_state, user_id, fallback_to_members=True): ...@@ -52,6 +52,9 @@ def calculate_room_name(room_state, user_id, fallback_to_members=True):
if len(the_aliases) > 0 and _looks_like_an_alias(the_aliases[0]): if len(the_aliases) > 0 and _looks_like_an_alias(the_aliases[0]):
return the_aliases[0] return the_aliases[0]
if not fallback_to_members:
return None
my_member_event = None my_member_event = None
if ("m.room.member", user_id) in room_state: if ("m.room.member", user_id) in room_state:
my_member_event = room_state[("m.room.member", user_id)] my_member_event = room_state[("m.room.member", user_id)]
...@@ -66,9 +69,6 @@ def calculate_room_name(room_state, user_id, fallback_to_members=True): ...@@ -66,9 +69,6 @@ def calculate_room_name(room_state, user_id, fallback_to_members=True):
else: else:
return "Room Invite" return "Room Invite"
if not fallback_to_members:
return None
# we're going to have to generate a name based on who's in the room, # we're going to have to generate a name based on who's in the room,
# so find out who is in the room that isn't the user. # so find out who is in the room that isn't the user.
if "m.room.member" in room_state_bytype: if "m.room.member" in room_state_bytype:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment