contact.chatstate becomes contact.our_chatstate
contact.chatstate is now contact's chatstate
This commit is contained in:
parent
ca28ae33f3
commit
508d176d5a
24
src/gajim.py
24
src/gajim.py
|
@ -129,7 +129,7 @@ class Contact:
|
|||
'''Information concerning each contact'''
|
||||
def __init__(self, jid='', name='', groups=[], show='', status='', sub='',
|
||||
ask='', resource='', priority=5, keyID='', role='', affiliation='',
|
||||
chatstate=None):
|
||||
our_chatstate=None, chatstate=None):
|
||||
self.jid = jid
|
||||
self.name = name
|
||||
self.groups = groups
|
||||
|
@ -149,7 +149,9 @@ class Contact:
|
|||
# None if no info about peer
|
||||
# False if peer does not support jep85
|
||||
# 'ask' if we sent the first 'active' chatstate and are waiting for reply
|
||||
# this holds what WE SEND to contact (the current chatstate)
|
||||
# this holds what WE SEND to contact (our current chatstate)
|
||||
self.our_chatstate = our_chatstate
|
||||
# this is contact's chatstate
|
||||
self.chatstate = chatstate
|
||||
|
||||
import roster_window
|
||||
|
@ -353,7 +355,7 @@ class Interface:
|
|||
# reset chatstate if needed:
|
||||
# (when contact signs out or has errors)
|
||||
if array[1] in ('offline', 'error'):
|
||||
contact1.chatstate = None
|
||||
contact1.our_chatstate = contact1.chatstate = None
|
||||
self.roster.chg_contact_status(contact1, array[1], array[2], account)
|
||||
# play sound
|
||||
if old_show < 2 and new_show > 1:
|
||||
|
@ -402,7 +404,8 @@ class Interface:
|
|||
|
||||
|
||||
def handle_event_msg(self, account, array):
|
||||
#('MSG', account, (jid, msg, time, encrypted, msg_type, subject, chatstate))
|
||||
# ('MSG', account, (jid, msg, time, encrypted, msg_type, subject,
|
||||
# chatstate))
|
||||
jid = gajim.get_jid_without_resource(array[0])
|
||||
resource = gajim.get_resource_from_jid(array[0])
|
||||
msg_type = array[4]
|
||||
|
@ -439,17 +442,18 @@ class Interface:
|
|||
if self.instances[account]['chats'].has_key(jid):
|
||||
chat_win = self.instances[account]['chats'][jid]
|
||||
if chatstate is not None: # he or she sent us reply, so he supports jep85
|
||||
if contact.chatstate == 'ask': # we were jep85 disco?
|
||||
contact.chatstate = 'active' # no more
|
||||
contact.chatstate = chatstate
|
||||
if contact.our_chatstate == 'ask': # we were jep85 disco?
|
||||
contact.our_chatstate = 'active' # no more
|
||||
|
||||
chat_win.handle_incoming_chatstate(account, jid, chatstate)
|
||||
chat_win.handle_incoming_chatstate(account, contact)
|
||||
elif contact.chatstate != 'active':
|
||||
# got no valid jep85 answer, peer does not support it
|
||||
contact.chatstate = False
|
||||
else:
|
||||
elif contact and chatstate == 'active':
|
||||
# Brand new message, incoming.
|
||||
if contact and chatstate == 'active':
|
||||
contact.chatstate = chatstate
|
||||
contact.our_chatstate = chatstate
|
||||
contact.chatstate = chatstate
|
||||
|
||||
if not array[1]: #empty message text
|
||||
return
|
||||
|
|
|
@ -254,13 +254,13 @@ class TabbedChatWindow(chat.Chat):
|
|||
|
||||
|
||||
st = gajim.config.get('chat_state_notifications')
|
||||
if chatstate and st in ('composing_only', 'all'):
|
||||
if contact.chatstate and st in ('composing_only', 'all'):
|
||||
if st == 'all':
|
||||
chatstate = helpers.get_uf_chatstate(chatstate)
|
||||
chatstate = helpers.get_uf_chatstate(contact.chatstate)
|
||||
else: # 'composing_only'
|
||||
if chatstate in ('composing', 'paused'):
|
||||
# only print composing, paused
|
||||
chatstate = helpers.get_uf_chatstate(chatstate)
|
||||
chatstate = helpers.get_uf_chatstate(contact.chatstate)
|
||||
else:
|
||||
chatstate = ''
|
||||
label_text = \
|
||||
|
@ -389,6 +389,7 @@ class TabbedChatWindow(chat.Chat):
|
|||
for jid in self.xmls:
|
||||
self.send_chatstate('gone', jid)
|
||||
self.contacts[jid].chatstate = None
|
||||
self.contacts[jid].our_chatstate = None
|
||||
#clean gajim.interface.instances[self.account]['chats']
|
||||
chat.Chat.on_window_destroy(self, widget, 'chats')
|
||||
|
||||
|
@ -435,6 +436,7 @@ class TabbedChatWindow(chat.Chat):
|
|||
# chatstates - tab is destroyed, send gone and reset
|
||||
self.send_chatstate('gone', jid)
|
||||
self.contacts[jid].chatstate = None
|
||||
self.contacts[jid].our_chatstate = None
|
||||
|
||||
chat.Chat.remove_tab(self, jid, 'chats')
|
||||
del self.contacts[jid]
|
||||
|
@ -487,12 +489,11 @@ class TabbedChatWindow(chat.Chat):
|
|||
self.possible_inactive_timeout_id[contact.jid] = gobject.timeout_add(
|
||||
30000, self.check_for_possible_inactive_chatstate, contact.jid)
|
||||
|
||||
def handle_incoming_chatstate(self, account, jid, chatstate):
|
||||
def handle_incoming_chatstate(self, account, contact):
|
||||
''' handle incoming chatstate that jid SENT TO us '''
|
||||
contact = gajim.get_first_contact_instance_from_jid(account, jid)
|
||||
self.draw_name_banner(contact, chatstate)
|
||||
self.draw_name_banner(contact, contact.chatstate)
|
||||
# update chatstate in tab for this chat
|
||||
self.redraw_tab(contact.jid, chatstate)
|
||||
self.redraw_tab(contact.jid, contact.chatstate)
|
||||
|
||||
def check_for_possible_paused_chatstate(self, jid):
|
||||
''' did we move mouse of that window or write something in message
|
||||
|
@ -500,14 +501,15 @@ class TabbedChatWindow(chat.Chat):
|
|||
in the last 5 seconds?
|
||||
if yes we go active for mouse, composing for kbd
|
||||
if no we go paused if we were previously composing '''
|
||||
|
||||
print 'check for pause'
|
||||
contact = gajim.get_first_contact_instance_from_jid(self.account, jid)
|
||||
if jid not in self.xmls or contact is None:
|
||||
# the tab with jid is no longer open or contact left
|
||||
# stop timer
|
||||
return False # stop looping
|
||||
|
||||
current_state = contact.chatstate
|
||||
current_state = contact.our_chatstate
|
||||
print 'current_state', current_state
|
||||
if current_state is False: # jid doesn't support chatstates
|
||||
return False # stop looping
|
||||
|
||||
|
@ -533,12 +535,13 @@ class TabbedChatWindow(chat.Chat):
|
|||
in the last 30 seconds?
|
||||
if yes we go active
|
||||
if no we go inactive '''
|
||||
print 'check for inactive'
|
||||
contact = gajim.get_first_contact_instance_from_jid(self.account, jid)
|
||||
if jid not in self.xmls or contact is None:
|
||||
# the tab with jid is no longer open or contact left
|
||||
return False # stop looping
|
||||
|
||||
current_state = contact.chatstate
|
||||
current_state = contact.our_chatstate
|
||||
if current_state is False: # jid doesn't support chatstates
|
||||
return False # stop looping
|
||||
|
||||
|
@ -672,15 +675,15 @@ class TabbedChatWindow(chat.Chat):
|
|||
if contact.show == 'offline':
|
||||
return
|
||||
|
||||
if contact.chatstate is False: # jid cannot do jep85
|
||||
if contact.our_chatstate is False: # jid cannot do jep85
|
||||
return
|
||||
|
||||
# if the new state we wanna send (state) equals
|
||||
# the current state (contact.chastate) then return
|
||||
if contact.chatstate == state:
|
||||
# the current state (contact.our_chatstate) then return
|
||||
if contact.our_chatstate == state:
|
||||
return
|
||||
|
||||
if contact.chatstate is None:
|
||||
if contact.our_chatstate is None:
|
||||
# we don't know anything about jid, so return
|
||||
# NOTE:
|
||||
# send 'active', set current state to 'ask' and return is done
|
||||
|
@ -689,27 +692,27 @@ class TabbedChatWindow(chat.Chat):
|
|||
# 'active' until we know peer supports jep85
|
||||
return
|
||||
|
||||
if contact.chatstate == 'ask':
|
||||
if contact.our_chatstate == 'ask':
|
||||
return
|
||||
|
||||
# prevent going paused if we we were not composing (JEP violation)
|
||||
if state == 'paused' and not contact.chatstate == 'composing':
|
||||
if state == 'paused' and not contact.our_chatstate == 'composing':
|
||||
gajim.connections[self.account].send_message(jid, None, None,
|
||||
chatstate = 'active') # go active before
|
||||
contact.chatstate = 'active'
|
||||
contact.our_chatstate = 'active'
|
||||
self.reset_kbd_mouse_timeout_vars()
|
||||
|
||||
# if we're inactive prevent composing (JEP violation)
|
||||
if contact.chatstate == 'inactive' and state == 'composing':
|
||||
if contact.our_chatstate == 'inactive' and state == 'composing':
|
||||
gajim.connections[self.account].send_message(jid, None, None,
|
||||
chatstate = 'active') # go active before
|
||||
contact.chatstate = 'active'
|
||||
contact.our_chatstate = 'active'
|
||||
self.reset_kbd_mouse_timeout_vars()
|
||||
|
||||
gajim.connections[self.account].send_message(jid, None, None,
|
||||
chatstate = state)
|
||||
contact.chatstate = state
|
||||
if contact.chatstate == 'active':
|
||||
contact.our_chatstate = state
|
||||
if contact.our_chatstate == 'active':
|
||||
self.reset_kbd_mouse_timeout_vars()
|
||||
|
||||
def send_message(self, message):
|
||||
|
@ -754,21 +757,21 @@ class TabbedChatWindow(chat.Chat):
|
|||
chatstate_to_send = None
|
||||
|
||||
if chatstates_on and contact is not None:
|
||||
if contact.chatstate is None:
|
||||
if contact.our_chatstate is None:
|
||||
# no info about peer
|
||||
# send active to discover chat state capabilities
|
||||
# this is here (and not in send_chatstate)
|
||||
# because we want it sent with REAL message
|
||||
# (not standlone) eg. one that has body
|
||||
chatstate_to_send = 'active'
|
||||
contact.chatstate = 'ask' # pseudo state
|
||||
contact.our_chatstate = 'ask' # pseudo state
|
||||
|
||||
# if peer supports jep85 and we are not 'ask', send 'active'
|
||||
# NOTE: first active and 'ask' is set in gajim.py
|
||||
elif contact.chatstate not in (False, 'ask'):
|
||||
elif contact.our_chatstate not in (False, 'ask'):
|
||||
#send active chatstate on every message (as JEP says)
|
||||
chatstate_to_send = 'active'
|
||||
contact.chatstate = 'active'
|
||||
contact.our_chatstate = 'active'
|
||||
|
||||
# refresh timers
|
||||
# avoid sending composing in less than 5 seconds
|
||||
|
|
Loading…
Reference in New Issue