Author: asterix Date: 2006-06-28 09:27:40 +0200 (Wed, 28 Jun 2006) New Revision: 6518
Modified: trunk/src/dialogs.py trunk/src/roster_window.py Log: * meta contacts over accounts * DND a contact to another group asks to add it in this group Fixes #1515
Modified: trunk/src/dialogs.py =================================================================== --- trunk/src/dialogs.py 2006-06-27 23:12:14 UTC (rev 6517) +++ trunk/src/dialogs.py 2006-06-28 07:27:40 UTC (rev 6518) @@ -80,6 +80,8 @@ return all_jid = gajim.contacts.get_metacontacts_jids(tag) for _account in all_jid: + if not gajim.interface.roster.regroup and _account != self.account: + continue for _jid in all_jid[_account]: c = gajim.contacts.get_first_contact_from_jid(_account, _jid) if not c: @@ -97,6 +99,8 @@ return all_jid = gajim.contacts.get_metacontacts_jids(tag) for _account in all_jid: + if not gajim.interface.roster.regroup and _account != self.account: + continue for _jid in all_jid[_account]: contacts = gajim.contacts.get_contact(_account, _jid) for contact in contacts: @@ -112,6 +116,8 @@ return all_jid = gajim.contacts.get_metacontacts_jids(tag) for _account in all_jid: + if not gajim.interface.roster.regroup and _account != self.account: + continue for _jid in all_jid[_account]: contacts = gajim.contacts.get_contact(_account, _jid) for contact in contacts: @@ -355,7 +361,8 @@
class AddNewContactWindow: '''Class for AddNewContactWindow''' - def __init__(self, account = None, jid = None, user_nick = None): + def __init__(self, account = None, jid = None, user_nick = None, + group = None): self.account = account if account == None: # fill accounts with active accounts @@ -433,11 +440,15 @@ liststore = gtk.ListStore(str) self.group_comboboxentry.set_model(liststore) group_names = [] + i = 0 for acct in accounts: for g in gajim.groups[acct].keys(): if g not in helpers.special_groups and g not in group_names: group_names.append(g) self.group_comboboxentry.append_text(g) + if group == g: + self.group_comboboxentry.set_active(i) + i += 1
if not jid_agents: # There are no transports, so hide the protocol combobox and label
Modified: trunk/src/roster_window.py =================================================================== --- trunk/src/roster_window.py 2006-06-27 23:12:14 UTC (rev 6517) +++ trunk/src/roster_window.py 2006-06-28 07:27:40 UTC (rev 6518) @@ -237,9 +237,8 @@ if family: for data in family: _account = data['account'] - #XXX When we support metacontacts from different servers, make - # sure that loop from #1953 is fixed and remove next 2 lines! - if _account != account: + # Metacontacts over different accounts only in merged mode + if _account != account and not self.regroup: continue _jid = data['jid'] @@ -475,15 +474,18 @@ if icon_name in ('error', 'offline'): # get the icon from the first child as they are sorted by show child_jid = model[child_iter][C_JID].decode('utf-8') + child_account = model[child_iter][C_ACCOUNT].decode('utf-8') child_contact = gajim.contacts.get_contact_with_highest_priority( - account, child_jid) - child_icon_name = helpers.get_icon_name_to_show(child_contact, account) + child_account, child_jid) + child_icon_name = helpers.get_icon_name_to_show(child_contact, + child_account) if child_icon_name not in ('error', 'not in roster'): icon_name = child_icon_name while child_iter: # a child has awaiting messages ? child_jid = model[child_iter][C_JID].decode('utf-8') - if gajim.awaiting_events[account].has_key(child_jid): + child_account = model[child_iter][C_ACCOUNT].decode('utf-8') + if gajim.awaiting_events[child_account].has_key(child_jid): icon_name = 'message' break child_iter = model.iter_next(child_iter) @@ -3032,30 +3034,32 @@ data = model[iter][C_JID] selection.set(selection.target, 8, data)
- def on_drop_in_contact(self, widget, account, c_source, c_dest, - was_big_brother, context, etime): + def on_drop_in_contact(self, widget, account_source, c_source, account_dest, + c_dest, was_big_brother, context, etime): # children must take the new tag too, so remember old tag - old_tag = gajim.contacts.get_metacontacts_tag(account, c_source.jid) + old_tag = gajim.contacts.get_metacontacts_tag(account_source, + c_source.jid) # remove the source row - self.remove_contact(c_source, account) + self.remove_contact(c_source, account_source) # brother inherite big brother groups c_source.groups = [] for g in c_dest.groups: c_source.groups.append(g) - gajim.contacts.add_metacontact(account, c_dest.jid, account, c_source.jid) + gajim.contacts.add_metacontact(account_dest, c_dest.jid, account_source, + c_source.jid) if was_big_brother: # add brothers too all_jid = gajim.contacts.get_metacontacts_jids(old_tag) for _account in all_jid: for _jid in all_jid[_account]: - gajim.contacts.add_metacontact(account, c_dest.jid, _account, - _jid) + gajim.contacts.add_metacontact(account_dest, c_dest.jid, + _account, _jid) _c = gajim.contacts.get_first_contact_from_jid(_account, _jid) self.remove_contact(_c, _account) self.add_contact_to_roster(_jid, _account) self.draw_contact(_jid, _account) - self.add_contact_to_roster(c_source.jid, account) - self.draw_contact(c_dest.jid, account) + self.add_contact_to_roster(c_source.jid, account_source) + self.draw_contact(c_dest.jid, account_dest)
context.finish(True, True, etime)
@@ -3104,10 +3108,10 @@ iter_dest = model.get_iter(path_dest) type_dest = model[iter_dest][C_TYPE].decode('utf-8') jid_dest = model[iter_dest][C_JID].decode('utf-8') - account = model[iter_dest][C_ACCOUNT].decode('utf-8') + account_dest = model[iter_dest][C_ACCOUNT].decode('utf-8')
# if account is not connected, do nothing - if gajim.connections[account].connected < 2: + if gajim.connections[account_dest].connected < 2: return
if info == self.TARGET_TYPE_URI_LIST: @@ -3116,15 +3120,15 @@ return if type_dest != 'contact': return - c_dest = gajim.contacts.get_contact_with_highest_priority(account, + c_dest = gajim.contacts.get_contact_with_highest_priority(account_dest, jid_dest) uri = data.strip() uri_splitted = uri.split() # we may have more than one file dropped for uri in uri_splitted: path = helpers.get_file_path_from_dnd_dropped_uri(uri) if os.path.isfile(path): # is it file? - gajim.interface.instances['file_transfers'].send_file(account, - c_dest, path) + gajim.interface.instances['file_transfers'].send_file( + account_dest, c_dest, path) return
if position == gtk.TREE_VIEW_DROP_BEFORE and len(path_dest) == 2: @@ -3133,19 +3137,11 @@ iter_source = treeview.get_selection().get_selected()[1] path_source = model.get_path(iter_source) type_source = model[iter_source][C_TYPE] - if type_dest == 'account': # dropped on an account - return + account_source = model[iter_source][C_ACCOUNT].decode('utf-8') if type_source != 'contact': # source is not a contact return - source_account = model[iter_source][C_ACCOUNT].decode('utf-8') - disable_meta = False - if account != source_account: # dropped in another account - if self.regroup: - # in merge mode it is ok to change group, but disable meta - account = source_account - disable_meta = True - else: - return + if type_dest == 'account' and account_source == account_dest: + return it = iter_source while model[it][C_TYPE] == 'contact': it = model.iter_parent(it) @@ -3154,36 +3150,47 @@ if grp_source in helpers.special_groups: return jid_source = data.decode('utf-8') - c_source = gajim.contacts.get_contact_with_highest_priority(account, - jid_source) + c_source = gajim.contacts.get_contact_with_highest_priority( + account_source, jid_source) + + grp_dest = None + if type_dest == 'group': + grp_dest = model[iter_dest][C_JID].decode('utf-8') + elif type_dest in ('contact', 'agent'): + it = iter_dest + while model[it][C_TYPE] != 'group': + it = model.iter_parent(it) + grp_dest = model[it][C_JID].decode('utf-8') + + if (type_dest == 'account' or not self.regroup) and \ + account_source != account_dest: + # add contact to this account in that group + dialogs.AddNewContactWindow(account = account_dest, jid = jid_source, + user_nick = c_source.name, group = grp_dest) + return + # Get destination group if type_dest == 'group': - grp_dest = model[iter_dest][C_JID].decode('utf-8') if grp_dest in helpers.special_groups: return if context.action == gtk.gdk.ACTION_COPY: - self.on_drop_in_group(None, account, c_source, grp_dest, context, - etime) + self.on_drop_in_group(None, account_source, c_source, grp_dest, + context, etime) return - self.on_drop_in_group(None, account, c_source, grp_dest, context, - etime, grp_source) + self.on_drop_in_group(None, account_source, c_source, grp_dest, + context, etime, grp_source) return - else: - it = iter_dest - while model[it][C_TYPE] != 'group': - it = model.iter_parent(it) - grp_dest = model[it][C_JID].decode('utf-8') if grp_dest in helpers.special_groups: return if jid_source == jid_dest: - if grp_source == grp_dest: + if grp_source == grp_dest and account_source == account_dest: return if context.action == gtk.gdk.ACTION_COPY: - self.on_drop_in_group(None, account, c_source, grp_dest, context, - etime) + self.on_drop_in_group(None, account_source, c_source, grp_dest, + context, etime) return - self.on_drop_in_group(None, account, c_source, grp_dest, context, - etime, grp_source) + self.on_drop_in_group(None, account_source, c_source, grp_dest, + context, etime, grp_source) return if grp_source == grp_dest: # Add meta contact @@ -3192,7 +3199,7 @@ # if context.action == gtk.gdk.ACTION_COPY: # # Keep only MOVE # return - c_dest = gajim.contacts.get_contact_with_highest_priority(account, + c_dest = gajim.contacts.get_contact_with_highest_priority(account_dest, jid_dest) is_big_brother = False if model.iter_has_child(iter_source): @@ -3200,35 +3207,30 @@ if not c_dest: # c_dest is None if jid_dest doesn't belong to account return - self.on_drop_in_contact(treeview, account, c_source, c_dest, - is_big_brother, context, etime) + self.on_drop_in_contact(treeview, account_source, c_source, + account_dest, c_dest, is_big_brother, context, etime) return # We upgrade only the first user because user2.groups is a pointer to # user1.groups if context.action == gtk.gdk.ACTION_COPY: - self.on_drop_in_group(None, account, c_source, grp_dest, context, - etime) + self.on_drop_in_group(None, account_source, c_source, grp_dest, + context, etime) else: menu = gtk.Menu() item = gtk.MenuItem(_('Drop %s in group %s') % (c_source.name, grp_dest)) - item.connect('activate', self.on_drop_in_group, account, c_source, + item.connect('activate', self.on_drop_in_group, account_dest, c_source, grp_dest, context, etime, grp_source) menu.append(item) - if not disable_meta: - # source and dest account are the same, enable metacontacts - c_dest = gajim.contacts.get_contact_with_highest_priority(account, - jid_dest) - item = gtk.MenuItem(_('Make %s and %s metacontacts') % (c_source.name, - c_dest.name)) - is_big_brother = False - if model.iter_has_child(iter_source): - is_big_brother = True - item.connect('activate', self.on_drop_in_contact, account, c_source, - c_dest, is_big_brother, context, etime) - else: #source and dest account are not the same, disable meta - item = gtk.MenuItem(_('Can't create a metacontact with contacts from two different accounts')) - item.set_sensitive(False) + c_dest = gajim.contacts.get_contact_with_highest_priority( + account_dest, jid_dest) + item = gtk.MenuItem(_('Make %s and %s metacontacts') % (c_source.name, + c_dest.name)) + is_big_brother = False + if model.iter_has_child(iter_source): + is_big_brother = True + item.connect('activate', self.on_drop_in_contact, account_source, + c_source, account_dest, c_dest, is_big_brother, context, etime) menu.append(item)