From a6bdc39d5dce3ceec658aad950893d2fcab38812 Mon Sep 17 00:00:00 2001 From: Travis Shirk Date: Sun, 8 Jan 2006 23:14:50 +0000 Subject: [PATCH] Private message bug fixes --- src/chat_control.py | 6 ++++++ src/common/contacts.py | 26 ++++++-------------------- src/gajim.py | 16 +++++++++++----- src/groupchat_control.py | 9 ++++++--- src/message_window.py | 12 ------------ 5 files changed, 29 insertions(+), 40 deletions(-) diff --git a/src/chat_control.py b/src/chat_control.py index 272bef622..49400496a 100644 --- a/src/chat_control.py +++ b/src/chat_control.py @@ -747,6 +747,9 @@ class ChatControl(ChatControlBase): def _update_banner_state_image(self): contact = gajim.contacts.get_contact_with_highest_priority(self.account, self.contact.jid) + if not contact: + # For transient contacts + contact = self.contact show = contact.show jid = contact.jid @@ -1031,6 +1034,9 @@ class ChatControl(ChatControlBase): else: contact = gajim.contacts.get_contact_with_highest_priority(self.account, self.contact.jid) + if not contact: + # For transient contacts + contact = self.contact tab_img = img_16[contact.show] return tab_img diff --git a/src/common/contacts.py b/src/common/contacts.py index b17747dea..2f222fbed 100644 --- a/src/common/contacts.py +++ b/src/common/contacts.py @@ -99,7 +99,6 @@ class Contacts: def create_contact(self, jid='', name='', groups=[], show='', status='', sub='', ask='', resource='', priority=5, keyID='', our_chatstate=None, chatstate=None): - print "Creating contact:", jid return Contact(jid, name, groups, show, status, sub, ask, resource, priority, keyID, our_chatstate, chatstate) @@ -111,7 +110,6 @@ class Contacts: our_chatstate = contact.our_chatstate, chatstate = contact.chatstate) def add_contact(self, account, contact): - print "Adding contact:", contact.jid # No such account before ? if not self._contacts.has_key(account): self._contacts[account] = {contact.jid : [contact]} @@ -132,7 +130,6 @@ class Contacts: contacts.append(contact) def remove_contact(self, account, contact): - print "Removing contact:", contact.jid if not self._contacts.has_key(account): return if not self._contacts[account].has_key(contact.jid): @@ -141,7 +138,6 @@ class Contacts: self._contacts[account][contact.jid].remove(contact) def remove_jid(self, account, jid): - print "Adding jid:", jid '''Removes all contacts for a given jid''' if not self._contacts.has_key(account): return @@ -169,7 +165,7 @@ class Contacts: def get_contacts_from_jid(self, account, jid): ''' we may have two or more resources on that jid ''' - if jid in self._contacts[account].keys(): + if jid in self._contacts[account]: contacts_instances = self._contacts[account][jid] return contacts_instances return [] @@ -179,14 +175,17 @@ class Contacts: return None prim_contact = contacts[0] for contact in contacts[1:]: - print "checking priority of", contact.jid if int(contact.priority) > int(prim_contact.priority): prim_contact = contact return prim_contact def get_contact_with_highest_priority(self, account, jid): contacts = self.get_contacts_from_jid(account, jid) - print "contacts:", contacts + if not contacts and '/' in jid: + # jid may be a nick jid, try it + room, nick = jid.split('/') + contact = self.get_gc_contact(account, room, nick) + return contact or [] return self.get_highest_prio_contact_from_contacts(contacts) def get_first_contact_from_jid(self, account, jid): @@ -236,12 +235,10 @@ class Contacts: def create_gc_contact(self, room_jid='', name='', show='', status='', role='', affiliation='', jid='', resource=''): - print "Creating GC contact:", room_jid, jid return GC_Contact(room_jid, name, show, status, role, affiliation, jid, resource) def add_gc_contact(self, account, gc_contact): - print "Adding GC contact:", gc_contact.room_jid # No such account before ? if not self._gc_contacts.has_key(account): self._contacts[account] = {gc_contact.room_jid : {gc_contact.name: \ @@ -256,7 +253,6 @@ class Contacts: gc_contact def remove_gc_contact(self, account, gc_contact): - print "Adding GC contact:", gc_contact.room_jid if not self._gc_contacts.has_key(account): return if not self._gc_contacts[account].has_key(gc_contact.room_jid): @@ -270,22 +266,12 @@ class Contacts: del self._gc_contacts[account][gc_contact.room_jid] def remove_room(self, account, room_jid): - print "Removing room:", room_jid if not self._gc_contacts.has_key(account): return if not self._gc_contacts[account].has_key(room_jid): return del self._gc_contacts[account][room_jid] - def get_gc_contact(self, account, room_jid, nick): - if not self._gc_contacts.has_key(account): - return - if not self._gc_contacts[account].has_key(room_jid): - return - if not self._gc_contacts[account][room_jid].has_key(nick): - return - del self._gc_contacts[account][room_jid][nick] - def get_gc_list(self, account): if not self._gc_contacts.has_key(account): return [] diff --git a/src/gajim.py b/src/gajim.py index d9358b763..836138e9d 100755 --- a/src/gajim.py +++ b/src/gajim.py @@ -656,8 +656,9 @@ class Interface: elif resource and gajim.interface.msg_win_mgr.has_window(jid + '/' + resource): win = gajim.interface.msg_win_mgr.get_window(jid + '/' + resource) ctl = win.get_control(jid + '/' + resource) - if win: + if win and ctl.type_id != message_control.TYPE_GC: ctl.show_avatar() + # Show avatar in roster self.roster.draw_avatar(jid, account) if self.remote_ctrl: @@ -696,10 +697,15 @@ class Interface: 'status') ctl.draw_banner() - gc_control = gajim.interface.msg_win_mgr.get_control(room_jid) - if gc_control: - gc_control.chg_contact_status(nick, show, status, array[4], array[5], array[6], - array[7], array[8], array[9], array[10]) + # Get the window and control for the updated status, this may be a PrivateChatControl + control = gajim.interface.msg_win_mgr.get_control(room_jid) + if control: + control.chg_contact_status(nick, show, status, array[4], array[5], array[6], + array[7], array[8], array[9], array[10]) + # Find any PM chat through this room, and tell it to update. + pm_control = gajim.interface.msg_win_mgr.get_control(fjid) + if pm_control: + pm_control.parent_win.redraw_tab(pm_control.contact) if self.remote_ctrl: self.remote_ctrl.raise_signal('GCPresence', (account, array)) diff --git a/src/groupchat_control.py b/src/groupchat_control.py index adc682fc3..9293d8240 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -85,6 +85,7 @@ class PrivateChatControl(ChatControl): ChatControl.send_message(self, message) + class GroupchatControl(ChatControlBase): TYPE_ID = message_control.TYPE_GC @@ -611,10 +612,12 @@ class GroupchatControl(ChatControlBase): '''When an occupant changes his or her status''' if show == 'invisible': return + if not role: role = 'visitor' if not affiliation: affiliation = 'none' + if show in ('offline', 'error'): if statusCode == '307': if actor is None: # do not print 'kicked by None' @@ -676,6 +679,8 @@ class GroupchatControl(ChatControlBase): c.affiliation = affiliation c.status = status self.draw_contact(nick) + + self.parent_win.redraw_tab(self.contact) if (time.time() - self.room_creation) > 30 and \ nick != self.nick and statusCode != '303': if show == 'offline': @@ -1324,9 +1329,7 @@ class GroupchatControl(ChatControlBase): win = gajim.interface.msg_win_mgr.get_window(nick_jid) if not win: - gc_c = gajim.contacts.get_gc_contact(self.account, self.room_jid, nick) - c = gajim.contacts.contact_from_gc_contact(gc_c) - gajim.interface.roster.new_chat(c, self.account) + gajim.interface.roster.new_chat(c, self.account, private_chat = True) win = gajim.interface.msg_win_mgr.get_window(nick_jid) win.set_active_tab(nick_jid) win.window.present() diff --git a/src/message_window.py b/src/message_window.py index ea39d3561..f8f5225eb 100644 --- a/src/message_window.py +++ b/src/message_window.py @@ -127,11 +127,6 @@ class MessageWindow: self.notebook.set_show_tabs(True) self.alignment.set_property('top-padding', 2) - # Connect to keyboard events - #if isinstance(control, ChatControlBase): - # control.msg_textview.connect('mykeypress', - # self._on_message_textview_mykeypress_event) - # Add notebook page and connect up to the tab's close button xml = gtk.glade.XML(GTKGUI_GLADE, 'chat_tab_ebox', APP) tab_label_box = xml.get_widget('chat_tab_ebox') @@ -524,7 +519,6 @@ class MessageWindowMgr: opt_height = type + '-msgwin-height' size = (gajim.config.get(opt_width), gajim.config.get(opt_height)) - print "Window size:", size gtkgui_helpers.resize_window(win.window, size[0], size[1]) def _position_window(self, win, acct, type): @@ -543,7 +537,6 @@ class MessageWindowMgr: pos = (gajim.config.get(type + '-msgwin-x-position'), gajim.config.get(type + '-msgwin-y-position')) - print "Window position:", pos if pos[0] != -1 and pos[1] != -1: gtkgui_helpers.move_window(win.window, pos[0], pos[1]) @@ -606,11 +599,6 @@ class MessageWindowMgr: size_width_key = type + "-msgwin-width" size_height_key = type + "-msgwin-height" - print "saving acct:", acct - print "saving %s=%d" % (pos_x_key, x) - print "saving %s=%d" % (pos_y_key, y) - print "saving %s=%d" % (size_width_key, width) - print "saving %s=%d" % (size_height_key, height) if acct: gajim.config.set_per(pos_x_key, x, acct) gajim.config.set_per(pos_y_key, y, acct)