def __handlePresence(self, jid, resource): jid = ContactJID(jid) dbID = jid.getDatabaseID() if not dbID: return else: user = self.usersStorage.getUser(dbID, PROTO_TYPE.XMPP) if resource.presence == PRESENCE.UNAVAILABLE: if user and not user.isCurrentPlayer(): user.update(jid=jid, resource=None, clanInfo=resource.getClanInfo()) g_logOutput.debug(_LOG.RESOURCE, 'Resource is removed', user.getName(), jid.getResource(), resource) elif resource.presence != PRESENCE.UNKNOWN: if not user: user = entities.XMPPUserEntity(dbID) self.usersStorage.setUser(user) if user.isCurrentPlayer(): self.playerCtx.setBanInfo(resource.getBanInfo()) else: user.update(jid=jid, resource=resource, clanInfo=resource.getClanInfo()) g_logOutput.debug(_LOG.RESOURCE, 'Resource is set', user.getName(), jid.getResource(), resource) if user: g_messengerEvents.users.onUserStatusUpdated(user) return
def _validate(self): self._reset() ignoreSubRq = not g_settings.userPrefs.receiveFriendshipRequest getter = self.usersStorage.getUser setter = self.usersStorage.setUser while self._subs: jid, name, _, wgexts = self._subs.pop(0) dbID, clanInfo, isProcessed = jid.getDatabaseID(), wgexts.clan, False contact = getter(dbID, PROTO_TYPE.XMPP) if not contact: contact = entities.XMPPUserEntity(dbID, name=name, clanInfo=clanInfo, item=SubPendingItem(jid)) setter(contact) if ignoreSubRq: isProcessed = self._cancel(jid, contact) else: contact.removeTags(_INBOUND_SUB_REMOVE_TAGS) contact.update(clanInfo=clanInfo) if contact.isCurrentPlayer(): continue itemType = contact.getItemType() if itemType in XMPP_ITEM_TYPE.ROSTER_ITEMS: isProcessed = self._approve(jid, contact) elif ignoreSubRq: isProcessed = self._cancel(jid, contact) elif itemType in XMPP_ITEM_TYPE.PERSISTENT_BLOCKING_LIST: isProcessed = self._cancel(jid, contact) elif itemType in XMPP_ITEM_TYPE.SUB_PENDING_ITEMS: isProcessed = self._ignore(contact) else: contact.update(item=SubPendingItem(jid)) if not isProcessed: contact.removeTags({USER_TAG.WO_NOTIFICATION}) self._newRqs.append(contact)
def _syncRosterItem(storage, jid, name, groups, sub=None, clanInfo=None): dbID = jid.getDatabaseID() user = storage.getUser(dbID, PROTO_TYPE.XMPP) if user: if user.isCurrentPlayer(): return None if user.getItemType() in XMPP_ITEM_TYPE.ROSTER_ITEMS: user.update(name=name, groups=groups, sub=sub, trusted=True, clanInfo=clanInfo) else: user.update(name=name, clanInfo=clanInfo, item=RosterItem( jid, groups, sub=sub, resources=user.getItem().getResources())) else: user = entities.XMPPUserEntity(dbID, name=name, clanInfo=clanInfo, item=RosterItem(jid, groups, sub=sub)) storage.setUser(user) return user
def setMuted(self, dbID, name): contact = self.usersStorage.getUser(dbID) if not contact: contact = entities.XMPPUserEntity(dbID, name=name, tags={USER_TAG.MUTED}) self.usersStorage.setUser(contact) else: contact.addTags({USER_TAG.MUTED}) g_messengerEvents.users.onUserActionReceived(USER_ACTION_ID.MUTE_SET, contact, False) return (True, None)
def _doRun(self, client): user = self._getUser() if not user: contact = entities.XMPPUserEntity(self._jid.getDatabaseID(), name=self._name) self.usersStorage.setUser(contact) user = _syncTmpBlockItem(self.usersStorage, self._jid, name=self._name) if user: g_logOutput.debug(CLIENT_LOG_AREA.BLOCK_LIST, 'Temporary block item is added', self._jid, {'name': self._name}) self._doNotify(USER_ACTION_ID.TMP_IGNORED_ADDED, user) self._doNotify(USER_ACTION_ID.MUTE_SET, user, False) self._result = TASK_RESULT.REMOVE
def __us_onRestoredFromCache(self, stateGenerator): if not g_settings.server.XMPP.isEnabled(): return if stateGenerator: setUser = self.usersStorage.setUser isInited = self.__seq.isInited() for dbID, state in stateGenerator(PROTO_TYPE.XMPP): contact = entities.XMPPUserEntity(dbID) result = contact.setPersistentState(state) if result and (not isInited or contact.getItemType() in XMPP_ITEM_TYPE.SUB_PENDING_ITEMS): setUser(contact) g_messengerEvents.users.onUsersListReceived({USER_TAG.CACHED})
def setMuted(self, dbID, name): error = self._checkCooldown(CLIENT_ACTION_ID.SET_MUTE) if error: return (False, error) else: contact = self.usersStorage.getUser(dbID) if not contact: contact = entities.XMPPUserEntity(dbID, name=name, tags={USER_TAG.MUTED}) self.usersStorage.setUser(contact) else: contact.addTags({USER_TAG.MUTED}) g_messengerEvents.users.onUserActionReceived(USER_ACTION_ID.MUTE_SET, contact) self.__cooldown.process(CLIENT_ACTION_ID.SET_MUTE) return (True, None)
def _syncBlockItem(storage, jid, name='', dbID=0, clanInfo=None): dbID = jid.getDatabaseID() user = storage.getUser(dbID, PROTO_TYPE.XMPP) if user: if user.isCurrentPlayer(): return None if user.getItemType() == XMPP_ITEM_TYPE.PERSISTENT_BLOCKING_LIST: user.update(name=name, clanInfo=clanInfo, trusted=True) else: user.update(name=name, clanInfo=clanInfo, item=BlockItem(jid)) user.addTags({USER_TAG.MUTED}) else: user = entities.XMPPUserEntity(dbID, name=name, clanInfo=clanInfo, item=BlockItem(jid), tags={USER_TAG.MUTED}) storage.setUser(user) return user