Philipp Hörist pushed to branch master at gajim / gajim
Commits: 290efab3 by Philipp Hörist at 2020-01-01T08:43:43Z Add plugin-added/plugin-removed events
This is useful as the PluginInstaller plugin does not need to manually add/remove plugins inside the PluginWindow anymore
- - - - - e726b1bb by Philipp Hörist at 2020-01-01T08:47:15Z PluginWindow: Remove log calls when entering a method
This clutters the logs and is rarely useful
- - - - - 82b6cd66 by Philipp Hörist at 2020-01-01T08:48:55Z PluginWindow: add get_notebook()
So plugins can access the notebook more easily
- - - - -
2 changed files:
- gajim/plugins/gui.py - gajim/plugins/pluginmanager.py
Changes:
===================================== gajim/plugins/gui.py ===================================== @@ -31,10 +31,11 @@ from gi.repository import Gdk
from gajim.common import app from gajim.common import configpaths +from gajim.common import ged from gajim.common.exceptions import PluginsystemError from gajim.common.helpers import open_uri +from gajim.common.nec import EventHelper
-from gajim.plugins.helpers import log_calls from gajim.plugins.helpers import GajimPluginActivateException from gajim.plugins.plugins_i18n import _
@@ -55,12 +56,11 @@ class Column(IntEnum): ICON = 4
-class PluginsWindow: - '''Class for Plugins window''' +class PluginsWindow(EventHelper):
- @log_calls('PluginsWindow') def __init__(self): - '''Initialize Plugins window''' + EventHelper.__init__(self) + builder = get_builder('plugins_window.ui') self.window = builder.get_object('plugins_window') self.window.set_transient_for(app.interface.roster.window) @@ -126,13 +126,21 @@ class PluginsWindow: # Adding GUI extension point for Plugins that want to hook the Plugin Window app.plugin_manager.gui_extension_point('plugin_window', self)
+ self.register_events([ + ('plugin-removed', ged.GUI1, self._on_plugin_removed), + ('plugin-added', ged.GUI1, self._on_plugin_added), + ]) + self.window.show_all()
+ def get_notebook(self): + # Used by plugins + return self.plugins_notebook + def on_key_press_event(self, widget, event): if event.keyval == Gdk.KEY_Escape: self.window.destroy()
- @log_calls('PluginsWindow') def installed_plugins_treeview_selection_changed(self, treeview_selection): model, iter_ = treeview_selection.get_selected() if iter_: @@ -174,7 +182,6 @@ class PluginsWindow: self.uninstall_plugin_button.set_property('sensitive', False) self.configure_plugin_button.set_property('sensitive', False)
- @log_calls('PluginsWindow') def fill_installed_plugins_model(self): pm = app.plugin_manager self.installed_plugins_model.clear() @@ -193,7 +200,6 @@ class PluginsWindow: icon = GdkPixbuf.Pixbuf.new_from_file_at_size(icon_file, 16, 16) return icon
- @log_calls('PluginsWindow') def installed_plugins_toggled_cb(self, cell, path): is_active = self.installed_plugins_model[path][Column.ACTIVE] plugin = self.installed_plugins_model[path][Column.PLUGIN] @@ -210,13 +216,12 @@ class PluginsWindow:
self.installed_plugins_model[path][Column.ACTIVE] = not is_active
- @log_calls('PluginsWindow') def on_plugins_window_destroy(self, widget): '''Close window''' + self.unregister_events() app.plugin_manager.remove_gui_extension_point('plugin_window', self) del app.interface.instances['plugins']
- @log_calls('PluginsWindow') def on_configure_plugin_button_clicked(self, widget): selection = self.installed_plugins_treeview.get_selection() model, iter_ = selection.get_selected() @@ -234,7 +239,6 @@ class PluginsWindow: # XXX: maybe throw exception here? pass
- @log_calls('PluginsWindow') def on_uninstall_plugin_button_clicked(self, widget): selection = self.installed_plugins_treeview.get_selection() model, iter_ = selection.get_selected() @@ -246,9 +250,21 @@ class PluginsWindow: WarningDialog(_('Unable to properly remove the plugin'), str(e), self.window) return - model.remove(iter_)
- @log_calls('PluginsWindow') + def _on_plugin_removed(self, event): + for row in self.installed_plugins_model: + if row[Column.PLUGIN] == event.plugin: + self.installed_plugins_model.remove(row.iter) + break + + def _on_plugin_added(self, event): + icon = self.get_plugin_icon(event.plugin) + self.installed_plugins_model.append([event.plugin, + event.plugin.name, + False, + event.plugin.activatable, + icon]) + def on_install_plugin_button_clicked(self, widget): if app.is_flatpak(): open_uri('https://dev.gajim.org/gajim/gajim/wikis/help/flathub') @@ -267,21 +283,6 @@ class PluginsWindow: if not plugin: show_warn_dialog() return - model = self.installed_plugins_model - - for _index, row in enumerate(model): - if plugin == row[Column.PLUGIN]: - model.remove(row.iter) - break - - iter_ = model.append([ - plugin, - plugin.name, - False, - plugin.activatable, - self.get_plugin_icon(plugin)]) - sel = self.installed_plugins_treeview.get_selection() - sel.select_iter(iter_)
NewConfirmationDialog( _('Overwrite Plugin?'), @@ -307,18 +308,11 @@ class PluginsWindow: if not plugin: show_warn_dialog() return - model = self.installed_plugins_model - iter_ = model.append([plugin, plugin.name, False, - plugin.activatable, self.get_plugin_icon(plugin)]) - sel = self.installed_plugins_treeview.get_selection() - sel.select_iter(iter_)
ArchiveChooserDialog(_try_install, transient_for=self.window)
class GajimPluginConfigDialog(Gtk.Dialog): - - @log_calls('GajimPluginConfigDialog') def __init__(self, plugin, **kwargs): Gtk.Dialog.__init__(self, title='%s %s'%(plugin.name, _('Configuration')), **kwargs) @@ -337,7 +331,6 @@ class GajimPluginConfigDialog(Gtk.Dialog): def on_close_button_clicked(self, widget): self.hide()
- @log_calls('GajimPluginConfigDialog') def run(self, parent=None): self.set_transient_for(parent) self.on_run()
===================================== gajim/plugins/pluginmanager.py ===================================== @@ -36,6 +36,7 @@ from gajim.common import app from gajim.common import nec from gajim.common import configpaths from gajim.common import modules +from gajim.common.nec import NetworkEvent from gajim.common.i18n import _ from gajim.common.exceptions import PluginsystemError from gajim.common.helpers import Singleton @@ -192,6 +193,8 @@ class PluginManager(metaclass=Singleton):
self.plugins.append(plugin) plugin.active = False + app.nec.push_incoming_event( + NetworkEvent('plugin-added', plugin=plugin)) else: log.info('Not loading plugin %s v%s from module %s ' '(identified by short name: %s). Plugin already loaded.', @@ -798,11 +801,16 @@ class PluginManager(metaclass=Singleton): ''' Deactivate and remove plugin from `plugins` list ''' - if plugin: - self.remove_plugin(plugin) - self.delete_plugin_files(plugin.__path__) - if self._plugin_has_entry_in_global_config(plugin): - self._remove_plugin_entry_in_global_config(plugin) + if not plugin: + return + + self.remove_plugin(plugin) + self.delete_plugin_files(plugin.__path__) + if self._plugin_has_entry_in_global_config(plugin): + self._remove_plugin_entry_in_global_config(plugin) + + app.nec.push_incoming_event( + NetworkEvent('plugin-removed', plugin=plugin))
def get_plugin_by_path(self, plugin_dir): for plugin in self.plugins:
View it on GitLab: https://dev.gajim.org/gajim/gajim/compare/c3485caf074e0c2e8c15b1542fcf108680...