Пример #1
0
 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)
Пример #3
0
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)
Пример #5
0
 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})
Пример #7
0
 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