Comment get_unread_push_actions_for_user_in_range function
							parent
							
								
									591ad2268c
								
							
						
					
					
						commit
						370135ad0b
					
				|  | @ -119,9 +119,28 @@ class EventPushActionsStore(SQLBaseStore): | |||
|     @defer.inlineCallbacks | ||||
|     def get_unread_push_actions_for_user_in_range(self, user_id, | ||||
|                                                   min_stream_ordering, | ||||
|                                                   max_stream_ordering=None, | ||||
|                                                   max_stream_ordering, | ||||
|                                                   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): | ||||
|             # 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 = ( | ||||
|                 "SELECT ep.event_id, ep.room_id, ep.stream_ordering, ep.actions, " | ||||
|                 "e.received_ts " | ||||
|  | @ -160,7 +179,12 @@ class EventPushActionsStore(SQLBaseStore): | |||
|             "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): | ||||
|             # 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 = ( | ||||
|                 "SELECT ep.event_id, ep.room_id, ep.stream_ordering, ep.actions," | ||||
|                 " e.received_ts" | ||||
|  | @ -198,7 +222,7 @@ class EventPushActionsStore(SQLBaseStore): | |||
|         # Now sort it so it's ordered correctly, since currently it will | ||||
|         # contain results from the first query, correctly ordered, followed | ||||
|         # 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)) | ||||
| 
 | ||||
|         # Now return the first `limit` | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Kegan Dougal
						Kegan Dougal