/[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.14 by benja, Sat Dec 7 20:42:20 2002 UTC revision 1.15 by Dreevich, Mon Dec 30 22:47:38 2002 UTC
# Line 17  Line 17 
17    
18  import gzz  import gzz
19  import java  import java
 import mailbox  
20  import mimetools  import mimetools
21  import multifile  import multifile
22  import re  import re
23  import string  import string
24  import StringIO  import StringIO
25    
 def storeMailbox(file, mediaserver):  
     mbox = mailbox.UnixMailbox(file)  
   
     mails = []  
     while 1:  
         msg = mbox.next()  
         if not msg: break  
   
         header = string.join(msg.headers , '')  
         body   = string.join(msg.fp.readlines() , '')  
   
         p = re.compile( '(\r\n|\n)')  
         header = p.sub('\r\n', header)  
         body = p.sub('\r\n', body)  
   
         mails.append(storeMail(header + '\r\n' + body, mediaserver))  
   
     return mails  
   
26  def delHeaderLines(header, fields):  def delHeaderLines(header, fields):
27      """Takes a list of header-lines and a list of header fields and      """Takes a list of header-lines and a list of header fields and
28      removes every appereance of this field and it's parameters.      removes every appereance of this field and it's parameters.
# Line 97  def getCharset(msg): Line 77  def getCharset(msg):
77    
78      #for param in msg.getplist():      #for param in msg.getplist():
79      #    if param[0:7] == 'charset':      #    if param[0:7] == 'charset':
80  #           return param[8:]  #            return param[8:]
81  #  #
82   #   return "us-ascii"   #   return "us-ascii"
83    
# Line 107  def getContentTypeParams(msg): Line 87  def getContentTypeParams(msg):
87          ctparams.append(string.join(['; ', param], ''))          ctparams.append(string.join(['; ', param], ''))
88      return ctparams      return ctparams
89    
90  def storeMail(mail, mediaserver):  def save(mediaserver, mail):
91      mail      = re.sub(r'(\r\n|\r|\n)', '\r\n', mail)      mail      = re.sub(r'(\r\n|\r|\n)', '\r\n', mail)
92      tMail     = StringIO.StringIO(mail)      tMail     = StringIO.StringIO(mail)
93      tMsg      = mimetools.Message(tMail)      tMsg      = mimetools.Message(tMail)
# Line 137  def storeMail(mail, mediaserver): Line 117  def storeMail(mail, mediaserver):
117    
118              try:              try:
119                  body = submsg.fp.read()                  body = submsg.fp.read()
120              except:              except:
121                  print "\tMail konnte nicht konvertiert werden"                  print "\tMail couldn't be converted"
122                  return tempstore                  return tempstore
123              if isConvertible(body, getCharset(submsg)):              if isConvertible(body, getCharset(submsg)):
124                  id = storeBody(mediaserver, submsg, body, msgID)                  id = storeBody(mediaserver, submsg, body, msgID)
125                  header = header + transformHeader(submsg.headers, id)                  header = header + transformHeader(submsg.headers, id)
126                  header = string.join(header, '')                  header = string.join(header, '')
127                  headerData += header                  headerData += header
128              else:              else:
129                  headerData += string.join(submsg.headers, '') + '\n\r' + body                  headerData += string.join(submsg.headers, '') + '\n\r' + body
130    
131          headerData += '--' + msg.getparam("boundary") + '--\r\n\r\n'          headerData += '--' + msg.getparam("boundary") + '--\r\n\r\n'
132          id2 = mediaserver.addDatum(headerData, headerLinesH, None, 0)          id2 = mediaserver.addDatum(headerData, headerLinesH, None, 0)
133          #eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2)          #eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2)
134          if isReconstructable(mediaserver, id2, tempstore):          if isReconstructable(mediaserver, id2, tempstore):
135              mediaserver.expungeDatum(tempstore)              mediaserver.expungeDatum(tempstore)
136          else:          else:
137              id2 = tempstore              id2 = tempstore
138    
139          #print eis.getSubject().makeString(), ": ", id2.getString()          #print eis.getSubject().makeString(), ": ", id2.getString()
140          #print "----"          #print "----"
141          #print eis.getBody().makeString()          #print eis.getBody().makeString()
142          #print "----"          #print "----"
143      else:      else:
144          headerLinesH = java.util.ArrayList()          headerLinesH = java.util.ArrayList()
145          headerLinesB = java.util.ArrayList()          headerLinesB = java.util.ArrayList()
# Line 168  def storeMail(mail, mediaserver): Line 148  def storeMail(mail, mediaserver):
148    
149          body = msg.fp.read()          body = msg.fp.read()
150          if isConvertible(body , getCharset(msg)):          if isConvertible(body , getCharset(msg)):
151              id = storeBody(mediaserver, msg, body, msgID)              id = storeBody(mediaserver, msg, body, msgID)
152              header = string.join(transformHeader(msg.headers, id), '')              header = string.join(transformHeader(msg.headers, id), '')
153              id2 = mediaserver.addDatum(header, headerLinesH, None, 0)              id2 = mediaserver.addDatum(header, headerLinesH, None, 0)
154          else:          else:
155              header = string.join(msg.headers, '') + '\r\n' + body              header = string.join(msg.headers, '') + '\r\n' + body
156              id2 = mediaserver.addDatum(header, headerLinesH, None, 0)              id2 = mediaserver.addDatum(header, headerLinesH, None, 0)
157    
158          if isReconstructable(mediaserver, id2, tempstore):          if isReconstructable(mediaserver, id2, tempstore):
159              mediaserver.expungeDatum(tempstore)              mediaserver.expungeDatum(tempstore)
160          else:          else:
161              id2 = tempstore              id2 = tempstore
162    
163          #eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2)          #eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2)
164          #print eis.getSubject().makeString(), ": ", id2.getString()          #print eis.getSubject().makeString(), ": ", id2.getString()
165          #print "----"          #print "----"
166          #print eis.getBody().makeString()          #print eis.getBody().makeString()
167          #print "----"          #print "----"
168      mail.close()      mail.close()
169      tMail.close()      tMail.close()
170      return id2      return id2
# Line 198  def isConvertible(body, charset): Line 178  def isConvertible(body, charset):
178          cBody = java.lang.String(body, charset);          cBody = java.lang.String(body, charset);
179      except java.io.UnsupportedEncodingException:      except java.io.UnsupportedEncodingException:
180          print charset, "not supported"          print charset, "not supported"
181          return 0          return 0
182    
183      bBody = cBody.getBytes(charset)      bBody = cBody.getBytes(charset)
184      #if body.equals(bBody):      #if body.equals(bBody):
# Line 215  def isReconstructable(mediaserver, msid, Line 195  def isReconstructable(mediaserver, msid,
195            
196      rec = ""      rec = ""
197      try:      try:
198          print "--------\n-------\n%s-------\n--------\n" % \          #reconstruct(mail, mediaserver, msid, 0)
199                msgZip (reconstruct(mail, mediaserver), str(t))          #print "--------\n-------\n%s-------\n--------\n" % \
200            #      msgZip (reconstruct(mail, mediaserver), str(t))
201            None
202      except:      except:
203          print "Reconverting failed."          print "Reconverting failed."
204          return 1          return 1
205            
206  #    print "\t\t\t", msg.getparam("access-type")  #    print "\t\t\t", msg.getparam("access-type")
207  #    if msg.gettype() == "message/external-body" and string.lower(msg.getparam("access-type")) == "x-storm":  #    if msg.gettype() == "message/external-body" and string.lower(msg.getparam("access-type")) == "x-storm":
208  #        id = msg.getparam("block")[len("storm:block:"):]  #        id = msg.getparam("block")[len("storm:block:"):]
209  #       id = gzz.mediaserver.Mediaserver.Id(id)  #        id = gzz.mediaserver.Mediaserver.Id(id)
210            
211      #print "Reconstruct==>"      #print "Reconstruct==>"
212      #print msg      #print msg
# Line 243  def msgZip(msg1, msg2): Line 225  def msgZip(msg1, msg2):
225    
226      return ret      return ret
227    
228  def reconstruct(mail, mediaserver):  def reconstruct(mail, mediaserver, msid, pos):
229      mail = StringIO.StringIO(mail)      mail    = StringIO.StringIO(mail)
230      msg  = mimetools.Message(mail)      msg     = mimetools.Message(mail)
231      type = msg.gettype()      type    = msg.gettype()
232        msgData = []
233    
234      if type == "message/external-body" and string.lower(msg.getparam("access-type")) == "x-storm":      if type == "message/external-body" and string.lower(msg.getparam("access-type")) == "x-storm":
235          id = msg.getparam("block")[len("storm:block:"):]          pts  = PermanentTextScroll(ms, msid)
236          id = gzz.mediaserver.Mediaserver.Id(id)          id   = msg.getparam("block")[len("storm:block:"):]
237          t = java.lang.String(mediaserver.getDatum(id).getBytes(), "UTF8")  # Noch den Zeichensatz umwandeln          id   = gzz.mediaserver.Mediaserver.Id(id)
238          msgData = msg.fp.read() + str(t)          t    = java.lang.String(mediaserver.getDatum(id).getBytes(), "UTF8")
239            save = msg.fp.read() + str(t)
240    
241            msgData.append(pts.getSpan(pos, len(save)))
242      elif type[:10] == "multipart/":      elif type[:10] == "multipart/":
243          mulmsg = multifile.MultiFile(mail, 0)          mulmsg = multifile.MultiFile(mail, 0)
244          mulmsg.push(msg.getparam("boundary"))          mulmsg.push(msg.getparam("boundary"))
245    
246          msgData = "--%s" % msg.getparam("boundary")          boundary = "--%s" % msg.getparam("boundary")
247            msgData.append(PermanentTextScroll(boundary).getCurrent())
248            #msgData = "--%s" % msg.getparam("boundary")
249    
250          while mulmsg.next():          while mulmsg.next():
251              submsg = mimetools.Message(mulmsg)              submsg = mimetools.Message(mulmsg)
252              msgData += reconstruct(str(submsg) + submsg.fp.read(), mediaserver)              msgSpan = reconstruct(str(submsg) + submsg.fp.read(), mediaserver, msid, pos + len(boundary))
253                msgData.append(msgSpan)
254    
255          msgData += "--%s--" % msg.getparam("boundary")          #msgData += "--%s--" % msg.getparam("boundary")
256            msgData.append(PermanentTextScroll("--%s--" % msg.getparam("boundary")).getCurrent())
257      else:      else:
258          msgData = str(msg) + '\r\n' + msg.fp.read()          msgData = str(msg) + '\r\n' + msg.fp.read()
259    
260      mail.close()      mail.close()
261      return msgData      return msgData
# Line 281  def storeBody(mediaserver, msg, body, ms Line 271  def storeBody(mediaserver, msg, body, ms
271      addDefaultHeaders = 0      addDefaultHeaders = 0
272            
273      if msgtype == "message/rfc822":      if msgtype == "message/rfc822":
274          cbodyid = storeMail(body, mediaserver)          cbodyid = save(mediaserver, body)
275      elif msgtype == "text/plain":      elif msgtype == "text/plain":
276          headerLinesB = java.util.ArrayList()          headerLinesB = java.util.ArrayList()
277          headerLinesB.add('Content-Type: text/plain; charset=UTF-8')          headerLinesB.add('Content-Type: text/plain; charset=UTF-8')
# Line 291  def storeBody(mediaserver, msg, body, ms Line 281  def storeBody(mediaserver, msg, body, ms
281              addDefaultHeaders = 1              addDefaultHeaders = 1
282          headerLinesB.add('Content-Transfer-Encoding: ' + msg.getencoding())          headerLinesB.add('Content-Transfer-Encoding: ' + msg.getencoding())
283                    
284          tBody = java.lang.String(body, getCharset(msg))          tBody = java.lang.String(body, getCharset(msg))
285          cbodyid = mediaserver.addDatum(tBody.getBytes("UTF8"), headerLinesB, None, 0)          cbodyid = mediaserver.addDatum(tBody.getBytes("UTF8"), headerLinesB, None, 0)
286      else:      else:
287          headerLinesB = java.util.ArrayList()          headerLinesB = java.util.ArrayList()
288          headerLinesB.add('Content-Type: ' + msgtype          headerLinesB.add('Content-Type: ' + msgtype
# Line 303  def storeBody(mediaserver, msg, body, ms Line 293  def storeBody(mediaserver, msg, body, ms
293              addDefaultHeaders = 1              addDefaultHeaders = 1
294          headerLinesB.add('Content-Transfer-Encoding: ' + msg.getencoding())          headerLinesB.add('Content-Transfer-Encoding: ' + msg.getencoding())
295                    
296          cbodyid = mediaserver.addDatum(body, headerLinesB, None, addDefaultHeaders)          cbodyid = mediaserver.addDatum(body, headerLinesB, None, addDefaultHeaders)
297    
298      return cbodyid      return cbodyid

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.15

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