From dd8e6020d866008ca445a56e1662249066bafee8 Mon Sep 17 00:00:00 2001 From: "Olivier Wilkinson (reivilibre)" Date: Tue, 27 Aug 2019 14:17:04 +0100 Subject: [PATCH] For user stats, handle other membership transitions properly. Signed-off-by: Olivier Wilkinson (reivilibre) --- synapse/handlers/stats.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/synapse/handlers/stats.py b/synapse/handlers/stats.py index b3d59fde05..f065d88a7d 100644 --- a/synapse/handlers/stats.py +++ b/synapse/handlers/stats.py @@ -217,20 +217,24 @@ class StatsHandler(StateDeltasHandler): raise ValueError(err) user_id = state_key - if self.is_mine_id(user_id) and membership in ( - Membership.JOIN, - Membership.LEAVE, - ) and prev_membership != membership: - # update user_stats as it's one of our users - public = yield self._is_public_room(room_id) - - field = "public_rooms" if public else "private_rooms" - delta = +1 if membership == Membership.JOIN else -1 - - yield self.store.update_stats_delta( - now, "user", user_id, {field: delta} + if self.is_mine_id(user_id): + # this accounts for transitions like leave → ban and so on. + has_changed_joinedness = ( + (prev_membership == Membership.JOIN) != + (membership == Membership.JOIN) ) + if has_changed_joinedness: + # update user_stats as it's one of our users + public = yield self._is_public_room(room_id) + + field = "public_rooms" if public else "private_rooms" + delta = +1 if membership == Membership.JOIN else -1 + + yield self.store.update_stats_delta( + now, "user", user_id, {field: delta} + ) + elif typ == EventTypes.Create: # Newly created room. Add it with all blank portions. yield self.store.update_room_state(