handle fragments correctly on mxc URLs.
switch to vector.im permalinks as matrix.to isn't ready yet. merge overlapping notifications together. give one message of context after a notification (in the unlikely event it exists, but it's possible thanks to throttling). include name of app in mail templates
This commit is contained in:
parent
1cf5c379cb
commit
ce81ccb063
|
@ -35,16 +35,20 @@ import bleach
|
|||
import time
|
||||
import urllib
|
||||
|
||||
import logging
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
MESSAGE_FROM_PERSON_IN_ROOM = "You have a message from %(person)s in the %s room"
|
||||
MESSAGE_FROM_PERSON = "You have a message from %(person)s"
|
||||
MESSAGES_FROM_PERSON = "You have messages from %(person)s"
|
||||
MESSAGES_IN_ROOM = "There are some messages for you in the %(room)s room"
|
||||
MESSAGES_IN_ROOMS = "Here are some messages you may have missed"
|
||||
INVITE_FROM_PERSON_TO_ROOM = "%(person)s has invited you to join the %(room)s room"
|
||||
INVITE_FROM_PERSON = "%(person)s has invited you to chat"
|
||||
|
||||
CONTEXT_BEFORE = 0
|
||||
MESSAGE_FROM_PERSON_IN_ROOM = "You have a message on %%app%% from %(person)s in the %s room..."
|
||||
MESSAGE_FROM_PERSON = "You have a message on %%app%% from %(person)s..."
|
||||
MESSAGES_FROM_PERSON = "You have messages on %%app%% from %(person)s..."
|
||||
MESSAGES_IN_ROOM = "There are some messages on %%app%% for you in the %(room)s room..."
|
||||
MESSAGES_IN_ROOMS = "Here are some messages on %%app%% you may have missed..."
|
||||
INVITE_FROM_PERSON_TO_ROOM = "%(person)s has invited you to join the %(room)s room on %%app%%..."
|
||||
INVITE_FROM_PERSON = "%(person)s has invited you to chat on %%app%%..."
|
||||
|
||||
CONTEXT_BEFORE = 1
|
||||
CONTEXT_AFTER = 1
|
||||
|
||||
# From https://github.com/matrix-org/matrix-react-sdk/blob/master/src/HtmlUtils.js
|
||||
ALLOWED_TAGS = [
|
||||
|
@ -181,7 +185,25 @@ class Mailer(object):
|
|||
notifvars = yield self.get_notif_vars(
|
||||
n, user_id, notif_events[n['event_id']], room_state
|
||||
)
|
||||
room_vars['notifs'].append(notifvars)
|
||||
|
||||
# merge overlapping notifs together.
|
||||
# relies on the notifs being in chronological order.
|
||||
merge = False
|
||||
if room_vars['notifs'] and 'messages' in room_vars['notifs'][-1]:
|
||||
prev_messages = room_vars['notifs'][-1]['messages']
|
||||
for message in notifvars['messages']:
|
||||
pm = filter(lambda pm: pm['id'] == message['id'], prev_messages)
|
||||
if pm:
|
||||
if not message["is_historical"]:
|
||||
pm[0]["is_historical"] = False
|
||||
merge = True
|
||||
elif merge:
|
||||
# we're merging, so append any remaining messages
|
||||
# in this notif to the previous one
|
||||
prev_messages.append(message)
|
||||
|
||||
if not merge:
|
||||
room_vars['notifs'].append(notifvars)
|
||||
|
||||
defer.returnValue(room_vars)
|
||||
|
||||
|
@ -189,7 +211,7 @@ class Mailer(object):
|
|||
def get_notif_vars(self, notif, user_id, notif_event, room_state):
|
||||
results = yield self.store.get_events_around(
|
||||
notif['room_id'], notif['event_id'],
|
||||
before_limit=CONTEXT_BEFORE, after_limit=0
|
||||
before_limit=CONTEXT_BEFORE, after_limit=CONTEXT_AFTER
|
||||
)
|
||||
|
||||
ret = {
|
||||
|
@ -226,6 +248,7 @@ class Mailer(object):
|
|||
ret = {
|
||||
"msgtype": event.content["msgtype"],
|
||||
"is_historical": event.event_id != notif['event_id'],
|
||||
"id": event.event_id,
|
||||
"ts": event.origin_server_ts,
|
||||
"sender_name": sender_name,
|
||||
"sender_avatar_url": sender_avatar_url,
|
||||
|
@ -329,10 +352,12 @@ class Mailer(object):
|
|||
return MESSAGES_IN_ROOMS
|
||||
|
||||
def make_room_link(self, room_id):
|
||||
return "https://matrix.to/%s" % (room_id,)
|
||||
# XXX: matrix.to
|
||||
return "https://vector.im/#/room/%s" % (room_id,)
|
||||
|
||||
def make_notif_link(self, notif):
|
||||
return "https://matrix.to/%s/%s" % (
|
||||
# XXX: matrix.to
|
||||
return "https://vector.im/#/room/%s/%s" % (
|
||||
notif['room_id'], notif['event_id']
|
||||
)
|
||||
|
||||
|
@ -342,16 +367,22 @@ class Mailer(object):
|
|||
def mxc_to_http_filter(self, value, width, height, resize_method="crop"):
|
||||
if value[0:6] != "mxc://":
|
||||
return ""
|
||||
|
||||
serverAndMediaId = value[6:]
|
||||
if '#' in serverAndMediaId:
|
||||
(serverAndMediaId, fragment) = serverAndMediaId.split('#', 1)
|
||||
fragment = "#" + fragment
|
||||
|
||||
params = {
|
||||
"width": width,
|
||||
"height": height,
|
||||
"method": resize_method,
|
||||
}
|
||||
return "%s_matrix/media/v1/thumbnail/%s?%s" % (
|
||||
return "%s_matrix/media/v1/thumbnail/%s?%s%s" % (
|
||||
self.hs.config.public_baseurl,
|
||||
serverAndMediaId,
|
||||
urllib.urlencode(params)
|
||||
urllib.urlencode(params),
|
||||
fragment or "",
|
||||
)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue