split NOTIFY event into NOTIFY and GC_NOTIFY
This commit is contained in:
parent
619ffb95a8
commit
97b75de35b
|
@ -330,25 +330,22 @@ class Connection:
|
|||
|
||||
def _presenceCB(self, con, prs):
|
||||
"""Called when we receive a presence"""
|
||||
who = unicode(prs.getFrom())
|
||||
prio = prs.getPriority()
|
||||
if not prio:
|
||||
prio = 0
|
||||
ptype = prs.getType()
|
||||
if ptype == 'available': ptype = None
|
||||
gajim.log.debug('PresenceCB: %s' % ptype)
|
||||
xtags = prs.getTags('x')
|
||||
is_gc = False # is it a GC presence ?
|
||||
sigTag = None
|
||||
keyID = ''
|
||||
status = prs.getStatus()
|
||||
for xtag in xtags:
|
||||
if xtag.getNamespace() == common.xmpp.NS_SIGNED:
|
||||
xtags = prs.getTags('x')
|
||||
for x in xtags:
|
||||
if x.getNamespace() == common.xmpp.NS_MUC_USER:
|
||||
is_gc = True
|
||||
if x.getNamespace() == common.xmpp.NS_SIGNED:
|
||||
sigTag = xtag
|
||||
break
|
||||
if sigTag and USE_GPG:
|
||||
#verify
|
||||
sigmsg = sigTag.getData()
|
||||
keyID = self.gpg.verify(status, sigmsg)
|
||||
jid_from = prs.getFrom()
|
||||
who = unicode(jid_from)
|
||||
jid_stripped = jid_from.getStripped()
|
||||
resource = jid_from.getResource()
|
||||
status = prs.getStatus()
|
||||
show = prs.getShow()
|
||||
if not show in STATUS_LIST:
|
||||
show = '' # We ignore unknown show
|
||||
|
@ -356,41 +353,14 @@ class Connection:
|
|||
show = 'online'
|
||||
elif ptype == 'unavailable':
|
||||
show = 'offline'
|
||||
elif ptype == 'subscribe':
|
||||
gajim.log.debug('subscribe request from %s' % who)
|
||||
if gajim.config.get('alwaysauth') or who.find("@") <= 0:
|
||||
if self.connection:
|
||||
p = common.xmpp.Presence(who, 'subscribed')
|
||||
p = self.add_sha(p)
|
||||
self.to_be_sent.append(p)
|
||||
if who.find("@") <= 0:
|
||||
self.dispatch('NOTIFY',
|
||||
(prs.getFrom().getStripped(), 'offline', 'offline',
|
||||
prs.getFrom().getResource(), prio, keyID, None, None,
|
||||
None, None, None, None))
|
||||
else:
|
||||
if not status:
|
||||
status = _('I would like to add you to my roster.')
|
||||
self.dispatch('SUBSCRIBE', (who, status))
|
||||
elif ptype == 'subscribed':
|
||||
jid = prs.getFrom()
|
||||
self.dispatch('SUBSCRIBED', (jid.getStripped(), jid.getResource()))
|
||||
# BE CAREFUL: no con.updateRosterItem() in a callback
|
||||
gajim.log.debug(_('we are now subscribed to %s') % who)
|
||||
elif ptype == 'unsubscribe':
|
||||
gajim.log.debug(_('unsubscribe request from %s') % who)
|
||||
elif ptype == 'unsubscribed':
|
||||
gajim.log.debug(_('we are now unsubscribed from %s') % who)
|
||||
self.dispatch('UNSUBSCRIBED', prs.getFrom().getStripped())
|
||||
elif ptype == 'error':
|
||||
|
||||
if is_gc:
|
||||
if ptype == 'error':
|
||||
errmsg = prs.getError()
|
||||
errcode = prs.getErrorCode()
|
||||
if errcode == '502': # Internal Timeout:
|
||||
self.dispatch('NOTIFY', (prs.getFrom().getStripped(),
|
||||
'error', errmsg, prs.getFrom().getResource(),
|
||||
prio, keyID, prs.getRole(), prs.getAffiliation(), prs.getJid(),
|
||||
prs.getReason(), prs.getActor(), prs.getStatusCode(),
|
||||
prs.getNewNick()))
|
||||
self.dispatch('NOTIFY', (jid_stripped, 'error', errmsg, resource,
|
||||
prio, keyID))
|
||||
elif errcode == '401': # password required to join
|
||||
self.dispatch('ERROR', (_('Unable to join room'),
|
||||
_('A password is required to join this room.')))
|
||||
|
@ -413,17 +383,62 @@ class Connection:
|
|||
self.dispatch('ERROR', (_('Unable to join room'),
|
||||
_('Your desired nickname is in use or registered by another user.')))
|
||||
else: # print in the window the error
|
||||
self.dispatch('ERROR_ANSWER', ('', prs.getFrom().getStripped(),
|
||||
self.dispatch('ERROR_ANSWER', ('', jid_stripped,
|
||||
errmsg, errcode))
|
||||
if not ptype or ptype == 'unavailable':
|
||||
jid = unicode(prs.getFrom())
|
||||
gajim.logger.write('status', status, jid, show)
|
||||
account = prs.getFrom().getStripped()
|
||||
resource = prs.getFrom().getResource()
|
||||
self.dispatch('NOTIFY', ( account, show, status,
|
||||
resource, prio, keyID, prs.getRole(),
|
||||
prs.getAffiliation(), prs.getJid(), prs.getReason(),
|
||||
prs.getActor(), prs.getStatusCode(), prs.getNewNick()))
|
||||
gajim.logger.write('status', status, who, show)
|
||||
self.dispatch('GC_NOTIFY', (jid_stripped, show, status, resource,
|
||||
prs.getRole(), prs.getAffiliation(), prs.getJid(),
|
||||
prs.getReason(), prs.getActor(), prs.getStatusCode(),
|
||||
prs.getNewNick()))
|
||||
return
|
||||
|
||||
prio = prs.getPriority()
|
||||
try:
|
||||
prio = int(prio)
|
||||
except:
|
||||
prio = 0
|
||||
keyID = ''
|
||||
if sigTag and USE_GPG:
|
||||
#verify
|
||||
sigmsg = sigTag.getData()
|
||||
keyID = self.gpg.verify(status, sigmsg)
|
||||
if ptype == 'subscribe':
|
||||
gajim.log.debug('subscribe request from %s' % who)
|
||||
if gajim.config.get('alwaysauth') or who.find("@") <= 0:
|
||||
if self.connection:
|
||||
p = common.xmpp.Presence(who, 'subscribed')
|
||||
p = self.add_sha(p)
|
||||
self.to_be_sent.append(p)
|
||||
if who.find("@") <= 0:
|
||||
self.dispatch('NOTIFY',
|
||||
(jid_stripped, 'offline', 'offline', resource, prio, keyID))
|
||||
else:
|
||||
if not status:
|
||||
status = _('I would like to add you to my roster.')
|
||||
self.dispatch('SUBSCRIBE', (who, status))
|
||||
elif ptype == 'subscribed':
|
||||
self.dispatch('SUBSCRIBED', (jid_stripped, resource))
|
||||
# BE CAREFUL: no con.updateRosterItem() in a callback
|
||||
gajim.log.debug(_('we are now subscribed to %s') % who)
|
||||
elif ptype == 'unsubscribe':
|
||||
gajim.log.debug(_('unsubscribe request from %s') % who)
|
||||
elif ptype == 'unsubscribed':
|
||||
gajim.log.debug(_('we are now unsubscribed from %s') % who)
|
||||
self.dispatch('UNSUBSCRIBED', jid_stripped)
|
||||
elif ptype == 'error':
|
||||
errmsg = prs.getError()
|
||||
errcode = prs.getErrorCode()
|
||||
if errcode == '502': # Internal Timeout:
|
||||
self.dispatch('NOTIFY', (jid_stripped, 'error', errmsg, resource,
|
||||
prio, keyID))
|
||||
else: # print in the window the error
|
||||
self.dispatch('ERROR_ANSWER', ('', jid_stripped,
|
||||
errmsg, errcode))
|
||||
if not ptype or ptype == 'unavailable':
|
||||
gajim.logger.write('status', status, jid_stripped, show)
|
||||
self.dispatch('NOTIFY', (jid_stripped, show, status, resource, prio,
|
||||
keyID))
|
||||
# END presenceCB
|
||||
|
||||
def _disconnectedCB(self):
|
||||
|
|
32
src/gajim.py
32
src/gajim.py
|
@ -163,6 +163,7 @@ class Interface:
|
|||
gajim.connections[account].build_http_auth_answer(data[2], answer)
|
||||
|
||||
def handle_event_error_answer(self, account, array):
|
||||
#('ERROR_ANSWER', account, (id, jid_from. errmsg, errcode))
|
||||
id, jid_from, errmsg, errcode = array
|
||||
if unicode(errcode) in ['403', '406'] and id:
|
||||
# show the error dialog
|
||||
|
@ -189,7 +190,6 @@ class Interface:
|
|||
(jid_from, file_props))
|
||||
conn.disconnect_transfer(file_props)
|
||||
return
|
||||
#('ERROR_ANSWER', account, (id, jid_from. errmsg, errcode))
|
||||
if jid_from in self.windows[account]['gc']:
|
||||
self.windows[account]['gc'][jid_from].print_conversation(
|
||||
'Error %s: %s' % (array[2], array[1]), jid_from)
|
||||
|
@ -216,8 +216,7 @@ class Interface:
|
|||
self.remote.raise_signal('AccountPresence', (status, account))
|
||||
|
||||
def handle_event_notify(self, account, array):
|
||||
#('NOTIFY', account, (jid, status, message, resource, priority, keyID,
|
||||
# role, affiliation, real_jid, reason, actor, statusCode, new_nick))
|
||||
#('NOTIFY', account, (jid, status, message, resource, priority, keyID))
|
||||
# if we're here it means contact changed show
|
||||
statuss = ['offline', 'error', 'online', 'chat', 'away', 'xa', 'dnd',
|
||||
'invisible']
|
||||
|
@ -348,16 +347,6 @@ class Interface:
|
|||
self.remote.raise_signal('ContactAbsence', (account, array))
|
||||
# stop non active file transfers
|
||||
|
||||
elif self.windows[account]['gc'].has_key(ji): # ji is then room_jid
|
||||
#it is a groupchat presence
|
||||
#FIXME: upgrade the chat instances (for pm)
|
||||
#FIXME: real_jid can be None
|
||||
self.windows[account]['gc'][ji].chg_contact_status(ji, resource,
|
||||
array[1], array[2], array[6], array[7], array[8], array[9],
|
||||
array[10], array[11], array[12], account)
|
||||
if self.remote and self.remote.is_enabled():
|
||||
self.remote.raise_signal('GCPresence', (account, array))
|
||||
|
||||
def handle_event_msg(self, account, array):
|
||||
#('MSG', account, (jid, msg, time, encrypted, msg_type, subject, chatstate))
|
||||
jid = gajim.get_jid_without_resource(array[0])
|
||||
|
@ -637,6 +626,22 @@ class Interface:
|
|||
if self.remote and self.remote.is_enabled():
|
||||
self.remote.raise_signal('OsInfo', (account, array))
|
||||
|
||||
def handle_event_gc_notify(self, account, array):
|
||||
#('GC_NOTIFY', account, (jid, status, message, resource,
|
||||
# role, affiliation, jid, reason, actor, statusCode, newNick))
|
||||
jid = array[0].split('/')[0]
|
||||
resource = array[3]
|
||||
if not resource:
|
||||
resource = ''
|
||||
if self.windows[account]['gc'].has_key(jid): # ji is then room_jid
|
||||
#FIXME: upgrade the chat instances (for pm)
|
||||
#FIXME: real_jid can be None
|
||||
self.windows[account]['gc'][jid].chg_contact_status(jid, resource,
|
||||
array[1], array[2], array[4], array[5], array[6], array[7],
|
||||
array[8], array[9], array[10], account)
|
||||
if self.remote and self.remote.is_enabled():
|
||||
self.remote.raise_signal('GCPresence', (account, array))
|
||||
|
||||
def handle_event_gc_msg(self, account, array):
|
||||
#('GC_MSG', account, (jid, msg, time))
|
||||
jids = array[0].split('/', 1)
|
||||
|
@ -999,6 +1004,7 @@ class Interface:
|
|||
'MYVCARD': self.handle_event_myvcard,
|
||||
'VCARD': self.handle_event_vcard,
|
||||
'OS_INFO': self.handle_event_os_info,
|
||||
'GC_NOTIFY': self.handle_event_gc_notify,
|
||||
'GC_MSG': self.handle_event_gc_msg,
|
||||
'GC_SUBJECT': self.handle_event_gc_subject,
|
||||
'GC_CONFIG': self.handle_event_gc_config,
|
||||
|
|
Loading…
Reference in New Issue