mirror of
https://mau.dev/maunium/synapse.git
synced 2024-10-01 01:36:05 -04:00
Merge pull request #554 from matrix-org/erikj/event_push
Change event_push_actions_rm_tokens schema
This commit is contained in:
commit
8450114098
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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__))
|
||||
|
||||
|
31
synapse/storage/schema/delta/29/push_actions.sql
Normal file
31
synapse/storage/schema/delta/29/push_actions.sql
Normal 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
|
||||
);
|
Loading…
Reference in New Issue
Block a user