Merge pull request #965 from matrix-org/kegan/comment-push-actions-fn
Comment get_unread_push_actions_for_user_in_range function
This commit is contained in:
commit
328ad6901d
|
@ -119,9 +119,28 @@ class EventPushActionsStore(SQLBaseStore):
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def get_unread_push_actions_for_user_in_range(self, user_id,
|
def get_unread_push_actions_for_user_in_range(self, user_id,
|
||||||
min_stream_ordering,
|
min_stream_ordering,
|
||||||
max_stream_ordering=None,
|
max_stream_ordering,
|
||||||
limit=20):
|
limit=20):
|
||||||
|
"""Get a list of the most recent unread push actions for a given user,
|
||||||
|
within the given stream ordering range.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
user_id (str)
|
||||||
|
min_stream_ordering
|
||||||
|
max_stream_ordering
|
||||||
|
limit (int)
|
||||||
|
Returns:
|
||||||
|
A promise which resolves to a list of dicts with the keys "event_id",
|
||||||
|
"room_id", "stream_ordering", "actions", "received_ts".
|
||||||
|
The list will have between 0~limit entries.
|
||||||
|
"""
|
||||||
|
# find rooms that have a read receipt in them and return the most recent
|
||||||
|
# push actions
|
||||||
def get_after_receipt(txn):
|
def get_after_receipt(txn):
|
||||||
|
# XXX: Do we really need to GROUP BY user_id on the inner SELECT?
|
||||||
|
# XXX: NATURAL JOIN obfuscates which columns are being joined on the
|
||||||
|
# inner SELECT (the room_id and event_id), can we
|
||||||
|
# INNER JOIN ... USING instead?
|
||||||
sql = (
|
sql = (
|
||||||
"SELECT ep.event_id, ep.room_id, ep.stream_ordering, ep.actions, "
|
"SELECT ep.event_id, ep.room_id, ep.stream_ordering, ep.actions, "
|
||||||
"e.received_ts "
|
"e.received_ts "
|
||||||
|
@ -160,7 +179,12 @@ class EventPushActionsStore(SQLBaseStore):
|
||||||
"get_unread_push_actions_for_user_in_range", get_after_receipt
|
"get_unread_push_actions_for_user_in_range", get_after_receipt
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# There are rooms with push actions in them but you don't have a read receipt in
|
||||||
|
# them e.g. rooms you've been invited to, so get push actions for rooms which do
|
||||||
|
# not have read receipts in them too.
|
||||||
def get_no_receipt(txn):
|
def get_no_receipt(txn):
|
||||||
|
# XXX: Does the inner SELECT really need to select from the events table?
|
||||||
|
# We're just extracting the room_id, so isn't receipts_linearized enough?
|
||||||
sql = (
|
sql = (
|
||||||
"SELECT ep.event_id, ep.room_id, ep.stream_ordering, ep.actions,"
|
"SELECT ep.event_id, ep.room_id, ep.stream_ordering, ep.actions,"
|
||||||
" e.received_ts"
|
" e.received_ts"
|
||||||
|
@ -198,7 +222,7 @@ class EventPushActionsStore(SQLBaseStore):
|
||||||
# Now sort it so it's ordered correctly, since currently it will
|
# Now sort it so it's ordered correctly, since currently it will
|
||||||
# contain results from the first query, correctly ordered, followed
|
# contain results from the first query, correctly ordered, followed
|
||||||
# by results from the second query, but we want them all ordered
|
# by results from the second query, but we want them all ordered
|
||||||
# by received_ts
|
# by received_ts (most recent first)
|
||||||
notifs.sort(key=lambda r: -(r['received_ts'] or 0))
|
notifs.sort(key=lambda r: -(r['received_ts'] or 0))
|
||||||
|
|
||||||
# Now return the first `limit`
|
# Now return the first `limit`
|
||||||
|
|
Loading…
Reference in New Issue