From 9ecb530b7d6b479d1fb0d2ec24dac45ceea5f3a5 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 29 Dec 2008 13:58:05 -0800 Subject: [PATCH] Add user interface for removing custom plugins --- src/calibre/customize/ui.py | 21 +++++++++++++++++++++ src/calibre/gui2/dialogs/config.py | 10 +++++++++- src/calibre/gui2/dialogs/config.ui | 9 ++++++++- src/calibre/trac/donations/server.py | 2 +- 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/calibre/customize/ui.py b/src/calibre/customize/ui.py index 68e17fd0aa..240621c51e 100644 --- a/src/calibre/customize/ui.py +++ b/src/calibre/customize/ui.py @@ -185,6 +185,20 @@ def add_plugin(path_to_zip_file): initialize_plugins() return plugin +def remove_plugin(plugin_or_name): + name = getattr(plugin_or_name, 'name', plugin_or_name) + plugins = config['plugins'] + removed = False + if name in plugins.keys(): + removed = True + zfp = plugins[name] + if os.path.exists(zfp): + os.remove(zfp) + plugins.pop(name) + config['plugins'] = plugins + initialize_plugins() + return removed + def is_disabled(plugin): return plugin.name in config['disabled_plugins'] @@ -237,6 +251,8 @@ def option_parser(): ''')) parser.add_option('-a', '--add-plugin', default=None, help=_('Add a plugin by specifying the path to the zip file containing it.')) + parser.add_option('-r', '--remove-plugin', default=None, + help=_('Remove a custom plugin by name. Has no effect on builtin plugins')) parser.add_option('--customize-plugin', default=None, help=_('Customize plugin. Specify name of plugin and customization string separated by a comma.')) parser.add_option('-l', '--list-plugins', default=False, action='store_true', @@ -267,6 +283,11 @@ def main(args=sys.argv): if opts.add_plugin is not None: plugin = add_plugin(opts.add_plugin) print 'Plugin added:', plugin.name, plugin.version + if opts.remove_plugin is not None: + if remove_plugin(opts.remove_plugin): + print 'Plugin removed' + else: + print 'No custom pluginnamed', opts.remove_plugin if opts.customize_plugin is not None: name, custom = opts.customize_plugin.split(',') plugin = find_plugin(name.strip()) diff --git a/src/calibre/gui2/dialogs/config.py b/src/calibre/gui2/dialogs/config.py index 82b07e81e7..def355d974 100644 --- a/src/calibre/gui2/dialogs/config.py +++ b/src/calibre/gui2/dialogs/config.py @@ -20,7 +20,7 @@ from calibre.ebooks.epub.iterator import is_supported from calibre.library import server_config from calibre.customize.ui import initialized_plugins, is_disabled, enable_plugin, \ disable_plugin, customize_plugin, \ - plugin_customization, add_plugin + plugin_customization, add_plugin, remove_plugin class PluginModel(QAbstractItemModel): @@ -242,6 +242,7 @@ class ConfigDialog(QDialog, Ui_Dialog): self.plugin_view.setModel(self._plugin_model) self.connect(self.toggle_plugin, SIGNAL('clicked()'), lambda : self.modify_plugin(op='toggle')) self.connect(self.customize_plugin, SIGNAL('clicked()'), lambda : self.modify_plugin(op='customize')) + self.connect(self.remove_plugin, SIGNAL('clicked()'), lambda : self.modify_plugin(op='remove')) self.connect(self.button_plugin_browse, SIGNAL('clicked()'), self.find_plugin) self.connect(self.button_plugin_add, SIGNAL('clicked()'), self.add_plugin) @@ -287,6 +288,13 @@ class ConfigDialog(QDialog, Ui_Dialog): if ok: customize_plugin(plugin, unicode(text)) self._plugin_model.refresh_plugin(plugin) + if op == 'remove': + if remove_plugin(plugin): + self._plugin_model.populate() + self._plugin_model.reset() + else: + error_dialog(self, _('Cannot remove builtin plugin'), + plugin.name + _(' cannot be removed. It is a builtin plugin. Try disabling it instead.')).exec_() def up_column(self): diff --git a/src/calibre/gui2/dialogs/config.ui b/src/calibre/gui2/dialogs/config.ui index 05b66cac88..99c74fc345 100644 --- a/src/calibre/gui2/dialogs/config.ui +++ b/src/calibre/gui2/dialogs/config.ui @@ -72,7 +72,7 @@ - 0 + 4 @@ -811,6 +811,13 @@ + + + + &Remove plugin + + + diff --git a/src/calibre/trac/donations/server.py b/src/calibre/trac/donations/server.py index 2472524e95..18771d6fdf 100644 --- a/src/calibre/trac/donations/server.py +++ b/src/calibre/trac/donations/server.py @@ -199,7 +199,7 @@ class Server(object): x = list(range(days-1, -1, -1)) y = stats.daily_totals ax.plot(x, y)#, align='center', width=20, color='g') - ax.set_xlabel('Day') + ax.set_xlabel('Days ago') ax.set_ylabel('Income ($)') ax.hlines([stats.daily_average], 0, days-1) ax.set_xlim([0, days-1])