| | 2037 | class RosterItemExchangeWindow: |
| | 2038 | ''' Windows used when someone send you a exchange contact suggestion ''' |
| | 2039 | def __init__(self, account, action, exchange_list, jid_from, message_body): |
| | 2040 | self.account = account |
| | 2041 | self.action = action |
| | 2042 | self.exchange_list = exchange_list |
| | 2043 | self.message_body = message_body |
| | 2044 | self.jid_from = jid_from |
| | 2045 | |
| | 2046 | # Connect to glade |
| | 2047 | self.xml = gtkgui_helpers.get_glade('roster_item_exchange_window.glade') |
| | 2048 | self.window = self.xml.get_widget('roster_item_exchange_window') |
| | 2049 | |
| | 2050 | # Add Widgets. |
| | 2051 | for widget_to_add in ['cancel_button', 'accept_button', 'type_label', |
| | 2052 | 'body_scrolledwidow', 'body_textview', 'items_list_treeview']: |
| | 2053 | self.__dict__[widget_to_add] = self.xml.get_widget(widget_to_add) |
| | 2054 | |
| | 2055 | # Set labels |
| | 2056 | #self.action can be 'add', 'modify' or 'remove' |
| | 2057 | self.type_label.set_label(\ |
| | 2058 | _('<b>%s</b> would like you to <b>%s</b> some contacts in your roster.') \ |
| | 2059 | % (jid_from, _(self.action))) |
| | 2060 | if message_body: |
| | 2061 | buffer = self.body_textview.get_buffer() |
| | 2062 | buffer.set_text(self.message_body) |
| | 2063 | else: |
| | 2064 | self.body_scrolledwindow.hide() |
| | 2065 | # Treeview |
| | 2066 | model = gtk.ListStore(bool, str, str, str, str) |
| | 2067 | self.items_list_treeview.set_model(model) |
| | 2068 | # columns |
| | 2069 | renderer1 = gtk.CellRendererToggle() |
| | 2070 | renderer1.set_property('activatable', True) |
| | 2071 | renderer1.connect('toggled', self.toggled_callback) |
| | 2072 | self.items_list_treeview.insert_column_with_attributes(-1, |
| | 2073 | _(self.action), renderer1, active = 0) |
| | 2074 | renderer2 = gtk.CellRendererText() |
| | 2075 | self.items_list_treeview.insert_column_with_attributes(-1, |
| | 2076 | _('Jabber ID'), renderer2, text = 1) |
| | 2077 | renderer3 = gtk.CellRendererText() |
| | 2078 | self.items_list_treeview.insert_column_with_attributes(-1, |
| | 2079 | _('Name'), renderer3, text = 2) |
| | 2080 | renderer4 = gtk.CellRendererText() |
| | 2081 | self.items_list_treeview.insert_column_with_attributes(-1, |
| | 2082 | _('Groups'), renderer4, text = 3) |
| | 2083 | |
| | 2084 | # Init contacts |
| | 2085 | model = self.items_list_treeview.get_model() |
| | 2086 | model.clear() |
| | 2087 | |
| | 2088 | for jid in self.exchange_list: |
| | 2089 | groups = '' |
| | 2090 | is_in_roster = True |
| | 2091 | contact = gajim.contacts.get_contact_with_highest_priority(\ |
| | 2092 | self.account, jid) |
| | 2093 | if not contact: |
| | 2094 | is_in_roster = False |
| | 2095 | name = self.exchange_list[jid][0] |
| | 2096 | num_list = len(self.exchange_list[jid][1]) |
| | 2097 | current = 0 |
| | 2098 | for group in self.exchange_list[jid][1]: |
| | 2099 | current += 1 |
| | 2100 | if contact and not group in contact.groups: |
| | 2101 | is_in_roster = False |
| | 2102 | if current == num_list: |
| | 2103 | groups = groups + group |
| | 2104 | else: |
| | 2105 | groups = groups + group + ', ' |
| | 2106 | if not is_in_roster: |
| | 2107 | iter = model.append() |
| | 2108 | model.set(iter, 0, True, 1, jid, 2, name, 3, groups) |
| | 2109 | |
| | 2110 | self.window.show_all() |
| | 2111 | |
| | 2112 | self.xml.signal_autoconnect(self) |
| | 2113 | |
| | 2114 | def toggled_callback(self, cell, path): |
| | 2115 | model = self.items_list_treeview.get_model() |
| | 2116 | iter = model.get_iter(path) |
| | 2117 | model[iter][0] = not cell.get_active() |
| | 2118 | |
| | 2119 | def on_accept_button_clicked(self, widget): |
| | 2120 | model = self.items_list_treeview.get_model() |
| | 2121 | iter = model.get_iter_root() |
| | 2122 | if self.action == 'add': |
| | 2123 | a = 0 |
| | 2124 | while iter: |
| | 2125 | if model[iter][0]: |
| | 2126 | a+=1 |
| | 2127 | # it is selected |
| | 2128 | #remote_jid = model[iter][1].decode('utf-8') |
| | 2129 | message = _('%s suggested me to add you in my roster.' % self.jid_from) |
| | 2130 | # keep same groups and same nickname |
| | 2131 | groups = model[iter][3].split(', ') |
| | 2132 | if groups == ['']: |
| | 2133 | groups = [] |
| | 2134 | gajim.interface.roster.req_sub(self, model[iter][1], message, |
| | 2135 | self.account, groups = groups, |
| | 2136 | nickname = model[iter][2], auto_auth = True) |
| | 2137 | iter = model.iter_next(iter) |
| | 2138 | InformationDialog('Added %s contacts' % str(a)) |
| | 2139 | self.window.destroy() |
| | 2140 | |