def updateAvatar(self, contact, iconData=None, md5Hash=None, numHash=None): if config.disableAvatars: return from glue import icq2jid if md5Hash: LogEvent(INFO, self.session.jabberID, "%s [M]%s" % (contact.lower(), binascii.hexlify(md5Hash))) elif numHash: LogEvent(INFO, self.session.jabberID, "%s [N]%d" % (contact.lower(), numHash)) c = self.session.contactList.findContact(icq2jid(contact)) if not c: #debug.log("Update setting default avatar for %s" %(contact)) jabContact = self.session.contactList.createContact( icq2jid(contact), "both") c = jabContact if iconData and (md5Hash or numHash): LogEvent(INFO, self.session.jabberID, "Update setting custom avatar for %s" % (contact)) try: # Debugging, keeps original icon pre-convert try: f = open( os.path.abspath(config.spooldir) + X + config.jid + X + "avatarsdebug" + X + contact + ".icondata", 'w') f.write(iconData) f.close() except: # This isn't important pass avatarData = avatar.AvatarCache().setAvatar( imgmanip.convertToPNG(iconData)) c.updateAvatar(avatarData, push=True) if not md5Hash: m = md5.new() m.update(iconData) md5Hash = m.digest() if not numHash: numHash = oscar.getIconSum(iconData) self.updateIconHashes(contact.lower(), avatarData.getImageHash(), binascii.hexlify(md5Hash), numHash) except: LogEvent( INFO, self.session.jabberID, "Whoa there, this image doesn't want to work. Lets leave it where it was..." ) else: if not c.avatar: LogEvent(INFO, self.session.jabberID, "Update setting default avatar for %s" % (contact)) if config.disableDefaultAvatar: c.updateAvatar(None, push=True) else: if contact[0].isdigit(): c.updateAvatar(glue.defaultICQAvatar, push=True) else: c.updateAvatar(glue.defaultAIMAvatar, push=True)
def sendMessage(self, target, resource, message, noerror, xhtml, autoResponse=0): LogEvent(INFO, self.session.jabberID) from glue import jid2icq try: self.session.pytrans.serviceplugins['Statistics'].stats['OutgoingMessages'] += 1 self.session.pytrans.serviceplugins['Statistics'].sessionUpdate(self.session.jabberID, 'OutgoingMessages', 1) uin = jid2icq(target) wantIcon = 0 if self.bos.requesticon.has_key(uin): LogEvent(INFO, self.session.jabberID, "Going to ask for target's icon.") wantIcon = 1 del self.bos.requesticon[uin] offline = 1 try: if self.legacyList.ssicontacts[uin]['presence'] != "unavailable": offline = 0 except: # well then they're online in some way pass iconSum = None iconLen = None iconStamp = None if hasattr(self, "myavatar"): iconSum = oscar.getIconSum(self.myavatar) iconLen = len(self.myavatar) iconStamp = time.time() LogEvent(INFO, self.session.jabberID, "Going to send info about our icon, length %d, cksum %d" % (iconLen, iconSum)) LogEvent(INFO, self.session.jabberID) if uin[0].isdigit(): encoding = config.encoding charset = "iso-8859-1" if self.legacyList.hasCapability(uin, "unicode"): encoding = "utf-16be" charset = "unicode" LogEvent(INFO, self.session.jabberID, "Encoding %r" % encoding) self.bos.sendMessage(uin, [[message,charset]], offline=offline, wantIcon=wantIcon, autoResponse=autoResponse, iconSum=iconSum, iconLen=iconLen, iconStamp=iconStamp) self.session.sendArchive(target, self.session.jabberID, message) else: if xhtml and not config.disableXHTML: xhtml = utils.xhtml_to_aimhtml(xhtml) self.bos.sendMessage(uin, xhtml, wantIcon=wantIcon, autoResponse=autoResponse, iconSum=iconSum, iconLen=iconLen, iconStamp=iconStamp) self.session.sendArchive(target, self.session.jabberID, message) else: htmlized = oscar.html(message) self.bos.sendMessage(uin, htmlized, wantIcon=wantIcon, autoResponse=autoResponse, iconSum=iconSum, iconLen=iconLen, iconStamp=iconStamp) self.session.sendArchive(target, self.session.jabberID, message) except AttributeError: self.alertUser(lang.get("sessionnotactive", config.jid))
def updateAvatar(self, contact, iconData=None, md5Hash=None, numHash=None): if config.disableAvatars: return from glue import aim2jid if md5Hash: LogEvent(INFO, self.session.jabberID, "%s [M]%s" % (contact.lower(), binascii.hexlify(md5Hash))) elif numHash: LogEvent(INFO, self.session.jabberID, "%s [N]%d" % (contact.lower(), numHash)) c = self.session.contactList.findContact(aim2jid(contact)) if not c: #debug.log("Update setting default avatar for %s" %(contact)) jabContact = self.session.contactList.createContact(aim2jid(contact), "both") c = jabContact if iconData and (md5Hash or numHash): LogEvent(INFO, self.session.jabberID, "Update setting custom avatar for %s" %(contact)) try: # Debugging, keeps original icon pre-convert try: f = open(os.path.abspath(config.spooldir)+X+config.jid+X+"avatarsdebug"+X+contact+".icondata", 'w') f.write(iconData) f.close() except: # This isn't important pass avatarData = avatar.AvatarCache().setAvatar(imgmanip.convertToPNG(iconData)) c.updateAvatar(avatarData, push=True) if not md5Hash: m = md5.new() m.update(iconData) md5Hash = m.digest() if not numHash: numHash = oscar.getIconSum(iconData) self.updateIconHashes(contact.lower(), avatarData.getImageHash(), binascii.hexlify(md5Hash), numHash) except: LogEvent(INFO, self.session.jabberID, "Whoa there, this image doesn't want to work. Lets leave it where it was...") else: if not c.avatar: LogEvent(INFO, self.session.jabberID, "Update setting default avatar for %s" %(contact)) if config.disableDefaultAvatar: c.updateAvatar(None, push=True) else: if contact[0].isdigit(): c.updateAvatar(glue.defaultICQAvatar, push=True) else: c.updateAvatar(glue.defaultAIMAvatar, push=True)
def sendMessage(self, target, resource, message, noerror, xhtml, autoResponse=0): LogEvent(INFO, self.session.jabberID) from glue import jid2aim try: self.session.pytrans.serviceplugins['Statistics'].stats[ 'OutgoingMessages'] += 1 self.session.pytrans.serviceplugins['Statistics'].sessionUpdate( self.session.jabberID, 'OutgoingMessages', 1) scrnname = jid2aim(target) wantIcon = 0 if self.bos.requesticon.has_key(scrnname): LogEvent(INFO, self.session.jabberID, "Going to ask for target's icon.") wantIcon = 1 del self.bos.requesticon[scrnname] offline = 1 try: if self.legacyList.ssicontacts[scrnname][ 'presence'] != "unavailable": offline = 0 except: # well then they're online in some way pass iconSum = None iconLen = None iconStamp = None if hasattr(self, "myavatar"): iconSum = oscar.getIconSum(self.myavatar) iconLen = len(self.myavatar) iconStamp = time.time() LogEvent( INFO, self.session.jabberID, "Going to send info about our icon, length %d, cksum %d" % (iconLen, iconSum)) LogEvent(INFO, self.session.jabberID) if scrnname[0].isdigit(): encoding = "iso-8859-1" charset = "iso-8859-1" if self.legacyList.hasCapability(scrnname, "unicode"): encoding = "utf-16be" charset = "unicode" LogEvent(INFO, self.session.jabberID, "Encoding %r" % encoding) self.bos.sendMessage(scrnname, [[message, charset]], offline=offline, wantIcon=wantIcon, autoResponse=autoResponse, iconSum=iconSum, iconLen=iconLen, iconStamp=iconStamp) self.session.sendArchive(target, self.session.jabberID, message) else: if xhtml and not config.disableXHTML: xhtml = utils.xhtml_to_aimhtml(xhtml) self.bos.sendMessage(scrnname, xhtml, wantIcon=wantIcon, autoResponse=autoResponse, iconSum=iconSum, iconLen=iconLen, iconStamp=iconStamp) self.session.sendArchive(target, self.session.jabberID, message) else: htmlized = oscar.html(message) self.bos.sendMessage(scrnname, htmlized, wantIcon=wantIcon, autoResponse=autoResponse, iconSum=iconSum, iconLen=iconLen, iconStamp=iconStamp) self.session.sendArchive(target, self.session.jabberID, message) except AttributeError: self.alertUser(lang.get("sessionnotactive", config.jid))
def sendMessage(self, target, resource, message, noerror, xhtml, autoResponse=0, jabber_mid=None): LogEvent(INFO, self.session.jabberID) from glue import jid2icq try: self.session.pytrans.serviceplugins['Statistics'].stats['OutgoingMessages'] += 1 self.session.pytrans.serviceplugins['Statistics'].sessionUpdate(self.session.jabberID, 'OutgoingMessages', 1) uin = jid2icq(target) wantIcon = 0 if self.bos.requesticon.has_key(uin): LogEvent(INFO, self.session.jabberID, "Going to ask for target's icon.") wantIcon = 1 del self.bos.requesticon[uin] offline = 1 try: if self.legacyList.ssicontacts[uin]['presence'] != "unavailable": offline = 0 except: # well then they're online in some way pass iconSum = None iconLen = None iconStamp = None if hasattr(self, "myavatar"): iconSum = oscar.getIconSum(self.myavatar) iconLen = len(self.myavatar) iconStamp = time.time() LogEvent(INFO, self.session.jabberID, "Going to send info about our icon, length %d, cksum %d" % (iconLen, iconSum)) LogEvent(INFO, self.session.jabberID) if uin[0].isdigit(): # ICQ users if jabber_mid and int(self.bos.selfSettings['msgconfirm_recvmode']) == 1 and self.legacyList.hasCapability(uin, 'serv_rel'): cookie = ''.join([chr(random.randrange(0, 127)) for i in xrange(8)]) # cookie c_time = int(time.time()) uvars = {} msg_query = self.getUserVarValue(uin, 'wait_for_confirm_msg_query') if len(msg_query) == 0: msg_query = dict([]) elif len(msg_query) > 4: # query already too long del_msg_query = dict([]) for every in msg_query: e_id, e_res, e_time = msg_query[every] if int(c_time) > int(e_time) + 60: # sent more than 60 second ago and receiving not confirmed del_msg_query[every] = msg_query[every] # message was lost if len(del_msg_query): for every in del_msg_query: del msg_query[every] msg_query[cookie] = (jabber_mid, resource, c_time) uvars['wait_for_confirm_msg_query'] = msg_query # update query self.legacyList.setUserVars(uin, uvars) log.msg('Waiting for confirmations msg query: %s' % msg_query) else: cookie = None # if contact uses utf-8 via serv_rel and necessary see on it # or if contact has unicode & serl_rel caps and utf-8 via serv_rel preferred if (str(self.getUserVarValue(uin, 'utf8_msg_using')) == '1' and int(self.bos.selfSettings['utf8_messages_sendmode']) == 1) or (self.legacyList.hasCapability(uin, 'serv_rel') and self.legacyList.hasCapability(uin, 'unicode') and int(self.bos.selfSettings['utf8_messages_sendmode']) == 2 and not offline): self.bos.sendMessageType2(uin, message, cookie=cookie) # send as type-2 message else: # send as usual message, choose encoding if offline and int(self.bos.settingsOptionValue('offline_messages_sendenc')) == 0: # Unicode for offline messages charset = 'unicode' # utf-16be elif offline and int(self.bos.settingsOptionValue('offline_messages_sendenc')) == 1: # local encoding for offline messages charset = 'custom' # single-byte encoding else: # autodetect (both for offline and online messages) if self.legacyList.hasCapability(uin, 'unicode'): # contact has unicode cap charset = 'unicode' # utf-16be else: charset = 'custom' # single-byte encoding self.bos.sendMessage(uin, [[message,charset]], offline=offline, wantIcon=wantIcon, autoResponse=autoResponse, iconSum=iconSum, iconLen=iconLen, iconStamp=iconStamp, cookie=cookie) self.session.sendArchive(target, self.session.jabberID, message) else: # AIM users if xhtml and not config.disableXHTML: xhtml = utils.xhtml_to_aimhtml(xhtml) self.bos.sendMessage(uin, xhtml, wantIcon=wantIcon, autoResponse=autoResponse, iconSum=iconSum, iconLen=iconLen, iconStamp=iconStamp) self.session.sendArchive(target, self.session.jabberID, message) else: htmlized = oscar.html(message) self.bos.sendMessage(uin, htmlized, wantIcon=wantIcon, autoResponse=autoResponse, iconSum=iconSum, iconLen=iconLen, iconStamp=iconStamp) self.session.sendArchive(target, self.session.jabberID, message) except AttributeError: self.alertUser(lang.get("sessionnotactive", config.jid))