# viewattach.py # # Allow displaying of attachments import utils import gtk import tempfile import os import ptk.progresswin import ptk.misc_widgets import re from pyneheaders import * def view_attachment(msg, index, user, parent_win): """ Display the attachment. """ attachment_info = msg.get_attachment_info(index) content_type = attachment_info[0] orig_name = attachment_info[1] #attach_size = attachment_into[2] #content_transfer_encoding = attachment_info[3] # Get a temporary filename tempfilename = tempfile.mktemp(orig_name.replace(" ","")) # Decode attachment to this file msg.save_attachment(index, tempfilename) if content_type == "text/html": user.open_url ("file://"+tempfilename) return # See if there are any special mime type handlers for mimehandler in user.mime_types: if mimehandler[0] == "": continue if re.match(mimehandler[0], content_type) == None: continue # Internal pyne handler requested if mimehandler[2] == 1: break else: # Register temp file user.tempfiles.append(tempfilename) args = mimehandler[1].split() args.append(tempfilename) pid = os.fork () if pid == 0: try: os.execvp(args[0], args) except OSError: print "Pyne: Could not find external program '%s'" % args[0] os._exit(0) else: user.register_child (pid) return if content_type[:4] == "text": # Non-image formats... # Read in temporary file f = open(tempfilename, "r") s = f.read() f.close() # Show file in a dodgy textual manner... pager = ptk.progresswin.ProgressWin(_("Viewing attachment ")+orig_name, user) pager.msg_print(utils._u(s)) # Remove temporary file os.remove(tempfilename) return def _key_press(w, event): if event.string == 'q': w.destroy() # Assume others are all images for the moment im = gtk.Image() im.set_from_file(tempfilename) win = gtk.Window() win.set_title(attachment_info[1]) win.add(im) win.connect("key_press_event", _key_press) im.show() win.show() # Remove temporary file os.remove(tempfilename) return