X-Git-Url: https://code.delx.au/pymsnt/blobdiff_plain/de2c51b7bf725efa348074d3324e23fd4afd8e5e..c0c7bca2bb8b2c215d0031695f1ec49b74457a6d:/src/avatar.py diff --git a/src/avatar.py b/src/avatar.py index 4339d7f..697400a 100644 --- a/src/avatar.py +++ b/src/avatar.py @@ -1,17 +1,16 @@ # Copyright 2005 James Bunton # Licensed for distribution under the GPL version 2, check COPYING for details -import utils -import config +from debug import LogEvent, INFO, WARN, ERROR + from twisted.internet import reactor from tlib.xmlw import Element -from debug import LogEvent, INFO, WARN, ERROR + +import sha, base64, os, os.path + +import utils import config -import lang -import sha -import base64 -import os -import os.path + SPOOL_UMASK = 0077 @@ -49,17 +48,17 @@ class Avatar: def makePhotoElement(self): """ Returns an XML Element that can be put into the vCard. """ photo = Element((None, "PHOTO")) - type = photo.addElement("TYPE") - type.addContent("image/png") + cType = photo.addElement("TYPE") + cType.addContent("image/png") binval = photo.addElement("BINVAL") - binval.addContent(base64.encodestring(self.getImageData())) + binval.addContent(base64.encodestring(self.getImageData()).replace("\n", "")) return photo def makeDataElement(self): """ Returns an XML Element that can be put into a jabber:x:avatar IQ stanza. """ data = Element((None, "data")) data["mimetype"] = "image/png" - data.addContent(base64.encodestring(self.getImageData())) + data.addContent(base64.encodestring(self.getImageData()).replace("\n", "")) return data def __eq__(self, other): @@ -74,7 +73,7 @@ class AvatarCache: """ Returns the full path to the directory that a particular key is in. Creates that directory if it doesn't already exist. """ X = os.path.sep - d = os.path.os.path.abspath(config.spooldir) + X + config.jid + X + "avatars" + X + key[0:3] + X + d = os.path.os.path.abspath(config.spooldir) + X + "avatars" + X + key[0:3] + X if not os.path.exists(d): os.makedirs(d) return d @@ -87,7 +86,7 @@ class AvatarCache: LogEvent(INFO, "", "Setting avatar %s" % (key)) prev_umask = os.umask(SPOOL_UMASK) try: - f = open(self.dir(key) + key, 'w') + f = open(self.dir(key) + key, 'wb') f.write(imageData) f.close() except IOError, e: @@ -100,6 +99,8 @@ class AvatarCache: imageData = self.getAvatarData(key) if imageData: return Avatar(imageData, self) + else: + return None def getAvatarData(self, key): """ Loads the avatar with SHA1 hash of 'key' from disk and returns the data """ @@ -107,14 +108,16 @@ class AvatarCache: filename = self.dir(key) + key if os.path.isfile(filename): LogEvent(INFO, "Getting avatar.") - f = open(filename) + f = open(filename, "rb") data = f.read() f.close() return data else: LogEvent(INFO, "", "Avatar not found.") - except IOError, e: + except IOError: LogEvent(WARN, "", "IOError reading avatar.") + else: + return None