109 lines
4 KiB
Python
109 lines
4 KiB
Python
from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal
|
|
from direct.directnotify.DirectNotifyGlobal import directNotify
|
|
from otp.uberdog.RejectCode import RejectCode
|
|
from otp.otpbase import OTPGlobals
|
|
from otp.otpbase import OTPLocalizer
|
|
|
|
class AvatarFriendsManager(DistributedObjectGlobal):
|
|
notify = directNotify.newCategory('AvatarFriendsManager')
|
|
|
|
def __init__(self, cr):
|
|
DistributedObjectGlobal.__init__(self, cr)
|
|
self.reset()
|
|
|
|
def reset(self):
|
|
self.avatarFriendsList = set()
|
|
self.avatarId2Info = {}
|
|
self.invitedAvatarsList = []
|
|
self.ignoredAvatarList = []
|
|
|
|
def addIgnore(self, avId):
|
|
if avId not in self.ignoredAvatarList:
|
|
self.ignoredAvatarList.append(avId)
|
|
base.cr.centralLogger.writeClientEvent('ignoring %s' % (avId,))
|
|
messenger.send('AvatarIgnoreChange')
|
|
|
|
def removeIgnore(self, avId):
|
|
if avId in self.ignoredAvatarList:
|
|
self.ignoredAvatarList.remove(avId)
|
|
base.cr.centralLogger.writeClientEvent('stopped ignoring %s' % (avId,))
|
|
messenger.send('AvatarIgnoreChange')
|
|
|
|
def checkIgnored(self, avId):
|
|
return avId and avId in self.ignoredAvatarList
|
|
|
|
def sendRequestInvite(self, avId):
|
|
self.notify.debugCall()
|
|
self.sendUpdate('requestInvite', [avId])
|
|
self.invitedAvatarsList.append(avId)
|
|
|
|
def sendRequestRemove(self, avId):
|
|
self.notify.debugCall()
|
|
self.sendUpdate('requestRemove', [avId])
|
|
if avId in self.invitedAvatarsList:
|
|
self.invitedAvatarsList.remove(avId)
|
|
|
|
def friendConsidering(self, avId):
|
|
self.notify.debugCall()
|
|
messenger.send(OTPGlobals.AvatarFriendConsideringEvent, [1, avId])
|
|
|
|
def invitationFrom(self, avId, avatarName):
|
|
self.notify.debugCall()
|
|
messenger.send(OTPGlobals.AvatarFriendInvitationEvent, [avId, avatarName])
|
|
|
|
def retractInvite(self, avId):
|
|
self.notify.debugCall()
|
|
messenger.send(OTPGlobals.AvatarFriendRetractInviteEvent, [avId])
|
|
if avId in self.invitedAvatarsList:
|
|
self.invitedAvatarsList.remove(avId)
|
|
|
|
def rejectInvite(self, avId, reason):
|
|
self.notify.debugCall()
|
|
messenger.send(OTPGlobals.AvatarFriendRejectInviteEvent, [avId, reason])
|
|
if avId in self.invitedAvatarsList:
|
|
self.invitedAvatarsList.remove(avId)
|
|
|
|
def rejectRemove(self, avId, reason):
|
|
self.notify.debugCall()
|
|
messenger.send(OTPGlobals.AvatarFriendRejectRemoveEvent, [avId, reason])
|
|
|
|
def updateAvatarFriend(self, avId, info):
|
|
if hasattr(info, 'avatarId') and not info.avatarId and avId:
|
|
info.avatarId = avId
|
|
if avId not in self.avatarFriendsList:
|
|
self.avatarFriendsList.add(avId)
|
|
self.avatarId2Info[avId] = info
|
|
messenger.send(OTPGlobals.AvatarFriendAddEvent, [avId, info])
|
|
if self.avatarId2Info[avId].onlineYesNo != info.onlineYesNo:
|
|
base.talkAssistant.receiveFriendUpdate(avId, info.getName(), info.onlineYesNo)
|
|
self.avatarId2Info[avId] = info
|
|
messenger.send(OTPGlobals.AvatarFriendUpdateEvent, [avId, info])
|
|
if avId in self.invitedAvatarsList:
|
|
self.invitedAvatarsList.remove(avId)
|
|
messenger.send(OTPGlobals.AvatarNewFriendAddEvent, [avId])
|
|
|
|
def removeAvatarFriend(self, avId):
|
|
self.avatarFriendsList.remove(avId)
|
|
self.avatarId2Info.pop(avId, None)
|
|
messenger.send(OTPGlobals.AvatarFriendRemoveEvent, [avId])
|
|
return
|
|
|
|
def setFriends(self, avatarIds):
|
|
self.notify.debugCall()
|
|
|
|
def isFriend(self, avId):
|
|
return self.isAvatarFriend(avId)
|
|
|
|
def isAvatarFriend(self, avId):
|
|
return avId in self.avatarFriendsList
|
|
|
|
def getFriendInfo(self, avId):
|
|
return self.avatarId2Info.get(avId)
|
|
|
|
def countTrueFriends(self):
|
|
count = 0
|
|
for id in self.avatarId2Info:
|
|
if self.avatarId2Info[id].openChatFriendshipYesNo:
|
|
count += 1
|
|
|
|
return count
|