1""" 2 Slixmpp: The Slick XMPP Library 3 Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout 4 This file is part of slixmpp. 5 6 See the file LICENSE for copying permission. 7""" 8 9from slixmpp.xmlstream import ElementBase, register_stanza_plugin 10 11 12class GmailQuery(ElementBase): 13 namespace = 'google:mail:notify' 14 name = 'query' 15 plugin_attrib = 'gmail' 16 interfaces = set(['newer_than_time', 'newer_than_tid', 'search']) 17 18 def get_search(self): 19 return self._get_attr('q', '') 20 21 def set_search(self, search): 22 self._set_attr('q', search) 23 24 def del_search(self): 25 self._del_attr('q') 26 27 def get_newer_than_time(self): 28 return self._get_attr('newer-than-time', '') 29 30 def set_newer_than_time(self, value): 31 self._set_attr('newer-than-time', value) 32 33 def del_newer_than_time(self): 34 self._del_attr('newer-than-time') 35 36 def get_newer_than_tid(self): 37 return self._get_attr('newer-than-tid', '') 38 39 def set_newer_than_tid(self, value): 40 self._set_attr('newer-than-tid', value) 41 42 def del_newer_than_tid(self): 43 self._del_attr('newer-than-tid') 44 45 46class MailBox(ElementBase): 47 namespace = 'google:mail:notify' 48 name = 'mailbox' 49 plugin_attrib = 'gmail_messages' 50 interfaces = set(['result_time', 'url', 'matched', 'estimate']) 51 52 def get_matched(self): 53 return self._get_attr('total-matched', '') 54 55 def get_estimate(self): 56 return self._get_attr('total-estimate', '') == '1' 57 58 def get_result_time(self): 59 return self._get_attr('result-time', '') 60 61 62class MailThread(ElementBase): 63 namespace = 'google:mail:notify' 64 name = 'mail-thread-info' 65 plugin_attrib = 'thread' 66 plugin_multi_attrib = 'threads' 67 interfaces = set(['tid', 'participation', 'messages', 'date', 68 'senders', 'url', 'labels', 'subject', 'snippet']) 69 sub_interfaces = set(['labels', 'subject', 'snippet']) 70 71 def get_senders(self): 72 result = [] 73 senders = self.xml.findall('{%s}senders/{%s}sender' % ( 74 self.namespace, self.namespace)) 75 76 for sender in senders: 77 result.append(MailSender(xml=sender)) 78 79 return result 80 81 82class MailSender(ElementBase): 83 namespace = 'google:mail:notify' 84 name = 'sender' 85 plugin_attrib = name 86 interfaces = set(['address', 'name', 'originator', 'unread']) 87 88 def get_originator(self): 89 return self.xml.attrib.get('originator', '0') == '1' 90 91 def get_unread(self): 92 return self.xml.attrib.get('unread', '0') == '1' 93 94 95class NewMail(ElementBase): 96 namespace = 'google:mail:notify' 97 name = 'new-mail' 98 plugin_attrib = 'gmail_notification' 99 100 101register_stanza_plugin(MailBox, MailThread, iterable=True) 102