pm bugfix

This commit is contained in:
Brendan Taylor 2008-05-04 00:24:27 +00:00
parent be0af1a56b
commit 1962b231e6
5 changed files with 48 additions and 42 deletions

View file

@ -1846,6 +1846,7 @@ class ChatControl(ChatControlBase):
self.contact.chatstate = None self.contact.chatstate = None
self.contact.our_chatstate = None self.contact.our_chatstate = None
# terminate session
self.session.control = None self.session.control = None
# Disconnect timer callbacks # Disconnect timer callbacks
@ -2077,12 +2078,11 @@ class ChatControl(ChatControlBase):
# reset to status image in gc if it is a pm # reset to status image in gc if it is a pm
# Is it a pm ? # Is it a pm ?
room_jid, nick = gajim.get_room_and_nick_from_fjid(jid) room_jid, nick = gajim.get_room_and_nick_from_fjid(jid)
# XXX fixme somehow control = gajim.interface.msg_win_mgr.get_gc_control(room_jid, self.account)
# control = gajim.interface.msg_win_mgr.get_control(room_jid, self.account) if control and control.type_id == message_control.TYPE_GC:
# if control and control.type_id == message_control.TYPE_GC: control.update_ui()
# control.update_ui() control.parent_win.show_title()
# control.parent_win.show_title() typ = 'pm'
# typ = 'pm'
self.redraw_after_event_removed(jid) self.redraw_after_event_removed(jid)
if (self.contact.show in ('offline', 'error')): if (self.contact.show in ('offline', 'error')):
@ -2093,8 +2093,8 @@ class ChatControl(ChatControlBase):
len(gajim.contacts.get_contacts(self.account, jid)) < 2): len(gajim.contacts.get_contacts(self.account, jid)) < 2):
gajim.interface.roster.really_remove_contact(self.contact, gajim.interface.roster.really_remove_contact(self.contact,
self.account) self.account)
# elif typ == 'pm': elif typ == 'pm':
# control.remove_contact(nick) control.remove_contact(nick)
def show_bigger_avatar(self, small_avatar): def show_bigger_avatar(self, small_avatar):
'''resizes the avatar, if needed, so it has at max half the screen size '''resizes the avatar, if needed, so it has at max half the screen size

View file

@ -1924,6 +1924,7 @@ class Interface:
if ctrl: if ctrl:
new_sess = gajim.connections[account].make_new_session(str(jid)) new_sess = gajim.connections[account].make_new_session(str(jid))
ctrl.set_session(new_sess) ctrl.set_session(new_sess)
gajim.connections[account].delete_session(str(jid), session.thread_id)
if was_encrypted: if was_encrypted:
ctrl.print_esession_details() ctrl.print_esession_details()

View file

@ -604,7 +604,7 @@ class GroupchatControl(ChatControlBase):
no_queue = len(gajim.events.get_events(self.account, fjid)) == 0 no_queue = len(gajim.events.get_events(self.account, fjid)) == 0
# We print if window is opened # We print if window is opened
pm_control = gajim.interface.msg_win_mgr.get_control(fjid, self.account, session) pm_control = session.control
if pm_control: if pm_control:
pm_control.print_conversation(msg, tim = tim, xhtml = xhtml) pm_control.print_conversation(msg, tim = tim, xhtml = xhtml)
@ -632,7 +632,7 @@ class GroupchatControl(ChatControlBase):
self.parent_win.show_title() self.parent_win.show_title()
self.parent_win.redraw_tab(self) self.parent_win.redraw_tab(self)
else: else:
self._start_private_message(nick, session) self._start_private_message(nick)
# Scroll to line # Scroll to line
self.list_treeview.expand_row(path[0:1], False) self.list_treeview.expand_row(path[0:1], False)
self.list_treeview.scroll_to_cell(path) self.list_treeview.scroll_to_cell(path)
@ -891,10 +891,9 @@ class GroupchatControl(ChatControlBase):
nick = model[iter][C_NICK].decode('utf-8') nick = model[iter][C_NICK].decode('utf-8')
fjid = gajim.construct_fjid(self.room_jid, nick) # 'fake' jid fjid = gajim.construct_fjid(self.room_jid, nick) # 'fake' jid
self._start_private_message(nick) ctrl = self._start_private_message(nick)
if msg: if msg:
gajim.interface.msg_win_mgr.get_control(fjid, self.account).\ ctrl.send_message(msg)
send_message(msg)
def on_send_file(self, widget, gc_contact): def on_send_file(self, widget, gc_contact):
'''sends a file to a contact in the room''' '''sends a file to a contact in the room'''
@ -2041,6 +2040,8 @@ class GroupchatControl(ChatControlBase):
win.set_active_tab(ctrl) win.set_active_tab(ctrl)
win.window.present() win.window.present()
return ctrl
def on_row_activated(self, widget, path): def on_row_activated(self, widget, path):
'''When an iter is activated (dubblick or single click if gnome is set '''When an iter is activated (dubblick or single click if gnome is set
this way''' this way'''

View file

@ -117,24 +117,23 @@ class MessageControl:
return len(gajim.events.get_events(self.account, self.contact.jid)) return len(gajim.events.get_events(self.account, self.contact.jid))
def set_session(self, session): def set_session(self, session):
if hasattr(self, 'session') and session == self.session: oldsession = None
if hasattr(self, 'session'):
oldsession = self.session
if oldsession and session == oldsession:
return return
was_encrypted = False
if hasattr(self, 'session') and self.session:
if self.session.enable_encryption:
was_encrypted = True
gajim.connections[self.account].delete_session(self.session.jid,
self.session.thread_id)
self.session = session self.session = session
if session: if session:
session.control = self session.control = self
if was_encrypted: if oldsession:
self.parent_win.change_thread_key(self.contact.jid,
self.account, oldsession.thread_id, session.thread_id)
if oldsession.enable_encryption:
self.print_esession_details() self.print_esession_details()
def send_message(self, message, keyID = '', type = 'chat', def send_message(self, message, keyID = '', type = 'chat',
@ -144,13 +143,6 @@ class MessageControl:
''' '''
jid = self.contact.jid jid = self.contact.jid
if not self.session:
print('uhoh new session')
fjid = self.contact.get_full_jid()
new_session = gajim.connections[self.account].make_new_session(fjid)
self.set_session(new_session)
# Send and update history # Send and update history
return gajim.connections[self.account].send_message(jid, message, keyID, return gajim.connections[self.account].send_message(jid, message, keyID,
type = type, chatstate = chatstate, msg_id = msg_id, type = type, chatstate = chatstate, msg_id = msg_id,

View file

@ -429,6 +429,7 @@ class MessageWindow(object):
fjid = ctrl.get_full_jid() fjid = ctrl.get_full_jid()
thread_id = ctrl.session.thread_id thread_id = ctrl.session.thread_id
del self._controls[ctrl.account][fjid][thread_id] del self._controls[ctrl.account][fjid][thread_id]
if len(self._controls[ctrl.account][fjid]) == 0: if len(self._controls[ctrl.account][fjid]) == 0:
@ -567,19 +568,30 @@ class MessageWindow(object):
return [] return []
def change_key(self, old_jid, new_jid, acct): def change_key(self, old_jid, new_jid, acct):
'''Change the key of a control''' '''Change the JID key of a control'''
try: try:
# Check if control exists # Check if controls exists
ctrl = self._controls[acct][old_jid] ctrls = self._controls[acct][old_jid]
except: except KeyError:
return return
self._controls[acct][new_jid] = self._controls[acct][old_jid] self._controls[acct][new_jid] = ctrls
del self._controls[acct][old_jid] del self._controls[acct][old_jid]
if old_jid in gajim.last_message_time[acct]: if old_jid in gajim.last_message_time[acct]:
gajim.last_message_time[acct][new_jid] = \ gajim.last_message_time[acct][new_jid] = \
gajim.last_message_time[acct][old_jid] gajim.last_message_time[acct][old_jid]
del gajim.last_message_time[acct][old_jid] del gajim.last_message_time[acct][old_jid]
def change_thread_key(self, jid, acct, old_thread_id, new_thread_id):
'''Change the thread_id key of a control'''
try:
# Check if control exists
ctrl = self._controls[acct][jid][old_thread_id]
except KeyError:
return
self._controls[acct][jid][new_thread_id] = ctrl
del self._controls[acct][jid][old_thread_id]
def controls(self): def controls(self):
for jid_dict in self._controls.values(): for jid_dict in self._controls.values():
for ctrl_dict in jid_dict.values(): for ctrl_dict in jid_dict.values():