forked from MirrorHub/synapse
Handle room invites in email notifs
This commit is contained in:
parent
5367708236
commit
ebbabc4986
3 changed files with 42 additions and 13 deletions
|
@ -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"
|
||||||
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):
|
||||||
|
|
||||||
@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):
|
||||||
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):
|
||||||
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):
|
||||||
# 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):
|
||||||
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):
|
||||||
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:
|
||||||
|
|
Loading…
Reference in a new issue