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