Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mrDoctorWho/vk4xmpp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Smith <mrdoctorwho@helldev.net>2019-02-09 12:03:04 +0300
committerJohn Smith <mrdoctorwho@helldev.net>2019-02-09 12:03:04 +0300
commita9d965cfba773043a77651e10e9059ab5e1d3473 (patch)
tree69bb0b46dbbb5a44e76280469edeae02c9ee234b
parentb40984006f9410d1fc4db5df30dfd9d325753721 (diff)
fix groupchats behaving wrong when user had a status
There was a typo making it impossible to receive presences in the groupchat presence handler if user had an XMPP status
-rw-r--r--extensions/groupchats.py3
-rw-r--r--modules/mod_groupchat_prs.py14
2 files changed, 9 insertions, 8 deletions
diff --git a/extensions/groupchats.py b/extensions/groupchats.py
index 027ffa8..04cbaf8 100644
--- a/extensions/groupchats.py
+++ b/extensions/groupchats.py
@@ -291,7 +291,6 @@ class Chat(object):
everyone = all_users + self.users.keys()
# how would it get in there?
if TransportID in everyone:
- logger.debug("removing transport from groupchat users list")
everyone.remove(TransportID)
if userObject.vk.getUserID() in everyone:
everyone.remove(userObject.vk.getUserID())
@@ -300,7 +299,7 @@ class Chat(object):
jid = vk2xmpp(user)
userId = int(user)
existingUser = self.users.get(userId)
- if not existingUser or existingUser.get("name") == "undefined":
+ if not existingUser:
logger.debug("groupchats: user %s has joined the chat %s (jid: %s)",
user, self.jid, userObject.source)
# TODO: Transport MUST NOT request the name for each user it sees.
diff --git a/modules/mod_groupchat_prs.py b/modules/mod_groupchat_prs.py
index a0d7320..3f0b259 100644
--- a/modules/mod_groupchat_prs.py
+++ b/modules/mod_groupchat_prs.py
@@ -60,7 +60,7 @@ def handleChatPresences(source, prs):
prs: xmpp.Presence object
"""
jid = prs.getJid() or ""
- if "@" in jid:
+ if "@" in jid and prs.getType() != "unavailable":
user = Chat.getUserObject(source)
if user and source in getattr(user, "chats", {}):
chat = user.chats[source]
@@ -81,11 +81,13 @@ def handleChatPresences(source, prs):
# TODO: don't rewrite it every time we get a presence
if jid.split("/")[0] == user.source:
- chat.owner_nickname = prs.getFrom().getResource()
- runDatabaseQuery("update groupchats set nick=? where jid=? ", (chat.owner_nickname, source), set=True)
+ nick = prs.getFrom().getResource()
+ chat.owner_nickname = nick
+ runDatabaseQuery("update groupchats set nick=? where jid=? ", (nick, source), set=True)
+ logger.debug("mod_groupchat_prs: setting user nickname to: %s for chat %s and user: %s", nick, source, user.source)
raise xmpp.NodeProcessed()
- elif user and prs.getType() != "unavailable":
+ elif user:
chat = createChat(user, source)
chat.invited = True # assume the user's joined themselves
@@ -100,8 +102,8 @@ def presence_handler(cl, prs):
prs: the xmpp.Presence object
"""
source = prs.getFrom().getStripped()
- status = prs.getStatus()
- if status or prs.getType() == "error":
+ code = prs.getStatusCode()
+ if code or prs.getType() == "error":
handleChatErrors(source, prs)
handleChatPresences(source, prs) # It won't be called if handleChatErrors was called in the first time