/[gzz]/gzz/gzz/modules/email/converter.py
ViewVC logotype

Diff of /gzz/gzz/modules/email/converter.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.9 by benja, Fri Nov 29 14:59:53 2002 UTC revision 1.10 by Dreevich, Mon Dec 2 19:19:44 2002 UTC
# Line 66  def delHeaderLines(header, fields): Line 66  def delHeaderLines(header, fields):
66      return result      return result
67    
68  def transformHeader(header, bodyID):  def transformHeader(header, bodyID):
69        """Transforms message header to a message/external-body header
70        """
71      result = []      result = []
72      idstring = 'storm:block:' + bodyID.getString()      idstring = 'storm:block:' + bodyID.getString()
73    
# Line 85  def getCharset(msg): Line 87  def getCharset(msg):
87          if param[0:7] == 'charset':          if param[0:7] == 'charset':
88              return param[8:]              return param[8:]
89    
90        return "us-ascii"
91    
92  def getContentTypeParams(msg):  def getContentTypeParams(msg):
93      ctparams  = []      ctparams  = []
94      for param in msg.getplist():      for param in msg.getplist():
# Line 93  def getContentTypeParams(msg): Line 97  def getContentTypeParams(msg):
97    
98  def storeMail(mail, mediaserver):  def storeMail(mail, mediaserver):
99      mail      = re.sub(r'(\r\n|\r|\n)', '\r\n', mail)      mail      = re.sub(r'(\r\n|\r|\n)', '\r\n', mail)
100        tMail     = StringIO.StringIO(mail)
101        tMail     = mimetools.Message(tMail)
102      mail      = StringIO.StringIO(mail)      mail      = StringIO.StringIO(mail)
103      msg       = mimetools.Message(mail)      msg       = mimetools.Message(mail)
104      msgtype   = msg.gettype()      msgtype   = msg.gettype()
105      msgID     = msg.getheader("Message-ID")      msgID     = msg.getheader("Message-ID")
106    
107      getCharset(msg)      
108        headerLines = java.util.ArrayList()
109        headerLines.add('Content-Type: message/rfc822')
110        tempstore = mediaserver.addDatum(string.join(tMail.headers, '')
111                       + '\r\n' + tMail.fp.read(), headerLines, None, 0)
112    
113      if msgtype[:10] == "multipart/":      if msgtype[:10] == "multipart/":
114          headerLinesH = java.util.ArrayList()          headerLinesH = java.util.ArrayList()
# Line 110  def storeMail(mail, mediaserver): Line 120  def storeMail(mail, mediaserver):
120    
121          while mulmsg.next():          while mulmsg.next():
122              submsg = mimetools.Message(mulmsg)              submsg = mimetools.Message(mulmsg)
             id = storeBody(mediaserver, submsg, msgID)  
123    
124              header = ['--', msg.getparam("boundary") + '\r\n']              header = ['--', msg.getparam("boundary") + '\r\n']
             header = header + transformHeader(submsg.headers, id)  
             header = string.join(header, '')  
125    
126              headerData += header              body = submsg.fp.read()
127                if isConvertible(body, getCharset(submsg)):
128                    id = storeBody(mediaserver, submsg, body, msgID)
129                    header = header + transformHeader(submsg.headers, id)
130                    header = string.join(header, '')
131                    headerData += header
132                else:
133                    headerData += string.join(submsg.headers, '') + '\n\r' + body
134    
135          headerData += '--' + msg.getparam("boundary") + '--\r\n\r\n'          headerData += '--' + msg.getparam("boundary") + '--\r\n\r\n'
136          id2 = mediaserver.addDatum(headerData, headerLinesH, None, 0)          id2 = mediaserver.addDatum(headerData, headerLinesH, None, 0)
137          eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2)          eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2)
138            if isReconstructable(mediaserver, id2, tempstore):
139                mediaserver.expungeDatum(tempstore)
140            else:
141                id2 = tempstore
142    
143          print eis.getSubject().makeString(), ": ", id2.getString()          print eis.getSubject().makeString(), ": ", id2.getString()
144          print "----"          print "----"
145          print eis.getBody().makeString()          print eis.getBody().makeString()
# Line 130  def storeMail(mail, mediaserver): Line 149  def storeMail(mail, mediaserver):
149          headerLinesB = java.util.ArrayList()          headerLinesB = java.util.ArrayList()
150          headerLinesH.add('Content-Transfer-Encoding: binary')          headerLinesH.add('Content-Transfer-Encoding: binary')
151          headerLinesH.add('Content-Type: message/rfc822')          headerLinesH.add('Content-Type: message/rfc822')
         id = storeBody(mediaserver, msg, msgID)  
           
         header = string.join(transformHeader(msg.headers, id), '')  
152    
153          id2 = mediaserver.addDatum(header, headerLinesH, None, 0)          body = msg.fp.read()
154            if isConvertible(body , getCharset(msg)):
155                id = storeBody(mediaserver, msg, body, msgID)
156                header = string.join(transformHeader(msg.headers, id), '')
157                id2 = mediaserver.addDatum(header, headerLinesH, None, 0)
158            else:
159                header = string.join(msg.headers, '') + '\r\n' + body
160                id2 = mediaserver.addDatum(header, headerLinesH, None, 0)
161    
162            if isReconstructable(mediaserver, id2, tempstore):
163                mediaserver.expungeDatum(tempstore)
164            else:
165                id2 = tempstore
166    
167          eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2)          eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2)
168          print eis.getSubject().makeString(), ": ", id2.getString()          print eis.getSubject().makeString(), ": ", id2.getString()
169          print "----"          print "----"
# Line 145  def storeMail(mail, mediaserver): Line 174  def storeMail(mail, mediaserver):
174    
175  def isConvertible(body, charset):  def isConvertible(body, charset):
176      cBody = ""      cBody = ""
177        print "Charset: ", charset
178        #if charset == None:
179        #    charset = "us-ascii"
180      try:      try:
181          cBody = java.lang.String(body, charset);          cBody = java.lang.String(body, charset);
182      except java.io.UnsupportedEncodingException:      except java.io.UnsupportedEncodingException:
# Line 152  def isConvertible(body, charset): Line 184  def isConvertible(body, charset):
184          return 0          return 0
185    
186      bBody = cBody.getBytes(charset)      bBody = cBody.getBytes(charset)
187      if body.equals(bBody):  # somehow like this... just with body as a byte-array      #if body.equals(bBody):
188         return 1      #   return 1
189      else:      #else:
190         return 0      #   return 0
191        return 1
192    
193    def isReconstructable(mediaserver, msid, recid):
194        return 1
195    
196  def storeBody(mediaserver, msg, msgID):  def storeBody(mediaserver, msg, body, msgID):
197      msgtype = msg.gettype()      msgtype = msg.gettype()
198      ctparams = getContentTypeParams(msg)      ctparams = getContentTypeParams(msg)
199      cbodyid = None      cbodyid = None
200      print msgID      print msgID
201    
202        print "\"", msgtype, "\""
203      if msgtype == "message/rfc822":      if msgtype == "message/rfc822":
204          print "message/rfc822"          cbodyid = storeMail(body, mediaserver)
         storeMail(msg.fp.read(), mediaserver)  
205      elif msgtype == "text/plain":      elif msgtype == "text/plain":
206          headerLinesB = java.util.ArrayList()          headerLinesB = java.util.ArrayList()
207          headerLinesB.add('Content-Type: text/plain; charset=UTF-8')          headerLinesB.add('Content-Type: text/plain; charset=UTF-8')
208          headerLinesB.add('Message-ID: ' + msgID)          headerLinesB.add('Message-ID: ' + msgID)
209          headerLinesB.add('Content-Transfer-Encoding: ' + msg.getencoding())          headerLinesB.add('Content-Transfer-Encoding: ' + msg.getencoding())
210                    
211          body = msg.fp.read()          tBody = java.lang.String(body, getCharset(msg))
212          cbodyid = mediaserver.addDatum(body, headerLinesB, None, 0)          cbodyid = mediaserver.addDatum(tBody.getBytes("UTF8"), headerLinesB, None, 0)
213      else:      else:
214          headerLinesB = java.util.ArrayList()          headerLinesB = java.util.ArrayList()
215          headerLinesB.add('Content-Type: ' + msgtype          headerLinesB.add('Content-Type: ' + msgtype
# Line 181  def storeBody(mediaserver, msg, msgID): Line 217  def storeBody(mediaserver, msg, msgID):
217          headerLinesB.add('Message-ID: ' + msgID)          headerLinesB.add('Message-ID: ' + msgID)
218          headerLinesB.add('Content-Transfer-Encoding: ' + msg.getencoding())          headerLinesB.add('Content-Transfer-Encoding: ' + msg.getencoding())
219                    
         body = msg.fp.read()  
220          cbodyid = mediaserver.addDatum(body, headerLinesB, None, 0)          cbodyid = mediaserver.addDatum(body, headerLinesB, None, 0)
221    
222      return cbodyid      return cbodyid

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26