begin to use the new functions to handle contacts and gc_contacts
This commit is contained in:
parent
a15a6e8e6e
commit
a3d6c3c43f
10
src/chat.py
10
src/chat.py
|
@ -298,9 +298,9 @@ class Chat:
|
|||
def get_message_type(self, jid):
|
||||
if self.widget_name == 'groupchat_window':
|
||||
return 'gc'
|
||||
if gajim.contacts[self.account].has_key(jid):
|
||||
return 'chat'
|
||||
return 'pm'
|
||||
if gajim.contacts.is_pm_from_jid(self.account, jid):
|
||||
return 'pm'
|
||||
return 'chat'
|
||||
|
||||
def on_window_destroy(self, widget, kind): #kind is 'chats' or 'gc'
|
||||
'''clean gajim.interface.instances[self.account][kind]'''
|
||||
|
@ -425,7 +425,7 @@ class Chat:
|
|||
|
||||
if self.widget_name == 'tabbed_chat_window':
|
||||
jid = self.get_active_jid()
|
||||
c = gajim.get_first_contact_instance_from_jid(self.account, jid)
|
||||
c = gajim.contacts.get_first_contact_from_jid(self.account, jid)
|
||||
if _('not in the roster') in c.groups: # for add_to_roster_menuitem
|
||||
childs[5].show()
|
||||
childs[5].set_no_show_all(False)
|
||||
|
@ -463,7 +463,7 @@ class Chat:
|
|||
childs[3].set_active(isactive)
|
||||
childs[3].set_property('sensitive', issensitive)
|
||||
# If we don't have resource, we can't do file transfert
|
||||
c = gajim.get_first_contact_instance_from_jid(self.account, jid)
|
||||
c = gajim.contacts.get_first_contact_from_jid(self.account, jid)
|
||||
if not c.resource:
|
||||
childs[2].set_sensitive(False)
|
||||
else:
|
||||
|
|
|
@ -129,37 +129,28 @@ class Contacts:
|
|||
# It was the last resource of this contact ?
|
||||
if not len(self._contacts[account][contact.jid]):
|
||||
self._contacts[account].remove(contact.jid)
|
||||
|
||||
def create_gc_contact(self, room_jid='', nick='', show='', status='',
|
||||
role='', affiliation='', jid=''):
|
||||
return GC_Contact(room_jid, nick, show, status, role, affiliation, jid)
|
||||
|
||||
def add_gc_contact(self, account, gc_contact):
|
||||
# No such account before ?
|
||||
if not self._gc_contacts.has_key(account):
|
||||
self._contacts[account] = {gc_contact.room_jid : {gc_contact.nick: \
|
||||
gc_contact}}
|
||||
def remove_jid(self, account, jid):
|
||||
'''Removes all contacts for a given jid'''
|
||||
if not self._contacts.has_key(account):
|
||||
return
|
||||
# No such room_jid before ?
|
||||
if not self._gc_contacts[account].has_key(gc_contact.room_jid):
|
||||
self._gc_contacts[account][gc_contact.room_jid] = {gc_contact.nick: \
|
||||
gc_contact}
|
||||
if not self._contacts[account].has_key(contact.jid):
|
||||
return
|
||||
self._gc_contacts[account][gc_contact.room_jid][gc_contact.nick] = \
|
||||
gc_contact
|
||||
del self._contacts[account][jid]
|
||||
|
||||
def remove_gc_contact(self, account, gc_contact):
|
||||
if not self._gc_contacts.has_key(account):
|
||||
return
|
||||
if not self._gc_contacts[account].has_key(gc_contact.room_jid):
|
||||
return
|
||||
if not self._gc_contacts[account][gc_contact.room_jid].has_key(
|
||||
gc_contact.nick):
|
||||
return
|
||||
self._gc_contacts[account][gc_contact.room_jid].remove(gc_contact.nick)
|
||||
# It was the last nick in room ?
|
||||
if not len(self._gc_contacts[account][gc_contact.room_jid]):
|
||||
self._gc_contacts[account].remove(gc_contact.room_jid)
|
||||
def get_contact(self, account, jid, resource = None):
|
||||
'''Returns the list of contact instances for this jid (one per resource)
|
||||
if no resource is given
|
||||
returns the contact instance for the given resource if it's given
|
||||
or None if there is not'''
|
||||
if jid in self._contacts[account]:
|
||||
contacts = self._contacts[account][jid]
|
||||
if not resource:
|
||||
return contacts
|
||||
for c in contacts:
|
||||
if c.resource == resource:
|
||||
return c
|
||||
return None
|
||||
|
||||
def is_subcontact(self, account, contact):
|
||||
if contact.jid in self._sub_contacts[account]:
|
||||
|
@ -213,14 +204,87 @@ class Contacts:
|
|||
parrent_jid)
|
||||
return contact
|
||||
|
||||
def is_pm_from_jid(self, account, jid):
|
||||
'''Returns True if the given jid is a private message jid'''
|
||||
if jid in self._contacts[account]:
|
||||
return False
|
||||
return True
|
||||
|
||||
def is_pm_from_contact(self, account, contact):
|
||||
'''Returns True if the given contact is a private message contact'''
|
||||
if isinstance(contact, Contcat):
|
||||
return False
|
||||
return True
|
||||
|
||||
def get_jid_list(self, account):
|
||||
return self._contacts[account].keys()
|
||||
|
||||
def contact_from_gc_contact(self, gc_contact):
|
||||
'''Create a Contact instance from a GC_Contact instance'''
|
||||
return Contact(jid = gc_contact.get_full_jid(), name = gc_contact.nick,
|
||||
groups = ['none'], show = gc_contact.show, status = gc_contact.status,
|
||||
sub = 'none')
|
||||
|
||||
def is_pm_from_jid(self, account, jid):
|
||||
'''Returns True if the given jid is a private message jid'''
|
||||
if jid in self._contacts[account]:
|
||||
return False
|
||||
return True
|
||||
def create_gc_contact(self, room_jid='', nick='', show='', status='',
|
||||
role='', affiliation='', jid=''):
|
||||
return GC_Contact(room_jid, nick, show, status, role, affiliation, jid)
|
||||
|
||||
def add_gc_contact(self, account, gc_contact):
|
||||
# No such account before ?
|
||||
if not self._gc_contacts.has_key(account):
|
||||
self._contacts[account] = {gc_contact.room_jid : {gc_contact.nick: \
|
||||
gc_contact}}
|
||||
return
|
||||
# No such room_jid before ?
|
||||
if not self._gc_contacts[account].has_key(gc_contact.room_jid):
|
||||
self._gc_contacts[account][gc_contact.room_jid] = {gc_contact.nick: \
|
||||
gc_contact}
|
||||
return
|
||||
self._gc_contacts[account][gc_contact.room_jid][gc_contact.nick] = \
|
||||
gc_contact
|
||||
|
||||
def remove_gc_contact(self, account, gc_contact):
|
||||
if not self._gc_contacts.has_key(account):
|
||||
return
|
||||
if not self._gc_contacts[account].has_key(gc_contact.room_jid):
|
||||
return
|
||||
if not self._gc_contacts[account][gc_contact.room_jid].has_key(
|
||||
gc_contact.nick):
|
||||
return
|
||||
self._gc_contacts[account][gc_contact.room_jid].remove(gc_contact.nick)
|
||||
# It was the last nick in room ?
|
||||
if not len(self._gc_contacts[account][gc_contact.room_jid]):
|
||||
self._gc_contacts[account].remove(gc_contact.room_jid)
|
||||
|
||||
def remove_room(self, account, room_jid):
|
||||
if not self._gc_contacts.has_key(account):
|
||||
return
|
||||
if not self._gc_contacts[account].has_key(room_jid):
|
||||
return
|
||||
self._gc_contacts[account].remove(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
|
||||
self._gc_contacts[account][room_jid].remove(nick)
|
||||
|
||||
def get_gc_list(self, account):
|
||||
if not self._gc_contacts.has_key(account):
|
||||
return []
|
||||
return self._gc_contacts[account].keys()
|
||||
|
||||
def get_nick_list(self, account, room_jid):
|
||||
gc_list = self.get_gc_list(account)
|
||||
if not room_jid in gc_list:
|
||||
return []
|
||||
return self._gc_contacts[account][room_jid].keys()
|
||||
|
||||
def get_gc_contact(self, account, room_jid, nick):
|
||||
nick_list = self.get_nick_list(account, room_jid)
|
||||
if not nick in nick_list:
|
||||
return None
|
||||
return self._gc_contacts[account][room_jid][nick]
|
||||
|
|
|
@ -549,7 +549,7 @@ class PreferencesWindow:
|
|||
# open new tabbed chat windows
|
||||
for jid in jids:
|
||||
if kind == 'chats':
|
||||
c = gajim.get_contact_instance_with_highest_priority(acct, jid)
|
||||
c = gajim.contacts.get_contact_with_highest_priority(acct, jid)
|
||||
gajim.interface.roster.new_chat(c, acct)
|
||||
if kind == 'gc':
|
||||
gajim.interface.roster.new_room(jid, saved_var[jid]['nick'], acct)
|
||||
|
@ -578,7 +578,7 @@ class PreferencesWindow:
|
|||
# open new tabbed chat windows
|
||||
for jid in jids:
|
||||
if kind == 'chats':
|
||||
c = gajim.get_contact_instance_with_highest_priority(acct, jid)
|
||||
c = gajim.contacts.get_contact_with_highest_priority(acct, jid)
|
||||
gajim.interface.roster.new_chat(c, acct)
|
||||
if kind == 'gc':
|
||||
gajim.interface.roster.new_room(jid, saved_var[jid]['nick'], acct)
|
||||
|
@ -1268,8 +1268,6 @@ class AccountModificationWindow:
|
|||
gajim.allow_notifications[name] = \
|
||||
gajim.allow_notifications[self.account]
|
||||
gajim.groups[name] = gajim.groups[self.account]
|
||||
gajim.contacts[name] = gajim.contacts[self.account]
|
||||
gajim.gc_contacts[name] = gajim.gc_contacts[self.account]
|
||||
gajim.gc_connected[name] = gajim.gc_connected[self.account]
|
||||
gajim.newly_added[name] = gajim.newly_added[self.account]
|
||||
gajim.to_be_removed[name] = gajim.to_be_removed[self.account]
|
||||
|
@ -1281,6 +1279,8 @@ class AccountModificationWindow:
|
|||
gajim.status_before_autoaway[self.account]
|
||||
gajim.events_for_ui[name] = gajim.events_for_ui[self.account]
|
||||
|
||||
gajim.contacts.change_account_name(self.account, name)
|
||||
|
||||
#upgrade account variable in opened windows
|
||||
for kind in ('infos', 'disco', 'chats', 'gc', 'gc_config'):
|
||||
for j in gajim.interface.instances[name][kind]:
|
||||
|
@ -1297,8 +1297,6 @@ class AccountModificationWindow:
|
|||
del gajim.nicks[self.account]
|
||||
del gajim.allow_notifications[self.account]
|
||||
del gajim.groups[self.account]
|
||||
del gajim.contacts[self.account]
|
||||
del gajim.gc_contacts[self.account]
|
||||
del gajim.gc_connected[self.account]
|
||||
del gajim.newly_added[self.account]
|
||||
del gajim.to_be_removed[self.account]
|
||||
|
@ -2195,8 +2193,7 @@ class RemoveAccountWindow:
|
|||
del gajim.nicks[self.account]
|
||||
del gajim.allow_notifications[self.account]
|
||||
del gajim.groups[self.account]
|
||||
del gajim.contacts[self.account]
|
||||
del gajim.gc_contacts[self.account]
|
||||
gajim.contacts.remove_account(self.account)
|
||||
del gajim.gc_connected[self.account]
|
||||
del gajim.to_be_removed[self.account]
|
||||
del gajim.newly_added[self.account]
|
||||
|
@ -2737,8 +2734,7 @@ _('You can set advanced account options by pressing Advanced button, or later by
|
|||
gajim.awaiting_events[self.account] = {}
|
||||
gajim.connections[self.account].connected = 0
|
||||
gajim.groups[self.account] = {}
|
||||
gajim.contacts[self.account] = {}
|
||||
gajim.gc_contacts[self.account] = {}
|
||||
gajim.contacts.add_account(self.account)
|
||||
gajim.gc_connected[self.account] = {}
|
||||
gajim.newly_added[self.account] = []
|
||||
gajim.to_be_removed[self.account] = []
|
||||
|
|
|
@ -370,8 +370,8 @@ class ConversationTextview(gtk.TextView):
|
|||
self.on_join_group_chat_menuitem_activate, text)
|
||||
|
||||
allow_add = False
|
||||
if gajim.contacts[self.account].has_key(text):
|
||||
c = gajim.contacts[self.account][text][0]
|
||||
c = gajim.contacts.get_first_contact_from_jid(self.account, text)
|
||||
if c and not gajim.contacts.is_pm_from_contact(self.account, c):
|
||||
if _('not in the roster') in c.groups:
|
||||
allow_add = True
|
||||
else: # he or she's not at all in the account contacts
|
||||
|
|
|
@ -303,10 +303,10 @@ _('Please fill in the data of the contact you want to add in account %s') %accou
|
|||
liststore.append(['Jabber', ''])
|
||||
self.agents = ['Jabber']
|
||||
jid_agents = []
|
||||
for j in gajim.contacts[account]:
|
||||
user = gajim.contacts[account][j][0]
|
||||
if _('Transports') in user.groups and user.show != 'offline' and \
|
||||
user.show != 'error':
|
||||
for j in gajim.contacts.get_jid_list(account):
|
||||
contact = gajim.contacts.get_first_contact_from_jid(account, j)
|
||||
if _('Transports') in contact.groups and contact.show != 'offline' and\
|
||||
contact.show != 'error':
|
||||
jid_agents.append(j)
|
||||
for a in jid_agents:
|
||||
if a.find('aim') > -1:
|
||||
|
@ -381,8 +381,9 @@ _('Please fill in the data of the contact you want to add in account %s') %accou
|
|||
return
|
||||
|
||||
# Check if jid is already in roster
|
||||
if jid in gajim.contacts[self.account] and _('not in the roster') not in \
|
||||
gajim.contacts[self.account][jid][0].groups:
|
||||
if jid in gajim.contacts.get_jid_list(self.account) and \
|
||||
_('not in the roster') not in \
|
||||
gajim.contacts.get_first_contact_from_jid(self.account, jid).groups:
|
||||
ErrorDialog(_('Contact already in roster'),
|
||||
_('This contact is already listed in your roster.')).get_response()
|
||||
return
|
||||
|
@ -628,7 +629,7 @@ class SubscriptionRequestWindow:
|
|||
'''accept the request'''
|
||||
gajim.connections[self.account].send_authorization(self.jid)
|
||||
self.window.destroy()
|
||||
if not gajim.contacts[self.account].has_key(self.jid):
|
||||
if self.jid not in gajim.contacts.get_jid_list(self.account):
|
||||
AddNewContactWindow(self.account, self.jid)
|
||||
|
||||
def on_contact_info_button_clicked(self, widget):
|
||||
|
@ -825,8 +826,8 @@ class PopupNotificationWindow:
|
|||
|
||||
event_type_label.set_markup('<b>' + event_type + '</b>')
|
||||
|
||||
if self.jid in gajim.contacts[account]:
|
||||
txt = gajim.contacts[account][self.jid][0].name
|
||||
if self.jid in gajim.contacts.get_jid_list(account):
|
||||
txt = gajim.contacts.get_first_contact_from_jid(account, self.jid).name
|
||||
else:
|
||||
txt = self.jid
|
||||
|
||||
|
@ -866,7 +867,8 @@ class PopupNotificationWindow:
|
|||
close_button.modify_bg(gtk.STATE_NORMAL, bg_color)
|
||||
eventbox.modify_bg(gtk.STATE_NORMAL, bg_color)
|
||||
event_description_label.set_text(txt)
|
||||
elif event_type in (_('File Transfer Completed'), _('File Transfer Stopped')):
|
||||
elif event_type in (_('File Transfer Completed'),
|
||||
_('File Transfer Stopped')):
|
||||
bg_color = gtk.gdk.color_parse('yellowgreen')
|
||||
close_button.modify_bg(gtk.STATE_NORMAL, bg_color)
|
||||
eventbox.modify_bg(gtk.STATE_NORMAL, bg_color)
|
||||
|
@ -874,8 +876,8 @@ class PopupNotificationWindow:
|
|||
if file_props['type'] == 'r':
|
||||
# get the name of the sender, as it is in the roster
|
||||
sender = unicode(file_props['sender']).split('/')[0]
|
||||
name = gajim.get_first_contact_instance_from_jid(
|
||||
account, sender).name
|
||||
name = gajim.contacts.get_first_contact_from_jid(account,
|
||||
sender).name
|
||||
txt = _('From %s') % name
|
||||
else:
|
||||
receiver = file_props['receiver']
|
||||
|
@ -883,8 +885,8 @@ class PopupNotificationWindow:
|
|||
receiver = receiver.jid
|
||||
receiver = receiver.split('/')[0]
|
||||
# get the name of the contact, as it is in the roster
|
||||
name = gajim.get_first_contact_instance_from_jid(
|
||||
account, receiver).name
|
||||
name = gajim.contacts.get_first_contact_from_jid(account,
|
||||
receiver).name
|
||||
txt = _('To %s') % name
|
||||
else:
|
||||
txt = ''
|
||||
|
@ -928,8 +930,8 @@ class PopupNotificationWindow:
|
|||
return
|
||||
# use Contact class, new_chat expects it that way
|
||||
# is it in the roster?
|
||||
if gajim.contacts[self.account].has_key(self.jid):
|
||||
contact = gajim.get_contact_instance_with_highest_priority(
|
||||
if self.jid in gajim.contacts.get_jid_list(self.account):
|
||||
contact = gajim.contacts.get_contact_with_highest_priority(
|
||||
self.account, self.jid)
|
||||
else:
|
||||
keyID = ''
|
||||
|
|
|
@ -1193,9 +1193,10 @@ class ToplevelAgentBrowser(AgentBrowser):
|
|||
if self.register_button and xmpp.NS_REGISTER in features:
|
||||
# We can register this agent
|
||||
registered_transports = []
|
||||
contacts = gajim.contacts[self.account]
|
||||
for j in contacts:
|
||||
if _('Transports') in contacts[j][0].groups:
|
||||
jid_list = gajim.contacts.get_jid_list(self.account)
|
||||
for j in jid_list:
|
||||
contact = gajim.contacts.get_first_contact_from_jid(self.account, j)
|
||||
if _('Transports') in contact.groups:
|
||||
registered_transports.append(j)
|
||||
if jid in registered_transports:
|
||||
self.register_button.set_label(_('_Edit'))
|
||||
|
|
|
@ -177,7 +177,7 @@ class FileTransfersWindow:
|
|||
helpers.convert_bytes(file_props['size'])
|
||||
if file_props['type'] == 'r':
|
||||
jid = unicode(file_props['sender']).split('/')[0]
|
||||
sender_name = gajim.get_first_contact_instance_from_jid(
|
||||
sender_name = gajim.contacts.get_first_contact_from_jid(
|
||||
file_props['tt_account'], jid).name
|
||||
sender = gtkgui_helpers.escape_for_pango_markup(sender_name)
|
||||
else:
|
||||
|
@ -187,7 +187,7 @@ class FileTransfersWindow:
|
|||
sectext += '\n\t' +_('Recipient: ')
|
||||
if file_props['type'] == 's':
|
||||
jid = unicode(file_props['receiver']).split('/')[0]
|
||||
receiver_name = gajim.get_first_contact_instance_from_jid(
|
||||
receiver_name = gajim.contacts.get_first_contact_from_jid(
|
||||
file_props['tt_account'], jid).name
|
||||
recipient = gtkgui_helpers.escape_for_pango_markup(receiver_name)
|
||||
else:
|
||||
|
|
47
src/gajim.py
47
src/gajim.py
|
@ -276,8 +276,10 @@ class Interface:
|
|||
else:
|
||||
ji = jid
|
||||
# Update contact
|
||||
if gajim.contacts[account].has_key(ji):
|
||||
lcontact = gajim.contacts[account][ji]
|
||||
|
||||
jid_list = gajim.contacts.het_jid_list(account)
|
||||
if ji in jid_list:
|
||||
lcontact = gajim.contacts.get_contacts_from_jid(account, ji)
|
||||
contact1 = None
|
||||
resources = []
|
||||
for c in lcontact:
|
||||
|
@ -291,7 +293,7 @@ class Interface:
|
|||
if old_show == new_show and contact1.status == array[2]: #no change
|
||||
return
|
||||
else:
|
||||
contact1 = gajim.contacts[account][ji][0]
|
||||
contact1 = gajim.contacts.get_first_contact_from_jid(account, ji)
|
||||
if contact1.show in statuss:
|
||||
old_show = statuss.index(contact1.show)
|
||||
if (resources != [''] and (len(lcontact) != 1 or
|
||||
|
@ -324,13 +326,13 @@ class Interface:
|
|||
contact1.keyID = keyID
|
||||
if jid.find('@') <= 0:
|
||||
# It must be an agent
|
||||
if gajim.contacts[account].has_key(ji):
|
||||
if ji in jid_list:
|
||||
# Update existing iter
|
||||
self.roster.draw_contact(ji, account)
|
||||
elif jid == gajim.get_jid_from_account(account):
|
||||
# It's another of our resources. We don't need to see that!
|
||||
return
|
||||
elif gajim.contacts[account].has_key(ji):
|
||||
elif ji in jid_list:
|
||||
# It isn't an agent
|
||||
# reset chatstate if needed:
|
||||
# (when contact signs out or has errors)
|
||||
|
@ -418,7 +420,7 @@ class Interface:
|
|||
return
|
||||
|
||||
# Handle chat states
|
||||
contact = gajim.get_first_contact_instance_from_jid(account, jid)
|
||||
contact = gajim.contacts.get_first_contact_from_jid(account, jid)
|
||||
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
|
||||
|
@ -520,8 +522,8 @@ class Interface:
|
|||
def handle_event_subscribed(self, account, array):
|
||||
#('SUBSCRIBED', account, (jid, resource))
|
||||
jid = array[0]
|
||||
if gajim.contacts[account].has_key(jid):
|
||||
c = gajim.get_first_contact_instance_from_jid(account, jid)
|
||||
if jid in gajim.contacts.get_jid_list(account):
|
||||
c = gajim.contacts.get_first_contact_from_jid(account, jid)
|
||||
c.resource = array[1]
|
||||
self.roster.remove_contact(c, account)
|
||||
if _('not in the roster') in c.groups:
|
||||
|
@ -541,7 +543,7 @@ class Interface:
|
|||
contact1 = gajim.contacts.create_contact(jid = jid, name = name,
|
||||
groups = [_('General')], show = 'online', status = 'online',
|
||||
ask = 'to', resource = array[1], keyID = keyID)
|
||||
gajim.contacts[account][jid] = [contact1]
|
||||
gajim.contacts.add_contact(account, contact1)
|
||||
self.roster.add_contact_to_roster(jid, account)
|
||||
dialogs.InformationDialog(_('Authorization accepted'),
|
||||
_('The contact "%s" has authorized you to see his or her status.')
|
||||
|
@ -748,12 +750,12 @@ class Interface:
|
|||
def handle_event_roster_info(self, account, array):
|
||||
#('ROSTER_INFO', account, (jid, name, sub, ask, groups))
|
||||
jid = array[0]
|
||||
if not gajim.contacts[account].has_key(jid):
|
||||
if not jid in gajim.contacts.get_jid_list(account):
|
||||
return
|
||||
contacts = gajim.contacts[account][jid]
|
||||
contacts = gajim.contacts.get_contacts_from_jid(account, jid)
|
||||
if not (array[2] or array[3]):
|
||||
self.roster.remove_contact(contacts[0], account)
|
||||
del gajim.contacts[account][jid]
|
||||
gajim.contacts.remove_jid(account, jid)
|
||||
#FIXME if it was the only one in its group, remove the group
|
||||
return
|
||||
for contact in contacts:
|
||||
|
@ -860,10 +862,10 @@ class Interface:
|
|||
|
||||
def handle_event_file_request(self, account, array):
|
||||
jid = array[0]
|
||||
if not gajim.contacts[account].has_key(jid):
|
||||
if jid not in gajim.contacts.get_jid_list(account):
|
||||
return
|
||||
file_props = array[1]
|
||||
contact = gajim.contacts[account][jid][0]
|
||||
contact = gajim.contacts.get_first_contact_from_jid(account, jid)
|
||||
|
||||
if gajim.popup_window(account):
|
||||
self.instances['file_transfers'].show_file_request(account, contact,
|
||||
|
@ -1244,20 +1246,22 @@ class Interface:
|
|||
if wins['chats'].has_key(jid):
|
||||
w = wins['chats'][jid]
|
||||
else:
|
||||
self.roster.new_chat(gajim.contacts[account][jid][0], account)
|
||||
contact = gajim.contacts.get_first_contact_from_jid(account, jid)
|
||||
self.roster.new_chat(contact, account)
|
||||
w = wins['chats'][jid]
|
||||
elif typ == 'pm':
|
||||
if wins['chats'].has_key(jid):
|
||||
w = wins['chats'][jid]
|
||||
else:
|
||||
room_jid, nick = jid.split('/', 1)
|
||||
if gajim.gc_contacts[account][room_jid].has_key(nick):
|
||||
show = gajim.gc_contacts[account][room_jid][nick].show
|
||||
gc_contact = gajim.contacts.get_gc_contact(account, room_jid, nick)
|
||||
if gc_contact:
|
||||
show = gc_contact.show
|
||||
else:
|
||||
show = 'offline'
|
||||
gc_c = gajim.contacts.create_gc_contact(room_jid = room_jid,
|
||||
nick = nick, show = show)
|
||||
c = gajim.contacts.contact_from_gc_contct(c)
|
||||
gc_contact = gajim.contacts.create_gc_contact(room_jid = room_jid,
|
||||
nick = nick, show = show)
|
||||
c = gajim.contacts.contact_from_gc_contct(gc_contact)
|
||||
self.roster.new_chat(c, account)
|
||||
w = wins['chats'][jid]
|
||||
elif typ in ('normal', 'file-request', 'file-request-error',
|
||||
|
@ -1338,9 +1342,8 @@ class Interface:
|
|||
for a in gajim.connections:
|
||||
self.instances[a] = {'infos': {}, 'disco': {}, 'chats': {},
|
||||
'gc': {}, 'gc_config': {}}
|
||||
gajim.contacts[a] = {}
|
||||
gajim.contacts.add_account(a)
|
||||
gajim.groups[a] = {}
|
||||
gajim.gc_contacts[a] = {}
|
||||
gajim.gc_connected[a] = {}
|
||||
gajim.newly_added[a] = []
|
||||
gajim.to_be_removed[a] = []
|
||||
|
|
|
@ -120,8 +120,6 @@ class GroupchatWindow(chat.Chat):
|
|||
'nick': self.nicks[room_jid],
|
||||
'model': self.list_treeview[room_jid].get_model(),
|
||||
'subject': self.subjects[room_jid],
|
||||
'contacts': gajim.gc_contacts[self.account][room_jid],
|
||||
'connected': gajim.gc_connected[self.account][room_jid],
|
||||
}
|
||||
|
||||
def load_var(self, room_jid, var):
|
||||
|
@ -131,8 +129,6 @@ class GroupchatWindow(chat.Chat):
|
|||
self.list_treeview[room_jid].expand_all()
|
||||
self.set_subject(room_jid, var['subject'])
|
||||
self.subjects[room_jid] = var['subject']
|
||||
gajim.gc_contacts[self.account][room_jid] = var['contacts']
|
||||
gajim.gc_connected[self.account][room_jid] = var['connected']
|
||||
if gajim.gc_connected[self.account][room_jid]:
|
||||
self.got_connected(room_jid)
|
||||
|
||||
|
@ -193,7 +189,7 @@ class GroupchatWindow(chat.Chat):
|
|||
def on_groupchat_window_destroy(self, widget):
|
||||
chat.Chat.on_window_destroy(self, widget, 'gc')
|
||||
for room_jid in self.xmls:
|
||||
del gajim.gc_contacts[self.account][room_jid]
|
||||
gajim.contacts.remove_room(self.account, room_jid)
|
||||
del gajim.gc_connected[self.account][room_jid]
|
||||
|
||||
def on_groupchat_window_focus_in_event(self, widget, event):
|
||||
|
@ -346,18 +342,15 @@ class GroupchatWindow(chat.Chat):
|
|||
fin = True
|
||||
return None
|
||||
|
||||
def get_nick_list(self, room_jid):
|
||||
'''get nicks of contacts in a room'''
|
||||
return gajim.gc_contacts[self.account][room_jid].keys()
|
||||
|
||||
def remove_contact(self, room_jid, nick):
|
||||
'''Remove a user from the contacts_list'''
|
||||
model = self.list_treeview[room_jid].get_model()
|
||||
iter = self.get_contact_iter(room_jid, nick)
|
||||
if not iter:
|
||||
return
|
||||
if gajim.gc_contacts[self.account][room_jid].has_key(nick):
|
||||
del gajim.gc_contacts[self.account][room_jid][nick]
|
||||
gc_contact = gajim.contacts.get_gc_contact(self.account, room_jid, nick)
|
||||
if gc_contact:
|
||||
gajim.contacts.remove_gc_contact(self.account, gc_contact)
|
||||
parent_iter = model.iter_parent(iter)
|
||||
model.remove(iter)
|
||||
if model.iter_n_children(parent_iter) == 0:
|
||||
|
@ -365,7 +358,6 @@ class GroupchatWindow(chat.Chat):
|
|||
|
||||
def add_contact_to_roster(self, room_jid, nick, show, role, jid, affiliation, status):
|
||||
model = self.list_treeview[room_jid].get_model()
|
||||
resource = ''
|
||||
role_name = helpers.get_uf_role(role, plural = True)
|
||||
|
||||
if jid:
|
||||
|
@ -381,11 +373,11 @@ class GroupchatWindow(chat.Chat):
|
|||
(gajim.interface.roster.jabber_state_images['16']['closed'], 'role', role,
|
||||
'<b>%s</b>' % role_name))
|
||||
iter = model.append(role_iter, (None, 'contact', nick, name))
|
||||
if not gajim.gc_contacts[self.account][room_jid].has_key(nick):
|
||||
gajim.gc_contacts[self.account][room_jid][nick] = \
|
||||
gajim.contacts.create_gc_contact(room_jid = room_jid, nick = nick,
|
||||
show = show, status = status, role = role,
|
||||
if not nick in gajim.contacts.get_nick_list(self.account, room_jid, nick):
|
||||
gc_contact = gajim.contacts.create_gc_contact(room_jid = room_jid,
|
||||
nick = nick, show = show, status = status, role = role,
|
||||
affiliation = affiliation, jid = jid)
|
||||
gajim.contacts.add_gc_contact(self.account, gc_contact)
|
||||
self.draw_contact(room_jid, nick)
|
||||
if nick == self.nicks[room_jid]: # we became online
|
||||
self.got_connected(room_jid)
|
||||
|
@ -398,15 +390,15 @@ class GroupchatWindow(chat.Chat):
|
|||
if not iter:
|
||||
return
|
||||
model = self.list_treeview[room_jid].get_model()
|
||||
contact = gajim.gc_contacts[self.account][room_jid][nick]
|
||||
gc_contact = gajim.contacts.get_gc_contact(self.account, room_jid, nick)
|
||||
state_images = gajim.interface.roster.jabber_state_images['16']
|
||||
if gajim.awaiting_events[self.account].has_key(room_jid + '/' + nick):
|
||||
image = state_images['message']
|
||||
else:
|
||||
image = state_images[contact.show]
|
||||
image = state_images[gc_contact.show]
|
||||
|
||||
name = gtkgui_helpers.escape_for_pango_markup(contact.name)
|
||||
status = contact.status
|
||||
name = gtkgui_helpers.escape_for_pango_markup(gc_contact.name)
|
||||
status = gc_contact.status
|
||||
# add status msg, if not empty, under contact name in the treeview
|
||||
if status and gajim.config.get('show_status_msgs_in_roster'):
|
||||
status = status.strip()
|
||||
|
@ -425,13 +417,11 @@ class GroupchatWindow(chat.Chat):
|
|||
def draw_roster(self, room_jid):
|
||||
model = self.list_treeview[room_jid].get_model()
|
||||
model.clear()
|
||||
for nick in gajim.gc_contacts[self.account][room_jid]:
|
||||
contact = gajim.gc_contacts[self.account][room_jid][nick]
|
||||
fjid = contact.jid
|
||||
if contact.resource:
|
||||
fjid += '/' + contact.resource
|
||||
self.add_contact_to_roster(room_jid, nick, contact.show, contact.role,
|
||||
fjid, contact.affiliation, contact.status)
|
||||
for nick in gajim.contact.get_nick_list(self.account, room_jid)0:
|
||||
gc_contact = gajim.contact.get_gc_contact(self.account, room_jid, nick)
|
||||
self.add_contact_to_roster(room_jid, nick, gc_contact.show,
|
||||
gc_contact.role, gc_contact.jid, gc_contact.affiliation,
|
||||
gc_contact.status)
|
||||
|
||||
def get_role(self, room_jid, nick):
|
||||
if gajim.gc_contacts[self.account][room_jid].has_key(nick):
|
||||
|
@ -487,7 +477,7 @@ class GroupchatWindow(chat.Chat):
|
|||
room_jid + '/' + nick):
|
||||
self.remove_contact(room_jid, nick)
|
||||
else:
|
||||
c = gajim.gc_contacts[self.account][room_jid][nick]
|
||||
c = gajim.contacts.get_gc_contact(self.account, room_jid, nick)
|
||||
c.show = show
|
||||
c.status = status
|
||||
if nick == self.nicks[room_jid] and statusCode != '303': # We became offline
|
||||
|
@ -504,7 +494,7 @@ class GroupchatWindow(chat.Chat):
|
|||
self.add_contact_to_roster(room_jid, nick, show, role, jid,
|
||||
affiliation, status)
|
||||
else:
|
||||
c = gajim.gc_contacts[self.account][room_jid][nick]
|
||||
c = gajim.contacts.get_gc_contact(self.account, room_jid, nick)
|
||||
if c.show == show and c.status == status and \
|
||||
c.affiliation == affiliation: #no change
|
||||
return
|
||||
|
@ -544,7 +534,7 @@ class GroupchatWindow(chat.Chat):
|
|||
# for room_jid & number of unread private msgs with each contact
|
||||
# that we have
|
||||
nb = 0
|
||||
for nick in self.get_nick_list(room_jid):
|
||||
for nick in gajim.contacts.get_nick_list(self.account, room_jid):
|
||||
fjid = room_jid + '/' + nick
|
||||
if gajim.awaiting_events[self.account].has_key(fjid):
|
||||
# gc can only have messages as event
|
||||
|
@ -686,7 +676,8 @@ class GroupchatWindow(chat.Chat):
|
|||
self.nick_hits[room_jid].pop(0)
|
||||
else:
|
||||
self.nick_hits[room_jid] = [] # clear the hit list
|
||||
list_nick = self.get_nick_list(room_jid)
|
||||
list_nick = gajim.contacts.get_nick_list(self.account,
|
||||
room_jid)
|
||||
for nick in list_nick:
|
||||
if nick.lower().startswith(begin.lower()): # the word is the begining of a nick
|
||||
self.nick_hits[room_jid].append(nick)
|
||||
|
@ -804,7 +795,7 @@ class GroupchatWindow(chat.Chat):
|
|||
# example: /query foo
|
||||
if len(message_array):
|
||||
nick = message_array.pop(0)
|
||||
nicks = self.get_nick_list(room_jid)
|
||||
nicks = gajim.contacts.get_nick_list(self.account, room_jid)
|
||||
if nick in nicks:
|
||||
self.on_send_pm(nick = nick)
|
||||
self.clear(message_textview)
|
||||
|
@ -819,7 +810,8 @@ class GroupchatWindow(chat.Chat):
|
|||
if len(message_array):
|
||||
message_array = message_array[0].split()
|
||||
nick = message_array.pop(0)
|
||||
room_nicks = self.get_nick_list(room_jid)
|
||||
room_nicks = gajim.contacts.get_nick_list(self.account,
|
||||
room_jid)
|
||||
if nick in room_nicks:
|
||||
privmsg = ' '.join(message_array)
|
||||
self.on_send_pm(nick=nick, msg=privmsg)
|
||||
|
@ -901,7 +893,8 @@ class GroupchatWindow(chat.Chat):
|
|||
if len(message_array):
|
||||
message_array = message_array[0].split()
|
||||
nick = message_array.pop(0)
|
||||
room_nicks = self.get_nick_list(room_jid)
|
||||
room_nicks = gajim.contacts.get_nick_list(self.account,
|
||||
room_jid)
|
||||
reason = ' '.join(message_array)
|
||||
if nick in room_nicks:
|
||||
ban_jid = gajim.construct_fjid(room_jid, nick)
|
||||
|
@ -921,7 +914,8 @@ class GroupchatWindow(chat.Chat):
|
|||
if len(message_array):
|
||||
message_array = message_array[0].split()
|
||||
nick = message_array.pop(0)
|
||||
room_nicks = self.get_nick_list(room_jid)
|
||||
room_nicks = gajim.contacts.get_nick_list(self.account,
|
||||
room_jid)
|
||||
reason = ' '.join(message_array)
|
||||
if nick in room_nicks:
|
||||
gajim.connections[self.account].gc_set_role(room_jid, nick,
|
||||
|
@ -1159,7 +1153,7 @@ current room topic.') % command, room_jid)
|
|||
|
||||
def on_info(self, widget, room_jid, nick):
|
||||
'''Call vcard_information_window class to display user's information'''
|
||||
c = gajim.gc_contacts[self.account][room_jid][nick]
|
||||
c = gajim.contacts.get_gc_contact(self.account, room_jid, nick)
|
||||
if c.jid and c.resource:
|
||||
# on GC, we know resource only if we're mod and up
|
||||
jid = c.jid
|
||||
|
@ -1190,7 +1184,7 @@ current room topic.') % command, room_jid)
|
|||
room_jid = self.get_active_jid()
|
||||
fjid = gajim.construct_fjid(room_jid, nick) # 'fake' jid
|
||||
if not gajim.interface.instances[self.account]['chats'].has_key(fjid):
|
||||
gc_c = gajim.gc_contacts[self.account][room_jid][nick]
|
||||
gc_c = gajim.contacts.get_gc_contact(self.account, room_jid, nick)
|
||||
gajim.interface.roster.new_chat(gc_c, self.account)
|
||||
|
||||
#make active here in case we need to send a message
|
||||
|
@ -1234,15 +1228,15 @@ current room topic.') % command, room_jid)
|
|||
'''Make contact's popup menu'''
|
||||
model = self.list_treeview[room_jid].get_model()
|
||||
nick = model[iter][C_NICK].decode('utf-8')
|
||||
c = gajim.gc_contacts[self.account][room_jid][nick]
|
||||
c = gajim.contacts.get_gc_contact(self.account, room_jid, nick)
|
||||
jid = c.jid
|
||||
target_affiliation = c.affiliation
|
||||
target_role = c.role
|
||||
|
||||
# looking for user's affiliation and role
|
||||
user_nick = self.nicks[room_jid]
|
||||
user_affiliation = gajim.gc_contacts[self.account][room_jid][user_nick].\
|
||||
affiliation
|
||||
user_affiliation = gajim.contacts.get_gc_contact(self.account, room_jid,
|
||||
user_nick].affiliation
|
||||
user_role = self.get_role(room_jid, user_nick)
|
||||
|
||||
# making menu from glade
|
||||
|
@ -1333,8 +1327,8 @@ current room topic.') % command, room_jid)
|
|||
room_jid, show='offline', status=reason)
|
||||
del self.nicks[room_jid]
|
||||
# They can already be removed by the destroy function
|
||||
if gajim.gc_contacts[self.account].has_key(room_jid):
|
||||
del gajim.gc_contacts[self.account][room_jid]
|
||||
if room_jid in gajim.contacts.get_room_list(self.account):
|
||||
gajim.contacts.remove_room(self.account, room_jid)
|
||||
del gajim.gc_connected[self.account][room_jid]
|
||||
del self.list_treeview[room_jid]
|
||||
del self.subjects[room_jid]
|
||||
|
@ -1350,7 +1344,11 @@ current room topic.') % command, room_jid)
|
|||
def got_disconnected(self, room_jid):
|
||||
model = self.list_treeview[room_jid].get_model()
|
||||
model.clear()
|
||||
gajim.gc_contacts[self.account][room_jid] = {}
|
||||
nick_list = gajim.contacts.get_nick_list(self.account, room_jid)
|
||||
for nick in nick_list:
|
||||
gc_contact = gajim.contacts.get_gc_contact(self.account, room_jid,
|
||||
nick)
|
||||
gajim.contacts.remove_gc_contact(self.account, gc_contact)
|
||||
gajim.gc_connected[self.account][room_jid] = False
|
||||
message_textview = self.message_textviews[room_jid]
|
||||
message_textview.set_sensitive(False)
|
||||
|
@ -1518,7 +1516,7 @@ current room topic.') % command, room_jid)
|
|||
gajim.interface.systray.add_jid(fjid, self.account, 'pm')
|
||||
self.show_title()
|
||||
else:
|
||||
gc_c = gajim.gc_contacts[self.account][room_jid][nick]
|
||||
gc_c = gajim.contacts.get_gc_contact(self.account, room_jid, nick)
|
||||
gajim.interface.roster.new_chat(gc_c, self.account)
|
||||
# Scroll to line
|
||||
self.list_treeview[room_jid].expand_row(path[0:1], False)
|
||||
|
@ -1553,7 +1551,8 @@ current room topic.') % command, room_jid)
|
|||
self.tooltip.id = row
|
||||
nick = model[iter][C_NICK].decode('utf-8')
|
||||
self.tooltip.timeout = gobject.timeout_add(500,
|
||||
self.show_tooltip, gajim.gc_contacts[account][room_jid][nick])
|
||||
self.show_tooltip, gajim.contacts.get_gc_contact(account,
|
||||
room_jid, nick))
|
||||
|
||||
def on_list_treeview_leave_notify_event(self, widget, event):
|
||||
model = widget.get_model()
|
||||
|
@ -1627,7 +1626,8 @@ current room topic.') % command, room_jid)
|
|||
nick = model[iter][C_NICK].decode('utf-8')
|
||||
fjid = gajim.construct_fjid(room_jid, nick)
|
||||
if not gajim.interface.instances[self.account]['chats'].has_key(fjid):
|
||||
gc_c = gajim.gc_contacts[self.account][room_jid][nick]
|
||||
gc_c = gajim.contacts.get_gc_contact(self.account, room_jid,
|
||||
nick)
|
||||
gajim.interface.roster.new_chat(gc_c, self.account)
|
||||
gajim.interface.instances[self.account]['chats'][fjid].set_active_tab(fjid)
|
||||
gajim.interface.instances[self.account]['chats'][fjid].window.present()
|
||||
|
@ -1644,7 +1644,8 @@ current room topic.') % command, room_jid)
|
|||
model = widget.get_model()
|
||||
iter = model.get_iter(path)
|
||||
nick = model[iter][C_NICK].decode('utf-8')
|
||||
if not nick in gajim.gc_contacts[self.account][room_jid]: #it's a group
|
||||
if not nick in gajim.get_nick_list(self.account, room_jid):
|
||||
#it's a group
|
||||
if x < 20: # first cell in 1st column (the arrow SINGLE clicked)
|
||||
if (widget.row_expanded(path)):
|
||||
widget.collapse_row(path)
|
||||
|
@ -1669,9 +1670,9 @@ current room topic.') % command, room_jid)
|
|||
nick = model[iter][C_NICK].decode('utf-8')
|
||||
jid = gajim.construct_fjid(room_jid, nick)
|
||||
if not gajim.interface.instances[self.account]['chats'].has_key(jid):
|
||||
gc_c = gajim.gc_contacts[self.account][room_jid][nick]
|
||||
gc_c = gajim.contacts.get_gc_contact(self.account, room_jid, nick)
|
||||
gajim.interface.roster.new_chat(gc_c, self.account)
|
||||
jid = contact.jid
|
||||
jid = gc_c.jid
|
||||
gajim.interface.instances[self.account]['chats'][jid].set_active_tab(jid)
|
||||
gajim.interface.instances[self.account]['chats'][jid].window.present()
|
||||
|
||||
|
|
Loading…
Reference in New Issue