]> code.delx.au - pymsnt/blobdiff - src/avatar.py
Use md5 hashes for spool dir. Moved avatar dir to root of spool dir.
[pymsnt] / src / avatar.py
index 4339d7fa6c85390636d82a061ea94e2188c3b3bd..697400aa7c11e84fd0c6f179817ca704666c8c56 100644 (file)
@@ -1,17 +1,16 @@
 # Copyright 2005 James Bunton <james@delx.cjb.net>
 # 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