From eaad51ad1a120f292277b4b6f6595251818d0860 Mon Sep 17 00:00:00 2001 From: nico Date: Wed, 18 Nov 2020 17:50:29 +0100 Subject: [PATCH] fix: different muc hosts failure + add muc room list parser * update fetch_muc method to utilize room list parser This method scales lineraly. Therefore this is only a temporary fix until we find a better solution. --- calls.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/calls.py b/calls.py index 94e8dde..89a2a22 100644 --- a/calls.py +++ b/calls.py @@ -60,6 +60,16 @@ class EjabberdApiCalls(EjabberdApi): return None + # ghetto method until we have a better solution + @staticmethod + def _parse_muc_count(vhost, data: (list, dict)) -> int: + tmp = 0 + + for el in list(map(lambda x: x.split(sep="@"), data)): + if vhost in el[1]: + tmp += 1 + return tmp + def fetch_onlineuser(self): tmp = self.cmd("connected_users_info", {}) if "connected_users_info" not in tmp: @@ -141,12 +151,13 @@ class EjabberdApiCalls(EjabberdApi): def fetch_muc_count(self, vhost=None, muc_host="conference"): host = "global" - if vhost is not None: - if self.verstring.major >= 19: - host = ".".join([muc_host, vhost]) - else: - host = vhost result = self.cmd("muc_online_rooms", {"host": host}) + if vhost is not None: + # if self.verstring.major >= 19: + # host = ".".join([muc_host, vhost]) + # else: + # host = vhost + return self._parse_muc_count(vhost, result) if "rooms" in result: return len(result["rooms"]) return len(result)