Exemplo n.º 1
0
 def poll(self):
     '''Polls the IMAP server. For each new (UNSEEN) message, builds a list of DTO
     message objects and sends said list to the callback function.'''
     interval = self.my_config['interval'] if 'interval' in self.my_config else 60
     
     while(1):
         print "Polling the IMAP server... "
         (retcode, messages) = self.conn.search(None, '(UNSEEN)')
         
         if retcode == 'OK':
             messages = [] if messages[0] == '' else messages
             n_messages = str(len(messages))
             print "OK! Found " + n_messages + " messages.\n"
             
             if len(messages) > 0:
                 for message in messages[0].split(' '):
                     (ret, message_info) = self.conn.fetch(message, '(BODY[HEADER.FIELDS (SUBJECT)])')
                     
                     if(ret == 'OK'):
                         subject = message_info[0][1].replace('Subject: ', '').rstrip()
                         parts = subject.split('|')
                         message_list = []
                         
                         if len(parts) == 5:
                             # Build the message object
                             message = Message()
                             message.type = parts[0]
                             message.published = parts[1]
                             message.story_id = parts[2]
                             message.owner = parts[3]
                             message.site = parts[4]
                             
                             message_list.append(message)
                         
                         if len(message_list) > 0:
                             self.callback(message_list)
                         else:
                             print "Something went wrong...n"
                             
         # Humm, that's nasty...
         sleep(interval)