diff --git a/toontown/friends/ToontownFriendsManagerUD.py b/toontown/friends/ToontownFriendsManagerUD.py index e554015..0a84b2f 100644 --- a/toontown/friends/ToontownFriendsManagerUD.py +++ b/toontown/friends/ToontownFriendsManagerUD.py @@ -2,8 +2,79 @@ from direct.directnotify import DirectNotifyGlobal from direct.distributed.DistributedObjectGlobalUD import DistributedObjectGlobalUD +class FriendsOperation: + + def __init__(self, friendsManager, sender): + self.friendsManager = friendsManager + self.sender = sender + + def _handleDone(self): + # TODO + pass + + def _handleError(self, error): + # TODO + pass + + +class FriendsListOperation(FriendsOperation): + + def start(self): + self.friendsManager.air.dbInterface.queryObject(self.friendsManager.air.dbId, self.sender, + self.__handleSenderRetrieved) + + def __handleSenderRetrieved(self, dclass, fields): + if dclass != self.friendsManager.air.dclassesByName['DistributedToonUD']: + self._handleError('Retrieved sender is not a DistributedToonUD!') + return + + self.tempFriendsList = fields['setFriendsList'][0] + if len(self.tempFriendsList) <= 0: + 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) + + def __handleFriendRetrieved(self, dclass, fields): + if dclass != self.friendsManager.air.dclassesByName['DistributedToonUD']: + self._handleError('Retrieved friend is not a DistributedToonUD!') + return + + 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() + return + + self.currentFriendIdx += 1 + self.friendsManager.air.dbInterface.queryObject(self.friendsManager.air.dbId, + self.tempFriendsList[self.currentFriendIdx][0], + self.__handleFriendRetrieved) + + def __sendFriendsList(self, friendsList): + self.friendsManager.notify.info('TODO: __sendFriendsList') + + class ToontownFriendsManagerUD(DistributedObjectGlobalUD): notify = DirectNotifyGlobal.directNotify.newCategory('ToontownFriendsManagerUD') + def __init__(self, air): + DistributedObjectGlobalUD.__init__(self, air) + self.operations = [] + + def runOperation(self, operationType, *args): + sender = self.air.getAvatarIdFromSender() + if not sender: + return + + newOperation = operationType(self, sender) + self.operations.append(newOperation) + newOperation.start(*args) + def getFriendsListRequest(self): - self.notify.info('getFriendsListRequest TODO') + self.runOperation(FriendsListOperation)