from mechanize import Browser
import htmllib, formatter
import vim

class myHTMLParser(htmllib.HTMLParser):
       def __init__(self):
               htmllib.HTMLParser.__init__(self,formatter.NullFormatter())
               self.msg = ""
               self.adding_allowed = 0 
               self.td_count = 0 
               self.valid_tr = 0 
               self.valid_td = 0 
       def start_tr(self, args):
           self.msg += "</TR>" if self.valid_tr == 1 else ''
           self.valid_tr = 0 
           for (k,v) in args:
               if k == 'bgcolor' and v == '#ffffff':
                   self.valid_tr = 1
                   break
       def end_tr(self, *args, **kwargs):
            pass
       def start_td(self, *args, **kwargs):
           if self.valid_tr == 1:
               self.valid_td = 1 
           else:
               self.valid_td = 0 
       def end_td(self, *args, **kwargs):
           if self.valid_tr == 1 and self.valid_td == 1:
               self.msg += "</TD>"
           self.valid_td = 0

       def start_b(self, *args):
           if self.valid_tr == 1 and self.valid_td == 1:
               self.adding_allowed = 1
           else:
               self.adding_allowed = 0 
       def end_b(self, *args):
           self.adding_allowed = 0 
       def handle_data(self,text, *args, **kwargs):
                self.msg += text if self.adding_allowed == 1 else ''


def getMail(username, pwd):
    vim.command("new")
    br = Browser()
    # Ignore robots.txt
    br.set_handle_robots( False )
    # Google demands a user-agent that isn't a robot
    br.addheaders = [('User-agent', 'Firefox')]
    # Retrieve the Gmailpage, saving the response
    br.open( "http://gmail.com" )
    # Select the search box and search for 'foo'

    fms  = br.forms()
    fm = fms.next()

    br.form = fm
    br.form[ 'Email' ] = username
    br.form[ 'Passwd' ] = pwd
    page = br.submit() 
    mailpage = page.read()
    mp = myHTMLParser()
    mp.feed(mailpage)
    mails = []
    mails = mp.msg.split('</TR>')
    maillist = ''
    for mail in mails:
        details = []
        details = mail.split('</TD>')
        maillist = ' |  '.join (details[1:])
        vim.current.buffer.append(maillist.replace('\n',''))
