friends: Working friends list retrieval
This commit is contained in:
parent
ca5db53eea
commit
4587bcd43c
|
|
@ -2846,8 +2846,16 @@ dclass TTAvatarFriendsManager : AvatarFriendsManager {
|
|||
dclass TTPlayerFriendsManager : PlayerFriendsManager {
|
||||
};
|
||||
|
||||
struct Friend {
|
||||
uint32 doId;
|
||||
string name;
|
||||
blob dnaString;
|
||||
uint32 petId;
|
||||
};
|
||||
|
||||
dclass ToontownFriendsManager : DistributedObject {
|
||||
getFriendsListRequest() clsend;
|
||||
getFriendsListResponse(Friend[]);
|
||||
};
|
||||
|
||||
dclass TTSpeedchatRelay : SpeedchatRelay {
|
||||
|
|
|
|||
|
|
@ -907,20 +907,15 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
|
|||
|
||||
PetDetail.PetDetail(doId, petDetailsCallback)
|
||||
|
||||
def handleGetFriendsList(self, di):
|
||||
error = di.getUint8()
|
||||
if error:
|
||||
self.notify.warning('Got error return from friends list.')
|
||||
self.friendsListError = 1
|
||||
else:
|
||||
count = di.getUint16()
|
||||
for i in range(0, count):
|
||||
doId = di.getUint32()
|
||||
name = di.getString()
|
||||
dnaString = di.getString()
|
||||
if __astron__:
|
||||
def handleGetFriendsList(self, friendsList):
|
||||
for friend in friendsList:
|
||||
doId = friend[0]
|
||||
name = friend[1]
|
||||
dnaString = friend[2]
|
||||
dna = ToonDNA.ToonDNA()
|
||||
dna.makeFromNetString(dnaString)
|
||||
petId = di.getUint32()
|
||||
petId = friend[3]
|
||||
handle = FriendHandle.FriendHandle(doId, name, dna, petId)
|
||||
self.friendsMap[doId] = handle
|
||||
if doId in self.friendsOnline:
|
||||
|
|
@ -937,8 +932,41 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
|
|||
|
||||
self.addPetToFriendsMap(handleAddedPet)
|
||||
return
|
||||
self.friendsMapPending = 0
|
||||
messenger.send('friendsMapComplete')
|
||||
self.friendsMapPending = 0
|
||||
messenger.send('friendsMapComplete')
|
||||
else:
|
||||
def handleGetFriendsList(self, di):
|
||||
error = di.getUint8()
|
||||
if error:
|
||||
self.notify.warning('Got error return from friends list.')
|
||||
self.friendsListError = 1
|
||||
else:
|
||||
count = di.getUint16()
|
||||
for i in range(0, count):
|
||||
doId = di.getUint32()
|
||||
name = di.getString()
|
||||
dnaString = di.getString()
|
||||
dna = ToonDNA.ToonDNA()
|
||||
dna.makeFromNetString(dnaString)
|
||||
petId = di.getUint32()
|
||||
handle = FriendHandle.FriendHandle(doId, name, dna, petId)
|
||||
self.friendsMap[doId] = handle
|
||||
if doId in self.friendsOnline:
|
||||
self.friendsOnline[doId] = handle
|
||||
if doId in self.friendPendingChatSettings:
|
||||
self.notify.debug('calling setCommonAndWL %s' % str(self.friendPendingChatSettings[doId]))
|
||||
handle.setCommonAndWhitelistChatFlags(*self.friendPendingChatSettings[doId])
|
||||
|
||||
if base.wantPets and base.localAvatar.hasPet():
|
||||
|
||||
def handleAddedPet():
|
||||
self.friendsMapPending = 0
|
||||
messenger.send('friendsMapComplete')
|
||||
|
||||
self.addPetToFriendsMap(handleAddedPet)
|
||||
return
|
||||
self.friendsMapPending = 0
|
||||
messenger.send('friendsMapComplete')
|
||||
|
||||
def handleGetFriendsListExtended(self, di):
|
||||
avatarHandleList = []
|
||||
|
|
|
|||
|
|
@ -7,3 +7,6 @@ class ToontownFriendsManager(DistributedObjectGlobal):
|
|||
|
||||
def sendGetFriendsListRequest(self):
|
||||
self.sendUpdate('getFriendsListRequest')
|
||||
|
||||
def getFriendsListResponse(self, friendsList):
|
||||
self.cr.handleGetFriendsList(friendsList)
|
||||
|
|
|
|||
|
|
@ -17,9 +17,20 @@ class FriendsOperation:
|
|||
pass
|
||||
|
||||
|
||||
class FriendsListOperation(FriendsOperation):
|
||||
class GetFriendsListOperation(FriendsOperation):
|
||||
|
||||
def __init__(self, friendsManager, sender):
|
||||
FriendsOperation.__init__(self, friendsManager, sender)
|
||||
self.friendsList = None
|
||||
self.tempFriendsList = None
|
||||
self.onlineFriends = None
|
||||
self.currentFriendIdx = None
|
||||
|
||||
def start(self):
|
||||
self.friendsList = []
|
||||
self.tempFriendsList = []
|
||||
self.onlineFriends = []
|
||||
self.currentFriendIdx = 0
|
||||
self.friendsManager.air.dbInterface.queryObject(self.friendsManager.air.dbId, self.sender,
|
||||
self.__handleSenderRetrieved)
|
||||
|
||||
|
|
@ -30,12 +41,10 @@ class FriendsListOperation(FriendsOperation):
|
|||
|
||||
self.tempFriendsList = fields['setFriendsList'][0]
|
||||
if len(self.tempFriendsList) <= 0:
|
||||
self.__sendFriendsList([])
|
||||
self.__sendFriendsList()
|
||||
self._handleDone()
|
||||
return
|
||||
|
||||
self.currentFriendIdx = 0
|
||||
self.friendsList = []
|
||||
self.friendsManager.air.dbInterface.queryObject(self.friendsManager.air.dbId, self.tempFriendsList[0][0],
|
||||
self.__handleFriendRetrieved)
|
||||
|
||||
|
|
@ -47,8 +56,7 @@ class FriendsListOperation(FriendsOperation):
|
|||
friendId = self.tempFriendsList[self.currentFriendIdx][0]
|
||||
self.friendsList.append([friendId, fields['setName'][0], fields['setDNAString'][0], fields['setPetId'][0]])
|
||||
if len(self.friendsList) >= len(self.tempFriendsList):
|
||||
self.__sendFriendsList(self.friendsList)
|
||||
self._handleDone()
|
||||
self.__checkFriendsOnline()
|
||||
return
|
||||
|
||||
self.currentFriendIdx += 1
|
||||
|
|
@ -56,8 +64,22 @@ class FriendsListOperation(FriendsOperation):
|
|||
self.tempFriendsList[self.currentFriendIdx][0],
|
||||
self.__handleFriendRetrieved)
|
||||
|
||||
def __sendFriendsList(self, friendsList):
|
||||
self.friendsManager.notify.info('TODO: __sendFriendsList')
|
||||
def __checkFriendsOnline(self):
|
||||
self.currentFriendIdx = 0
|
||||
for friendDetails in self.friendsList:
|
||||
self.friendsManager.air.getActivated(friendDetails[0], self.__gotActivatedResp)
|
||||
|
||||
def __gotActivatedResp(self, avId, activated):
|
||||
self.currentFriendIdx += 1
|
||||
if activated:
|
||||
self.onlineFriends.append(avId)
|
||||
|
||||
if self.currentFriendIdx >= len(self.friendsList):
|
||||
self.__sendFriendsList()
|
||||
self._handleDone()
|
||||
|
||||
def __sendFriendsList(self):
|
||||
self.friendsManager.sendUpdateToAvatarId(self.sender, 'getFriendsListResponse', [self.friendsList])
|
||||
|
||||
|
||||
class ToontownFriendsManagerUD(DistributedObjectGlobalUD):
|
||||
|
|
@ -77,4 +99,4 @@ class ToontownFriendsManagerUD(DistributedObjectGlobalUD):
|
|||
newOperation.start(*args)
|
||||
|
||||
def getFriendsListRequest(self):
|
||||
self.runOperation(FriendsListOperation)
|
||||
self.runOperation(GetFriendsListOperation)
|
||||
|
|
|
|||
Loading…
Reference in New Issue