Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Shirk <travis@pobox.com>2006-01-09 02:14:50 +0300
committerTravis Shirk <travis@pobox.com>2006-01-09 02:14:50 +0300
commita6bdc39d5dce3ceec658aad950893d2fcab38812 (patch)
tree4ef6b2863c8a19604e41e8505652df144b19a597
parent9a247cdc0d56a46f2fbb5bd528e2de8a856c6572 (diff)
Private message bug fixes
-rw-r--r--src/chat_control.py6
-rw-r--r--src/common/contacts.py26
-rwxr-xr-xsrc/gajim.py16
-rw-r--r--src/groupchat_control.py9
-rw-r--r--src/message_window.py12
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)