Send room name and first alias in notification poke.
parent
e3e2fc3255
commit
2ca2dbc821
|
@ -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…
Reference in New Issue