forked from MirrorHub/synapse
		
	Send room name and first alias in notification poke.
This commit is contained in:
		
					parent
					
						
							
								e3e2fc3255
							
						
					
				
			
			
				commit
				
					
						2ca2dbc821
					
				
			
		
					 3 changed files with 61 additions and 3 deletions
				
			
		synapse
|  | @ -61,6 +61,19 @@ class Pusher(object): | |||
|             return False | ||||
|         return True | ||||
| 
 | ||||
|     @defer.inlineCallbacks | ||||
|     def get_context_for_event(self, ev): | ||||
|         name_aliases = yield self.store.get_room_name_and_aliases( | ||||
|             ev['room_id'] | ||||
|         ) | ||||
| 
 | ||||
|         ctx = {'aliases': name_aliases[1]} | ||||
|         if name_aliases[0] is not None: | ||||
|             ctx['name'] = name_aliases[0] | ||||
| 
 | ||||
|         defer.returnValue(ctx) | ||||
| 
 | ||||
| 
 | ||||
|     @defer.inlineCallbacks | ||||
|     def start(self): | ||||
|         if not self.last_token: | ||||
|  |  | |||
|  | @ -50,6 +50,7 @@ class HttpPusher(Pusher): | |||
|         self.data_minus_url.update(self.data) | ||||
|         del self.data_minus_url['url'] | ||||
| 
 | ||||
|     @defer.inlineCallbacks | ||||
|     def _build_notification_dict(self, event): | ||||
|         # we probably do not want to push for every presence update | ||||
|         # (we may want to be able to set up notifications when specific | ||||
|  | @ -57,9 +58,11 @@ class HttpPusher(Pusher): | |||
|         # Actually, presence events will not get this far now because we | ||||
|         # need to filter them out in the main Pusher code. | ||||
|         if 'event_id' not in event: | ||||
|             return None | ||||
|             defer.returnValue(None) | ||||
| 
 | ||||
|         return { | ||||
|         ctx = yield self.get_context_for_event(event) | ||||
| 
 | ||||
|         d = { | ||||
|             'notification': { | ||||
|                 'transition': 'new', | ||||
|                 # everything is new for now: we don't have read receipts | ||||
|  | @ -85,9 +88,16 @@ class HttpPusher(Pusher): | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if len(ctx['aliases']): | ||||
|             d['notification']['roomAlias'] = ctx['aliases'][0] | ||||
|         if 'name' in ctx: | ||||
|             d['notification']['roomName'] = ctx['name'] | ||||
| 
 | ||||
|         defer.returnValue(d) | ||||
| 
 | ||||
|     @defer.inlineCallbacks | ||||
|     def dispatch_push(self, event): | ||||
|         notification_dict = self._build_notification_dict(event) | ||||
|         notification_dict = yield self._build_notification_dict(event) | ||||
|         if not notification_dict: | ||||
|             defer.returnValue([]) | ||||
|         try: | ||||
|  |  | |||
|  | @ -384,6 +384,41 @@ class DataStore(RoomMemberStore, RoomStore, | |||
|         events = yield self._parse_events(results) | ||||
|         defer.returnValue(events) | ||||
| 
 | ||||
|     @defer.inlineCallbacks | ||||
|     def get_room_name_and_aliases(self, room_id): | ||||
|         del_sql = ( | ||||
|             "SELECT event_id FROM redactions WHERE redacts = e.event_id " | ||||
|             "LIMIT 1" | ||||
|         ) | ||||
| 
 | ||||
|         sql = ( | ||||
|             "SELECT e.*, (%(redacted)s) AS redacted FROM events as e " | ||||
|             "INNER JOIN current_state_events as c ON e.event_id = c.event_id " | ||||
|             "INNER JOIN state_events as s ON e.event_id = s.event_id " | ||||
|             "WHERE c.room_id = ? " | ||||
|         ) % { | ||||
|             "redacted": del_sql, | ||||
|         } | ||||
| 
 | ||||
|         sql += " AND (s.type = 'm.room.name' AND s.state_key = '')" | ||||
|         sql += " OR s.type = 'm.room.aliases'" | ||||
|         args = (room_id,) | ||||
| 
 | ||||
|         results = yield self._execute_and_decode(sql, *args) | ||||
| 
 | ||||
|         events = yield self._parse_events(results) | ||||
| 
 | ||||
|         name = None | ||||
|         aliases = [] | ||||
| 
 | ||||
|         for e in events: | ||||
|             if e.type == 'm.room.name': | ||||
|                 name = e.content['name'] | ||||
|             elif e.type == 'm.room.aliases': | ||||
|                 aliases.extend(e.content['aliases']) | ||||
| 
 | ||||
|         defer.returnValue((name, aliases)) | ||||
| 
 | ||||
|     @defer.inlineCallbacks | ||||
|     def _get_min_token(self): | ||||
|         row = yield self._execute( | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue