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.
This commit is contained in:
nico 2020-11-18 17:50:29 +01:00 committed by Geno
parent c42b0f8a51
commit eaad51ad1a
1 changed files with 16 additions and 5 deletions

View File

@ -60,6 +60,16 @@ class EjabberdApiCalls(EjabberdApi):
return None 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): def fetch_onlineuser(self):
tmp = self.cmd("connected_users_info", {}) tmp = self.cmd("connected_users_info", {})
if "connected_users_info" not in tmp: if "connected_users_info" not in tmp:
@ -141,12 +151,13 @@ class EjabberdApiCalls(EjabberdApi):
def fetch_muc_count(self, vhost=None, muc_host="conference"): def fetch_muc_count(self, vhost=None, muc_host="conference"):
host = "global" 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}) 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: if "rooms" in result:
return len(result["rooms"]) return len(result["rooms"])
return len(result) return len(result)