Merge pull request #554 from matrix-org/erikj/event_push

Change event_push_actions_rm_tokens schema
pull/558/head
Erik Johnston 2016-02-03 15:02:47 +00:00
commit 8450114098
5 changed files with 67 additions and 21 deletions

View File

@ -706,10 +706,8 @@ class SyncHandler(BaseHandler):
)
if notifs is not None:
unread_notifications["notification_count"] = len(notifs)
unread_notifications["highlight_count"] = len([
1 for notif in notifs if _action_has_highlight(notif["actions"])
])
unread_notifications["notification_count"] = notifs["notify_count"]
unread_notifications["highlight_count"] = notifs["highlight_count"]
logger.debug("Room sync: %r", room_sync)

View File

@ -316,7 +316,7 @@ class Pusher(object):
r.room_id, self.user_id, last_unread_event_id
)
)
badge += len(notifs)
badge += notifs["notify_count"]
defer.returnValue(badge)

View File

@ -37,7 +37,11 @@ class EventPushActionsStore(SQLBaseStore):
'event_id': event.event_id,
'user_id': uid,
'profile_tag': profile_tag,
'actions': json.dumps(actions)
'actions': json.dumps(actions),
'stream_ordering': event.internal_metadata.stream_ordering,
'topological_ordering': event.depth,
'notif': 1,
'highlight': 1 if _action_has_highlight(actions) else 0,
})
def f(txn):
@ -74,26 +78,28 @@ class EventPushActionsStore(SQLBaseStore):
topological_ordering = results[0][1]
sql = (
"SELECT ea.event_id, ea.actions"
" FROM event_push_actions ea, events e"
" WHERE ea.room_id = e.room_id"
" AND ea.event_id = e.event_id"
" AND ea.user_id = ?"
" AND ea.room_id = ?"
"SELECT sum(notif), sum(highlight)"
" FROM event_push_actions ea"
" WHERE"
" user_id = ?"
" AND room_id = ?"
" AND ("
" e.topological_ordering > ?"
" OR (e.topological_ordering = ? AND e.stream_ordering > ?)"
" topological_ordering > ?"
" OR (topological_ordering = ? AND stream_ordering > ?)"
")"
)
txn.execute(sql, (
user_id, room_id,
topological_ordering, topological_ordering, stream_ordering
)
)
return [
{"event_id": row[0], "actions": json.loads(row[1])}
for row in txn.fetchall()
]
))
row = txn.fetchone()
if row:
return {
"notify_count": row[0] or 0,
"highlight_count": row[1] or 0,
}
else:
return {"notify_count": 0, "highlight_count": 0}
ret = yield self.runInteraction(
"get_unread_event_push_actions_by_room",
@ -117,3 +123,14 @@ class EventPushActionsStore(SQLBaseStore):
"remove_push_actions_for_event_id",
f
)
def _action_has_highlight(actions):
for action in actions:
try:
if action.get("set_tweak", None) == "highlight":
return action.get("value", True)
except AttributeError:
pass
return False

View File

@ -25,7 +25,7 @@ logger = logging.getLogger(__name__)
# Remember to update this number every time a change is made to database
# schema files, so the users will be informed on server restarts.
SCHEMA_VERSION = 28
SCHEMA_VERSION = 29
dir_path = os.path.abspath(os.path.dirname(__file__))

View File

@ -0,0 +1,31 @@
/* Copyright 2016 OpenMarket Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
ALTER TABLE event_push_actions ADD COLUMN topological_ordering BIGINT;
ALTER TABLE event_push_actions ADD COLUMN stream_ordering BIGINT;
ALTER TABLE event_push_actions ADD COLUMN notif SMALLINT;
ALTER TABLE event_push_actions ADD COLUMN highlight SMALLINT;
UPDATE event_push_actions SET stream_ordering = (
SELECT stream_ordering FROM events WHERE event_id = event_push_actions.event_id
), topological_ordering = (
SELECT topological_ordering FROM events WHERE event_id = event_push_actions.event_id
);
UPDATE event_push_actions SET notif = 1, highlight = 0;
CREATE INDEX event_push_actions_rm_tokens on event_push_actions(
user_id, room_id, topological_ordering, stream_ordering
);