diff --git a/gajim/config.py b/gajim/config.py index 9a6bb3453..5aa58f7e3 100644 --- a/gajim/config.py +++ b/gajim/config.py @@ -2836,116 +2836,6 @@ class AccountCreationWizardWindow: app.interface.roster.setup_and_draw_roster() gui_menu_builder.build_accounts_menu() -class ManagePEPServicesWindow: - def __init__(self, account): - self.xml = gtkgui_helpers.get_gtk_builder('manage_pep_services_window.ui') - self.window = self.xml.get_object('manage_pep_services_window') - self.window.set_transient_for(app.interface.roster.window) - self.xml.get_object('configure_button').set_sensitive(False) - self.xml.get_object('delete_button').set_sensitive(False) - self.xml.connect_signals(self) - self.account = account - self._con = app.connections[self.account] - - self.init_services() - self.xml.get_object('services_treeview').get_selection().connect( - 'changed', self.on_services_selection_changed) - - app.ged.register_event_handler('pubsub-config-received', ged.GUI1, - self._nec_pep_config_received) - - self.window.show_all() - - def on_manage_pep_services_window_destroy(self, widget): - '''close window''' - del app.interface.instances[self.account]['pep_services'] - app.ged.remove_event_handler('pubsub-config-received', ged.GUI1, - self._nec_pep_config_received) - - def on_close_button_clicked(self, widget): - self.window.destroy() - - def on_services_selection_changed(self, sel): - self.xml.get_object('configure_button').set_sensitive(True) - self.xml.get_object('delete_button').set_sensitive(True) - - def init_services(self): - self.treeview = self.xml.get_object('services_treeview') - # service, access_model, group - self.treestore = Gtk.ListStore(str) - self.treeview.set_model(self.treestore) - - col = Gtk.TreeViewColumn('Service') - self.treeview.append_column(col) - - cellrenderer_text = Gtk.CellRendererText() - col.pack_start(cellrenderer_text, True) - col.add_attribute(cellrenderer_text, 'text', 0) - - jid = self._con.get_own_jid().getStripped() - self._con.get_module('Discovery').disco_items( - jid, success_cb=self._items_received, error_cb=self._items_error) - - def _items_received(self, from_, node, items): - jid = self._con.get_own_jid().getStripped() - for item in items: - if item['jid'] == jid and 'node' in item: - self.treestore.append([item['node']]) - - def _items_error(self, from_, error): - ErrorDialog('Error', error) - - def node_removed(self, jid, node): - if jid != app.get_jid_from_account(self.account): - return - model = self.treeview.get_model() - iter_ = model.get_iter_first() - while iter_: - if model[iter_][0] == node: - model.remove(iter_) - break - iter_ = model.iter_next(iter_) - - def node_not_removed(self, jid, node, msg): - if jid != app.get_jid_from_account(self.account): - return - WarningDialog(_('PEP node was not removed'), - _('PEP node %(node)s was not removed: %(message)s') % {'node': node, - 'message': msg}) - - def on_delete_button_clicked(self, widget): - selection = self.treeview.get_selection() - if not selection: - return - model, iter_ = selection.get_selected() - node = model[iter_][0] - our_jid = app.get_jid_from_account(self.account) - con = app.connections[self.account] - con.get_module('PubSub').send_pb_delete(our_jid, node, - on_ok=self.node_removed, - on_fail=self.node_not_removed) - - def on_configure_button_clicked(self, widget): - selection = self.treeview.get_selection() - if not selection: - return - model, iter_ = selection.get_selected() - node = model[iter_][0] - our_jid = app.get_jid_from_account(self.account) - con = app.connections[self.account] - con.get_module('PubSub').request_pb_configuration(our_jid, node) - - def _nec_pep_config_received(self, obj): - def on_ok(form, node): - form.type_ = 'submit' - our_jid = app.get_jid_from_account(self.account) - con = app.connections[self.account] - con.get_module('PubSub').send_pb_configure(our_jid, node, form) - window = dialogs.DataFormWindow(obj.form, (on_ok, obj.node)) - title = _('Configure %s') % obj.node - window.set_title(title) - window.show_all() - class ManageSoundsWindow: def __init__(self): diff --git a/gajim/gtk/__init__.py b/gajim/gtk/__init__.py index 9ddae92c9..1c2947805 100644 --- a/gajim/gtk/__init__.py +++ b/gajim/gtk/__init__.py @@ -54,3 +54,4 @@ from gajim.gtk.xml_console import XMLConsoleWindow from gajim.gtk.privacy_list import PrivacyListsWindow from gajim.gtk.single_message import SingleMessageWindow from gajim.gtk.server_info import ServerInfoDialog +from gajim.gtk.pep_config import ManagePEPServicesWindow diff --git a/gajim/gtk/pep_config.py b/gajim/gtk/pep_config.py new file mode 100644 index 000000000..4a58361cd --- /dev/null +++ b/gajim/gtk/pep_config.py @@ -0,0 +1,133 @@ +# This file is part of Gajim. +# +# Gajim is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published +# by the Free Software Foundation; version 3 only. +# +# Gajim is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Gajim. If not, see . + +from gi.repository import Gtk + +from gajim.common import app +from gajim.common import ged +from gajim.gtk import ErrorDialog +from gajim.gtk import WarningDialog +from gajim.gtk.util import get_builder + + +class ManagePEPServicesWindow: + def __init__(self, account): + self.xml = get_builder('manage_pep_services_window.ui') + self.window = self.xml.get_object('manage_pep_services_window') + self.window.set_transient_for(app.interface.roster.window) + self.xml.get_object('configure_button').set_sensitive(False) + self.xml.get_object('delete_button').set_sensitive(False) + self.xml.connect_signals(self) + self.account = account + self._con = app.connections[self.account] + + self.init_services() + self.xml.get_object('services_treeview').get_selection().connect( + 'changed', self.on_services_selection_changed) + + app.ged.register_event_handler( + 'pubsub-config-received', ged.GUI1, self._nec_pep_config_received) + + self.window.show_all() + + def on_manage_pep_services_window_destroy(self, widget): + del app.interface.instances[self.account]['pep_services'] + app.ged.remove_event_handler( + 'pubsub-config-received', ged.GUI1, self._nec_pep_config_received) + + def on_close_button_clicked(self, widget): + self.window.destroy() + + def on_services_selection_changed(self, sel): + self.xml.get_object('configure_button').set_sensitive(True) + self.xml.get_object('delete_button').set_sensitive(True) + + def init_services(self): + self.treeview = self.xml.get_object('services_treeview') + # service, access_model, group + self.treestore = Gtk.ListStore(str) + self.treeview.set_model(self.treestore) + + col = Gtk.TreeViewColumn('Service') + self.treeview.append_column(col) + + cellrenderer_text = Gtk.CellRendererText() + col.pack_start(cellrenderer_text, True) + col.add_attribute(cellrenderer_text, 'text', 0) + + jid = self._con.get_own_jid().getStripped() + self._con.get_module('Discovery').disco_items( + jid, success_cb=self._items_received, error_cb=self._items_error) + + def _items_received(self, from_, node, items): + jid = self._con.get_own_jid().getStripped() + for item in items: + if item['jid'] == jid and 'node' in item: + self.treestore.append([item['node']]) + + def _items_error(self, from_, error): + ErrorDialog('Error', error) + + def node_removed(self, jid, node): + if jid != app.get_jid_from_account(self.account): + return + model = self.treeview.get_model() + iter_ = model.get_iter_first() + while iter_: + if model[iter_][0] == node: + model.remove(iter_) + break + iter_ = model.iter_next(iter_) + + def node_not_removed(self, jid, node, msg): + if jid != app.get_jid_from_account(self.account): + return + WarningDialog( + _('PEP node was not removed'), + _('PEP node %(node)s was not removed: %(message)s') % { + 'node': node, 'message': msg}) + + def on_delete_button_clicked(self, widget): + selection = self.treeview.get_selection() + if not selection: + return + model, iter_ = selection.get_selected() + node = model[iter_][0] + our_jid = app.get_jid_from_account(self.account) + con = app.connections[self.account] + con.get_module('PubSub').send_pb_delete(our_jid, node, + on_ok=self.node_removed, + on_fail=self.node_not_removed) + + def on_configure_button_clicked(self, widget): + selection = self.treeview.get_selection() + if not selection: + return + model, iter_ = selection.get_selected() + node = model[iter_][0] + our_jid = app.get_jid_from_account(self.account) + con = app.connections[self.account] + con.get_module('PubSub').request_pb_configuration(our_jid, node) + + def _nec_pep_config_received(self, obj): + def on_ok(form, node): + form.type_ = 'submit' + our_jid = app.get_jid_from_account(self.account) + con = app.connections[self.account] + con.get_module('PubSub').send_pb_configure(our_jid, node, form) + from gajim.dialogs import DataFormWindow + window = DataFormWindow(obj.form, (on_ok, obj.node)) + title = _('Configure %s') % obj.node + window.set_title(title) + window.show_all() diff --git a/gajim/roster_window.py b/gajim/roster_window.py index 73a7ab391..ae373dbab 100644 --- a/gajim/roster_window.py +++ b/gajim/roster_window.py @@ -68,6 +68,7 @@ from gajim.gtk import InformationDialog from gajim.gtk import NonModalConfirmationDialog from gajim.gtk import SingleMessageWindow from gajim.gtk import AddNewContactWindow +from gajim.gtk import ManagePEPServicesWindow from gajim.common.const import AvatarSize @@ -3654,7 +3655,7 @@ class RosterWindow: app.interface.instances[account]['pep_services'].window.present() else: app.interface.instances[account]['pep_services'] = \ - config.ManagePEPServicesWindow(account) + ManagePEPServicesWindow(account) def on_add_new_contact(self, widget, account): AddNewContactWindow(account)