use nec / ged to dispatch gmail event
This commit is contained in:
parent
8595638cb4
commit
33c155d889
|
@ -1263,54 +1263,15 @@ ConnectionCaps, ConnectionHandlersBase, ConnectionJingle):
|
||||||
self.connection.send(iq)
|
self.connection.send(iq)
|
||||||
raise common.xmpp.NodeProcessed
|
raise common.xmpp.NodeProcessed
|
||||||
|
|
||||||
def _gMailQueryCB(self, con, gm):
|
def _gMailQueryCB(self, con, iq_obj):
|
||||||
"""
|
"""
|
||||||
Called when we receive results from Querying the server for mail messages
|
Called when we receive results from Querying the server for mail messages
|
||||||
in gmail account
|
in gmail account
|
||||||
"""
|
"""
|
||||||
if not gm.getTag('mailbox'):
|
log.debug('gMailQueryCB')
|
||||||
return
|
gajim.nec.push_incoming_event(GMailQueryReceivedEvent(None,
|
||||||
self.gmail_url = gm.getTag('mailbox').getAttr('url')
|
conn=self, iq_obj=iq_obj))
|
||||||
if gm.getTag('mailbox').getNamespace() == common.xmpp.NS_GMAILNOTIFY:
|
raise common.xmpp.NodeProcessed
|
||||||
newmsgs = gm.getTag('mailbox').getAttr('total-matched')
|
|
||||||
if newmsgs != '0':
|
|
||||||
# there are new messages
|
|
||||||
gmail_messages_list = []
|
|
||||||
if gm.getTag('mailbox').getTag('mail-thread-info'):
|
|
||||||
gmail_messages = gm.getTag('mailbox').getTags('mail-thread-info')
|
|
||||||
for gmessage in gmail_messages:
|
|
||||||
unread_senders = []
|
|
||||||
for sender in gmessage.getTag('senders').getTags('sender'):
|
|
||||||
if sender.getAttr('unread') != '1':
|
|
||||||
continue
|
|
||||||
if sender.getAttr('name'):
|
|
||||||
unread_senders.append(sender.getAttr('name') + '< ' + \
|
|
||||||
sender.getAttr('address') + '>')
|
|
||||||
else:
|
|
||||||
unread_senders.append(sender.getAttr('address'))
|
|
||||||
|
|
||||||
if not unread_senders:
|
|
||||||
continue
|
|
||||||
gmail_subject = gmessage.getTag('subject').getData()
|
|
||||||
gmail_snippet = gmessage.getTag('snippet').getData()
|
|
||||||
tid = int(gmessage.getAttr('tid'))
|
|
||||||
if not self.gmail_last_tid or tid > self.gmail_last_tid:
|
|
||||||
self.gmail_last_tid = tid
|
|
||||||
gmail_messages_list.append({ \
|
|
||||||
'From': unread_senders, \
|
|
||||||
'Subject': gmail_subject, \
|
|
||||||
'Snippet': gmail_snippet, \
|
|
||||||
'url': gmessage.getAttr('url'), \
|
|
||||||
'participation': gmessage.getAttr('participation'), \
|
|
||||||
'messages': gmessage.getAttr('messages'), \
|
|
||||||
'date': gmessage.getAttr('date')})
|
|
||||||
self.gmail_last_time = int(gm.getTag('mailbox').getAttr(
|
|
||||||
'result-time'))
|
|
||||||
|
|
||||||
jid = gajim.get_jid_from_account(self.name)
|
|
||||||
log.debug(('You have %s new gmail e-mails on %s.') % (newmsgs, jid))
|
|
||||||
self.dispatch('GMAIL_NOTIFY', (jid, newmsgs, gmail_messages_list))
|
|
||||||
raise common.xmpp.NodeProcessed
|
|
||||||
|
|
||||||
def _rosterItemExchangeCB(self, con, msg):
|
def _rosterItemExchangeCB(self, con, msg):
|
||||||
"""
|
"""
|
||||||
|
@ -2537,3 +2498,65 @@ class TimeResultReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
return
|
return
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
class GMailQueryReceivedEvent(nec.NetworkIncomingEvent):
|
||||||
|
name = 'gmail-notify'
|
||||||
|
base_network_events = []
|
||||||
|
|
||||||
|
def generate(self):
|
||||||
|
if not self.conn:
|
||||||
|
self.conn = self.base_event.conn
|
||||||
|
if not self.iq_obj:
|
||||||
|
self.iq_obj = self.base_event.xmpp_iq
|
||||||
|
|
||||||
|
if not self.iq_obj.getTag('mailbox'):
|
||||||
|
return
|
||||||
|
mb = self.iq_obj.getTag('mailbox')
|
||||||
|
if not mb.getAttr('url'):
|
||||||
|
return
|
||||||
|
self.conn.gmail_url = mb.getAttr('url')
|
||||||
|
if mb.getNamespace() != common.xmpp.NS_GMAILNOTIFY:
|
||||||
|
return
|
||||||
|
self.newmsgs = mb.getAttr('total-matched')
|
||||||
|
if not self.newmsgs:
|
||||||
|
return
|
||||||
|
if self.newmsgs == '0':
|
||||||
|
return
|
||||||
|
# there are new messages
|
||||||
|
self.gmail_messages_list = []
|
||||||
|
if mb.getTag('mail-thread-info'):
|
||||||
|
gmail_messages = mb.getTags('mail-thread-info')
|
||||||
|
for gmessage in gmail_messages:
|
||||||
|
unread_senders = []
|
||||||
|
for sender in gmessage.getTag('senders').getTags(
|
||||||
|
'sender'):
|
||||||
|
if sender.getAttr('unread') != '1':
|
||||||
|
continue
|
||||||
|
if sender.getAttr('name'):
|
||||||
|
unread_senders.append(sender.getAttr('name') + \
|
||||||
|
'< ' + sender.getAttr('address') + '>')
|
||||||
|
else:
|
||||||
|
unread_senders.append(sender.getAttr('address'))
|
||||||
|
|
||||||
|
if not unread_senders:
|
||||||
|
continue
|
||||||
|
gmail_subject = gmessage.getTag('subject').getData()
|
||||||
|
gmail_snippet = gmessage.getTag('snippet').getData()
|
||||||
|
tid = int(gmessage.getAttr('tid'))
|
||||||
|
if not self.conn.gmail_last_tid or \
|
||||||
|
tid > self.conn.gmail_last_tid:
|
||||||
|
self.conn.gmail_last_tid = tid
|
||||||
|
self.gmail_messages_list.append({
|
||||||
|
'From': unread_senders,
|
||||||
|
'Subject': gmail_subject,
|
||||||
|
'Snippet': gmail_snippet,
|
||||||
|
'url': gmessage.getAttr('url'),
|
||||||
|
'participation': gmessage.getAttr('participation'),
|
||||||
|
'messages': gmessage.getAttr('messages'),
|
||||||
|
'date': gmessage.getAttr('date')})
|
||||||
|
self.conn.gmail_last_time = int(mb.getAttr('result-time'))
|
||||||
|
|
||||||
|
self.jid = gajim.get_jid_from_account(self.name)
|
||||||
|
log.debug(('You have %s new gmail e-mails on %s.') % (self.newmsgs,
|
||||||
|
self.jid))
|
||||||
|
return True
|
|
@ -1288,41 +1288,38 @@ class Interface:
|
||||||
notify.popup(event_type, jid, account, 'file-send-error', path,
|
notify.popup(event_type, jid, account, 'file-send-error', path,
|
||||||
event_type, file_props['name'])
|
event_type, file_props['name'])
|
||||||
|
|
||||||
def handle_event_gmail_notify(self, account, array):
|
def handle_event_gmail_notify(self, obj):
|
||||||
jid = array[0]
|
jid = obj.jid
|
||||||
gmail_new_messages = int(array[1])
|
gmail_new_messages = int(obj.newmsgs)
|
||||||
gmail_messages_list = array[2]
|
gmail_messages_list = obj.gmail_messages_list
|
||||||
if gajim.config.get('notify_on_new_gmail_email'):
|
if not gajim.config.get('notify_on_new_gmail_email'):
|
||||||
path = gtkgui_helpers.get_icon_path('gajim-new_email_recv', 48)
|
return
|
||||||
title = _('New mail on %(gmail_mail_address)s') % \
|
path = gtkgui_helpers.get_icon_path('gajim-new_email_recv', 48)
|
||||||
{'gmail_mail_address': jid}
|
title = _('New mail on %(gmail_mail_address)s') % \
|
||||||
text = i18n.ngettext('You have %d new mail conversation',
|
{'gmail_mail_address': jid}
|
||||||
'You have %d new mail conversations', gmail_new_messages,
|
text = i18n.ngettext('You have %d new mail conversation',
|
||||||
gmail_new_messages, gmail_new_messages)
|
'You have %d new mail conversations', gmail_new_messages,
|
||||||
|
gmail_new_messages, gmail_new_messages)
|
||||||
|
|
||||||
if gajim.config.get('notify_on_new_gmail_email_extra'):
|
if gajim.config.get('notify_on_new_gmail_email_extra'):
|
||||||
cnt = 0
|
cnt = 0
|
||||||
for gmessage in gmail_messages_list:
|
for gmessage in gmail_messages_list:
|
||||||
# FIXME: emulate Gtalk client popups. find out what they
|
# FIXME: emulate Gtalk client popups. find out what they
|
||||||
# parse and how they decide what to show each message has a
|
# parse and how they decide what to show each message has a
|
||||||
# 'From', 'Subject' and 'Snippet' field
|
# 'From', 'Subject' and 'Snippet' field
|
||||||
if cnt >= 5:
|
if cnt >= 5:
|
||||||
break
|
break
|
||||||
senders = ',\n '.join(reversed(gmessage['From']))
|
senders = ',\n '.join(reversed(gmessage['From']))
|
||||||
text += _('\n\nFrom: %(from_address)s\nSubject: '
|
text += _('\n\nFrom: %(from_address)s\nSubject: '
|
||||||
'%(subject)s\n%(snippet)s') % \
|
'%(subject)s\n%(snippet)s') % {'from_address': senders,
|
||||||
{'from_address': senders,
|
'subject': gmessage['Subject'],
|
||||||
'subject': gmessage['Subject'],
|
'snippet': gmessage['Snippet']}
|
||||||
'snippet': gmessage['Snippet']}
|
cnt += 1
|
||||||
cnt += 1
|
|
||||||
|
|
||||||
if gajim.config.get_per('soundevents', 'gmail_received', 'enabled'):
|
if gajim.config.get_per('soundevents', 'gmail_received', 'enabled'):
|
||||||
helpers.play_sound('gmail_received')
|
helpers.play_sound('gmail_received')
|
||||||
notify.popup(_('New E-mail'), jid, account, 'gmail',
|
notify.popup(_('New E-mail'), jid, obj.conn.name, 'gmail',
|
||||||
path_to_image=path, title=title, text=text)
|
path_to_image=path, title=title, text=text)
|
||||||
|
|
||||||
if self.remote_ctrl:
|
|
||||||
self.remote_ctrl.raise_signal('NewGmail', (account, array))
|
|
||||||
|
|
||||||
def handle_event_file_request_error(self, account, array):
|
def handle_event_file_request_error(self, account, array):
|
||||||
# ('FILE_REQUEST_ERROR', account, (jid, file_props, error_msg))
|
# ('FILE_REQUEST_ERROR', account, (jid, file_props, error_msg))
|
||||||
|
@ -2100,7 +2097,6 @@ class Interface:
|
||||||
'CON_TYPE': [self.handle_event_con_type],
|
'CON_TYPE': [self.handle_event_con_type],
|
||||||
'CONNECTION_LOST': [self.handle_event_connection_lost],
|
'CONNECTION_LOST': [self.handle_event_connection_lost],
|
||||||
'FILE_REQUEST': [self.handle_event_file_request],
|
'FILE_REQUEST': [self.handle_event_file_request],
|
||||||
'GMAIL_NOTIFY': [self.handle_event_gmail_notify],
|
|
||||||
'FILE_REQUEST_ERROR': [self.handle_event_file_request_error],
|
'FILE_REQUEST_ERROR': [self.handle_event_file_request_error],
|
||||||
'FILE_SEND_ERROR': [self.handle_event_file_send_error],
|
'FILE_SEND_ERROR': [self.handle_event_file_send_error],
|
||||||
'STANZA_ARRIVED': [self.handle_event_stanza_arrived],
|
'STANZA_ARRIVED': [self.handle_event_stanza_arrived],
|
||||||
|
@ -2146,6 +2142,7 @@ class Interface:
|
||||||
'JINGLE_ERROR': [self.handle_event_jingle_error],
|
'JINGLE_ERROR': [self.handle_event_jingle_error],
|
||||||
'PEP_RECEIVED': [self.handle_event_pep_received],
|
'PEP_RECEIVED': [self.handle_event_pep_received],
|
||||||
'CAPS_RECEIVED': [self.handle_event_caps_received],
|
'CAPS_RECEIVED': [self.handle_event_caps_received],
|
||||||
|
'gmail-notify': [self.handle_event_gmail_notify],
|
||||||
'http-auth-received': [self.handle_event_http_auth],
|
'http-auth-received': [self.handle_event_http_auth],
|
||||||
'last-result-received': [self.handle_event_last_status_time],
|
'last-result-received': [self.handle_event_last_status_time],
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,6 +111,8 @@ class Remote:
|
||||||
self.on_os_info)
|
self.on_os_info)
|
||||||
gajim.ged.register_event_handler('time-result-received', ged.POSTGUI,
|
gajim.ged.register_event_handler('time-result-received', ged.POSTGUI,
|
||||||
self.on_time)
|
self.on_time)
|
||||||
|
gajim.ged.register_event_handler('gmail-nofify', ged.POSTGUI,
|
||||||
|
self.on_gmail_notify)
|
||||||
|
|
||||||
def on_last_status_time(self, obj):
|
def on_last_status_time(self, obj):
|
||||||
self.raise_signal('LastStatusTime', (obj.conn.name, [
|
self.raise_signal('LastStatusTime', (obj.conn.name, [
|
||||||
|
@ -124,6 +126,10 @@ class Remote:
|
||||||
self.raise_signal('EntityTime', (obj.conn.name, [obj.jid, obj.resource,
|
self.raise_signal('EntityTime', (obj.conn.name, [obj.jid, obj.resource,
|
||||||
obj.time_info]))
|
obj.time_info]))
|
||||||
|
|
||||||
|
def on_gmail_notify(self, obj):
|
||||||
|
self.raise_signal('NewGmail', (obj.conn.name, [obj.jid, obj.newmsgs,
|
||||||
|
obj.gmail_messages_list]))
|
||||||
|
|
||||||
def raise_signal(self, signal, arg):
|
def raise_signal(self, signal, arg):
|
||||||
if self.signal_object:
|
if self.signal_object:
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue