def __handleIQ(self, iqID, iqType, pyGlooxTag): if iqID != self.__iqID: return else: result, error = self.__cached.copy(), None self.__cached.clear() self.__iqID = '' if iqType == IQ_TYPE.RESULT: handler = spa_resolver.SpaResolverHandler() getter = self.usersStorage.getUser setter = self.usersStorage.addUser errorOutput = g_logOutput.error for dbID, name, error in handler.handleTag(pyGlooxTag): if error: errorOutput(CLIENT_LOG_AREA.PY_WRAPPER, 'Item is invalid', dbID, name, error) continue user = getter(dbID) if not user: user = SharedUserEntity(dbID, name) setter(user) else: user.update(name=name) result[dbID] = name elif iqType == IQ_TYPE.ERROR: error = createServerIQError(pyGlooxTag) self.__doCallback(result=result, error=error) return
def __pe_onClanMembersListChanged(self): clanMembers = getattr(BigWorld.player(), 'clanMembers', {}) LOG_DEBUG('setClanMembersList', clanMembers) if not self.__initSteps & _INIT_STEPS.MEMBERS_LIST_RECEIVED: self.__initSteps |= _INIT_STEPS.MEMBERS_LIST_RECEIVED clanAbbrev = self.playerCtx.getClanAbbrev() members = [] if self.__clanChannel is not None: getter = self.__clanChannel.getMember else: getter = lambda dbID: None playerID = getPlayerDatabaseID() for dbID, (name, roleFlags) in clanMembers.iteritems(): if getter(dbID) is None: gos = GAME_ONLINE_STATUS.UNDEFINED else: gos = GAME_ONLINE_STATUS.ONLINE if playerID == dbID: user = CurrentUserEntity(dbID, name=name, clanInfo=ClanInfo( 0, clanAbbrev, roleFlags)) else: user = SharedUserEntity(dbID, name=name, clanInfo=ClanInfo( 0, clanAbbrev, roleFlags), gos=gos, tags={USER_TAG.CLAN_MEMBER}) members.append(user) self.usersStorage.setClanMembersList(members) if self.__initSteps & _INIT_STEPS.LIST_INITED != 0: g_messengerEvents.users.onClanMembersListChanged() return
def updateUser(item, tags): dbID = item.getAccountDBID() user = userGetter(dbID) if user: user.addTags(tags) if USER_TAG.INVALID_NAME in user.getTags(): user.update(name=item.getNickName()) else: userSetter(SharedUserEntity(dbID, name=item.getNickName(), tags=tags, clanInfo=ClanInfo(abbrev=item.getClanAbbrev())))
def _update(self, note): user = self._getUser(protoType=None) if user: user.update(note=note) self._doNotify(USER_ACTION_ID.NOTE_CHANGED, user, False) elif note: user = SharedUserEntity(self._jid.getDatabaseID(), note=note) self.usersStorage.setUser(user) self._doNotify(USER_ACTION_ID.NOTE_CHANGED, user, False)
def SearchResultIterator(value): value = dict(value) if 'strArg1' in value: result = cPickle.loads(value['strArg1']) else: result = [] for name, dbID, clanAbbrev in result: if not name: continue yield SharedUserEntity(long(dbID), name=name, clanInfo=ClanInfo(abbrev=clanAbbrev))
def __onFindUsers(self, chatAction): chatActionDict = dict(chatAction) result = chatActionDict.get('data', []) requestID = chatActionDict.get('requestID', []) users = [] for userData in result: name, dbID, clanAbbrev = userData[:3] dbID = long(dbID) if not len(name): continue received = SharedUserEntity(dbID, name=name, clanAbbrev=clanAbbrev) user = self.usersStorage.getUser(dbID) if user: if user.isCurrentPlayer(): received = user else: received.update(tags=user.getTags()) users.append(received) g_messengerEvents.users.onFindUsersComplete(requestID, users)
def result(self, pyGlooxTag): handler = contact_note.NotesListHandler() notes, (count, _, last) = handler.handleTag(pyGlooxTag) getter = self.usersStorage.getUser setter = self.usersStorage.setUser for dbID, note in notes: contact = getter(dbID) if contact: contact.update(note=note) else: setter(SharedUserEntity(dbID, note=note)) self._offset += len(notes) if self._offset < count: self._iqID = self.client().sendIQ(contact_note.NotesListQuery(CONTACT_LIMIT.NOTES_PER_PAGE, last)) else: g_messengerEvents.users.onNotesListReceived() self._result = TASK_RESULT.REMOVE
def __setClubMembersList(self, members): self.usersStorage.removeTags(_TAGS) getter = self.usersStorage.getUser setter = self.usersStorage.setUser unresolved = set() for dbID in members.iterkeys(): contact = getter(dbID) if contact: contact.addTags(_TAGS) else: unresolved.add(dbID) setter(SharedUserEntity(dbID, tags={USER_TAG.CLUB_MEMBER})) if unresolved: from messenger.proto import proto_getter xmpp = proto_getter(PROTO_TYPE.XMPP).get() xmpp.nicknames.resolve(unresolved, self.__onClubMembersReceived) else: self.__onClubMembersReceived()
def __getUser(self, dbId, username, clanAbbrev): user = self.usersStorage.getUser(dbId) if user is None: user = SharedUserEntity(dbId, name=username, clanInfo=UserClanInfo(abbrev=clanAbbrev), scope=UserEntityScope.LOBBY, tags={USER_TAG.SEARCH, USER_TAG.TEMP}) self.usersStorage.addUser(user) return user
def getContact(self, userDbID): user = self.users.getUser(userDbID) if not user: user = SharedUserEntity(userDbID) self.users.addUser(user) return user
def getContact(self, userID, scope=UserEntityScope.LOBBY): user = self.users.getUser(userID, scope=scope) if not user: user = SharedUserEntity(userID) self.users.addUser(user) return user