gzz-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gzz-commits] gzz/gzz/modules/email converter.py


From: Marc Schiereck
Subject: [Gzz-commits] gzz/gzz/modules/email converter.py
Date: Fri, 03 Jan 2003 16:14:59 -0500

CVSROOT:        /cvsroot/gzz
Module name:    gzz
Changes by:     Marc Schiereck <address@hidden> 03/01/03 16:14:59

Modified files:
        gzz/modules/email: converter.py 

Log message:
        Reconverting of multipart messages

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gzz/modules/email/converter.py.diff?tr1=1.18&tr2=1.19&r1=text&r2=text

Patches:
Index: gzz/gzz/modules/email/converter.py
diff -u gzz/gzz/modules/email/converter.py:1.18 
gzz/gzz/modules/email/converter.py:1.19
--- gzz/gzz/modules/email/converter.py:1.18     Tue Dec 31 19:21:39 2002
+++ gzz/gzz/modules/email/converter.py  Fri Jan  3 16:14:58 2003
@@ -37,9 +37,8 @@
     result.append(' access-type=\"x-storm\";\r\n')
     result.append(' block=\"' + idstring + '\"\r\n\r\n')
     
-    header = replaceHeaderLine(header, 'Content-Transfer-Encoding',
-                               'Content-Transfer-Encoding: binary\r\n')
     header = replaceHeaderLine(header, 'Content-ID', 'Content-ID: ' + idstring 
+ '\r\n')
+    header = replaceHeaderLine(header, 'Content-Transfer-Encoding', 
'Content-Transfer-Encoding: binary\r\n')
     header.append('\r\n')
     return result + header
 
@@ -130,7 +129,6 @@
     return 1
 
 def isReconstructable(mediaserver, msid, recid):
-    print "==>isReconstructable"
     mail = str(java.lang.String(mediaserver.getDatum(msid).getBytes(), 
"us-ascii"))
     #mail = StringIO.StringIO(mail)
     #msg  = mimetools.Message(mail)
@@ -138,19 +136,33 @@
     
     try:
         rec = reconstruct(mail, mediaserver, msid, 0)
-        #print "--------\n-------\n%s-------\n--------\n" % \
-        #      msgZip (reconstruct(mail, mediaserver), str(t))
-        #None
     except java.lang.Throwable, var: 
         print var
         print "\tReconverting failed."
-        return 1
+        return 0
     
     spans = java.util.ArrayList()
     for element in rec:
         spans.add(element)
     maker = gzz.media.impl.Enfilade1DImpl.Enfilade1DImplMaker()
     rec = maker.makeEnfilade(spans)
+
+    #print 
"----------------------------------------------------%s-----------------------------------------------"
 % rec.makeString() # % msgZip(rec.makeString(), t)
+
+    headerLines = java.util.ArrayList()
+    headerLines.add('Content-Type: message/rfc822')
+    tempstore = mediaserver.addDatum(rec.makeString() , headerLines, None, 0)
+
+    #print "(%s | %s)" % (tempstore.getString(), recid.getString())
+    #print "diff testdir/b_%s testdir/b_%s" % (tempstore.getString(), 
recid.getString())
+
+    if tempstore.equals(recid):
+        print "\tCould be reconverted."
+        return 1
+    else:
+        print "\tReconverting failed."
+        return 0
+
     #print 
"==================================================================================="
     #print rec.makeString()
     #print msgZip(t, rec.makeString())
@@ -160,18 +172,18 @@
 #        id = msg.getparam("block")[len("storm:block:"):]
 #        id = gzz.mediaserver.Mediaserver.Id(id)
     
-    print "<==isReconstructable"
     return 1
 
 def reconstruct(mail, mediaserver, msid, pos):
-    print "==>reconstruct"
+    #ptsmark = gzz.media.impl.PermanentTextScroll(">--X--<").getCurrent()
+    #ptsmark1 = gzz.media.impl.PermanentTextScroll(">--Y--<").getCurrent()
+    tMail   = mail
     mail    = StringIO.StringIO(mail)
     msg     = mimetools.Message(mail)
     type    = msg.gettype()
     msgData = []
 
     if type == "message/external-body" and 
string.lower(msg.getparam("access-type")) == "x-storm":
-        print "\tmessage/external-body"
         pts  = gzz.media.impl.PermanentTextScroll(mediaserver, msid)
         id   = msg.getparam("block")[len("storm:block:"):]
         id   = gzz.mediaserver.Mediaserver.Id(id)
@@ -180,26 +192,29 @@
         reconstructHeader(pts, msg.fp.read(), pos + len(str(msg)) + 2, msgData)
         msgData.append(pts1.getCurrent())
     elif type[:10] == "multipart/":
-        print "\tmultipart/"
         pts  = gzz.media.impl.PermanentTextScroll(mediaserver, msid)
-        pos = len(str(msg)) + 2
-        #msgData.append(pts.getSpan(0, pos))
-        #reconstructHeader(pts, str(msg), pos, msgData)
+        boundary = "--%s" % msg.getparam("boundary")
 
         mulmsg = multifile.MultiFile(mail, 0)
         mulmsg.push(msg.getparam("boundary"))
 
-        boundary = "--%s" % msg.getparam("boundary")
-        #msgData.append(pts.getSpan(pos, len(boundary) + 2))
-        #msgData = "--%s" % msg.getparam("boundary") 
+        prevMsgLen = len(str(msg))
 
+        msgData.append(pts.getSpan(pos, prevMsgLen))
+        msgData.append(pts.getSpan(prevMsgLen-2, prevMsgLen+2))
         while mulmsg.next():
-           #msgData.append(pts.getSpan(pos, len(boundary)))
            submsg = mimetools.Message(mulmsg)
-           #msgData.addAll(reconstruct(str(submsg) + submsg.fp.read(), 
mediaserver, msid, pos + len(boundary)))
-           #msgData.append(msgSpan)
-        
-        #msgData += "--%s--" % msg.getparam("boundary") 
+
+           msgData.append(pts.getSpan(pos + prevMsgLen + 2, pos + prevMsgLen + 
4 + len(boundary)))
+
+           pos += prevMsgLen + 4 + len(boundary)            
+
+           sMsg = str(submsg) + '\r\n' + submsg.fp.read()
+           msgData += reconstruct(sMsg, mediaserver, msid, pos)
+
+           prevMsgLen = len(sMsg) - 2
+        pos += prevMsgLen + 2
+        msgData.append(pts.getSpan(pos, len(tMail)))
 
     else:
         #print "==="
@@ -208,14 +223,13 @@
         pts = gzz.media.impl.PermanentTextScroll(mediaserver, msid)
         msgData.append(pts.getCurrent())
 
-    print "<===="
     mail.close()
-    print "<==reconstruct"
 
     return msgData
 
 def reconstructHeader(pts, header, pos, msgData):
-    sPos = pos
+    offset = pos
+    sPos = pos = 0
 
     headerf = string.split(header, '\r\n')
     ignore = 0
@@ -225,12 +239,12 @@
             sPos += len(line) + 2
             pos += len(line) + 2
         elif line[:21] == 'X-Gzzmo-OH-Content-ID' or line[:36] == 
'X-Gzzmo-OH-Content-Transfer-Encoding':
-            msgData.append(pts.getSpan(sPos, pos))
+            msgData.append(pts.getSpan(sPos + offset, pos + offset))
             sPos = pos + 11
             pos += len(line) + 2
             ignore = 0
         elif line[:25] == 'Content-Transfer-Encoding' or line[:10] == 
'Content-ID': 
-            msgData.append(pts.getSpan(sPos, pos))
+            msgData.append(pts.getSpan(sPos + offset, pos + offset))
             ignore = 1
             pos += len(line) + 2
             sPos = pos 
@@ -238,10 +252,9 @@
             ignore = 0
             pos += len(line) + 2
             
-    msgData.append(pts.getSpan(sPos, pos-2))
+    msgData.append(pts.getSpan(sPos + offset, pos-2 + offset))
 
 def storeBody(mediaserver, msg, body, msgID):
-    print "==>storeBody"
     msgtype = msg.gettype()
     ctparams = getContentTypeParams(msg)
     cbodyid = None
@@ -264,6 +277,24 @@
         
         tBody = java.lang.String(body, getCharset(msg))
         cbodyid = mediaserver.addDatum(tBody.getBytes("UTF8"), headerLinesB, 
None, 0)
+    elif msg.getencoding() == "base64"\
+      or msg.getencoding() == "quoted-printable"\
+      or msg.getencoding() == "uuencode":
+        headerLinesB = java.util.ArrayList()
+        headerLinesB.add('Content-Type: ' + msgtype 
+                         + string.join(ctparams, ''))
+        if msgID != None:
+            headerLinesB.add('Message-ID: ' + msgID)
+        else:
+            addDefaultHeaders = 1
+        headerLinesB.add('Content-Transfer-Encoding: binary')
+        body = StringIO.StringIO(body)
+        bodyW = StringIO.StringIO()
+        mimetools.decode(body, bodyW, msg.getencoding())
+        
+        cbodyid = mediaserver.addDatum(bodyW.getvalue(), headerLinesB, None, 
addDefaultHeaders)
+        body.close()
+        bodyW.close()
     else:
         headerLinesB = java.util.ArrayList()
         headerLinesB.add('Content-Type: ' + msgtype 
@@ -276,5 +307,4 @@
         
         cbodyid = mediaserver.addDatum(body, headerLinesB, None, 
addDefaultHeaders)
 
-    print "<==storeBody"
     return cbodyid




reply via email to

[Prev in Thread] Current Thread [Next in Thread]