From 9b05ec8b5fd3dcb863b4b56fb3c74bee61373967 Mon Sep 17 00:00:00 2001 From: Andrew Resch Date: Tue, 24 Feb 2009 01:03:02 +0000 Subject: [PATCH] Get blocklist plugin working --- .../plugins/blocklist/blocklist/__init__.py | 34 ++------- .../blocklist/blocklist/{ui.py => common.py} | 18 +---- deluge/plugins/blocklist/blocklist/core.py | 12 +-- deluge/plugins/blocklist/blocklist/gtkui.py | 26 ++++--- deluge/plugins/blocklist/blocklist/webui.py | 75 +++---------------- deluge/plugins/pluginbase.py | 3 + 6 files changed, 41 insertions(+), 127 deletions(-) rename deluge/plugins/blocklist/blocklist/{ui.py => common.py} (67%) diff --git a/deluge/plugins/blocklist/blocklist/__init__.py b/deluge/plugins/blocklist/blocklist/__init__.py index c385b25b2..a87514d0b 100644 --- a/deluge/plugins/blocklist/blocklist/__init__.py +++ b/deluge/plugins/blocklist/blocklist/__init__.py @@ -1,9 +1,8 @@ # # blocklist/__init__.py # -# Copyright (C) 2007 Andrew Resch -# Copyright (C) 2008 Mark Stahler ('kramed') - +# Copyright (C) 2007-2009 Andrew Resch +# # # Deluge is free software. # @@ -24,36 +23,13 @@ # Boston, MA 02110-1301, USA. # -from deluge.log import LOG as log - from deluge.plugins.init import PluginInitBase class CorePlugin(PluginInitBase): - def __init__(self, plugin_name): - # Load the Core portion of the plugin - try: - from core import Core - self.plugin = Core(plugin_name) - except Exception, e: - log.error("Failed to load core plugin %s!", plugin_name) - log.exception(e) + from core import Core as _plugin_cls class GtkUIPlugin(PluginInitBase): - def __init__(self, plugin_name): - # Load the GtkUI portion of the plugin - try: - from gtkui import GtkUI - self.plugin = GtkUI(plugin_name) - except Exception, e: - log.error("Failed to load gtkui plugin %s!", plugin_name) - log.exception(e) + from gtkui import GtkUI as _plugin_cls class WebUIPlugin(PluginInitBase): - def __init__(self, plugin_name): - # Load the WebUI portion of the plugin - try: - from webui import WebUI - self.plugin = WebUI(plugin_name) - except Exception, e: - log.error("Failed to load webui plugin %s!", plugin_name) - log.exception(e) + from webui import WebUI as _plugin_cls diff --git a/deluge/plugins/blocklist/blocklist/ui.py b/deluge/plugins/blocklist/blocklist/common.py similarity index 67% rename from deluge/plugins/blocklist/blocklist/ui.py rename to deluge/plugins/blocklist/blocklist/common.py index 527e5bcc1..00eb8d41f 100644 --- a/deluge/plugins/blocklist/blocklist/ui.py +++ b/deluge/plugins/blocklist/blocklist/common.py @@ -1,7 +1,7 @@ # -# ui.py +# common.py # -# Copyright (C) 2008 Andrew Resch +# Copyright (C) 2009 Andrew Resch # # Deluge is free software. # @@ -26,15 +26,5 @@ import pkg_resources import os.path -class UI: - def __init__(self, plugin_api, plugin_name): - self.plugin = plugin_api - - def enable(self): - pass - - def disable(self): - pass - - def get_resource(self, filename): - return pkg_resources.resource_filename("blocklist", os.path.join("data", filename)) +def get_resource(filename): + return pkg_resources.resource_filename("blocklist", os.path.join("data", filename)) diff --git a/deluge/plugins/blocklist/blocklist/core.py b/deluge/plugins/blocklist/blocklist/core.py index 9257e0ab0..062682376 100644 --- a/deluge/plugins/blocklist/blocklist/core.py +++ b/deluge/plugins/blocklist/blocklist/core.py @@ -32,7 +32,7 @@ import time import shutil from deluge.log import LOG as log -from deluge.plugins.corepluginbase import CorePluginBase +from deluge.plugins.pluginbase import CorePluginBase import deluge.component as component import deluge.configmanager from deluge.core.rpcserver import export @@ -94,29 +94,29 @@ class Core(CorePluginBase): pass ## Exported RPC methods ### - @export + @export() def download_list(self, _import=False): """Download the blocklist specified in the config as url""" self.download_blocklist(_import) - @export + @export() def import_list(self, force=False): """Import the blocklist from the blocklist.cache, if load is True, then it will download the blocklist file if needed.""" threading.Thread(target=self.import_blocklist, kwargs={"force": force}).start() - @export + @export() def get_config(self): """Returns the config dictionary""" return self.config.config - @export + @export() def set_config(self, config): """Sets the config based on values in 'config'""" for key in config.keys(): self.config[key] = config[key] - @export + @export() def get_status(self): """Returns the status of the plugin.""" status = {} diff --git a/deluge/plugins/blocklist/blocklist/gtkui.py b/deluge/plugins/blocklist/blocklist/gtkui.py index c19a42311..386a88d7c 100644 --- a/deluge/plugins/blocklist/blocklist/gtkui.py +++ b/deluge/plugins/blocklist/blocklist/gtkui.py @@ -25,21 +25,23 @@ import gtk from deluge.log import LOG as log -from deluge.ui.client import aclient as client +from deluge.ui.client import client import deluge.component as component import deluge.common +from deluge.plugins.pluginbase import GtkPluginBase +import common -import ui from core import FORMATS -class GtkUI(ui.UI): +class GtkUI(GtkPluginBase): def enable(self): log.debug("Blocklist GtkUI enable..") + self.plugin = component.get("PluginManager") self.load_preferences_page() self.status_item = component.get("StatusBar").add_item( - image=self.get_resource("blocklist16.png"), + image=common.get_resource("blocklist16.png"), text="", callback=self._on_status_item_clicked, tooltip="Blocked IP Ranges") @@ -114,7 +116,7 @@ class GtkUI(ui.UI): self.glade.get_widget("label_url").set_text( status["file_url"]) - client.blocklist.get_status(_on_get_status) + client.blocklist.get_status().addCallback(_on_get_status) def _on_show_prefs(self): def _on_get_config(config): @@ -132,7 +134,7 @@ class GtkUI(ui.UI): self.glade.get_widget("chk_import_on_start").set_active( config["load_on_start"]) - client.blocklist.get_config(_on_get_config) + client.blocklist.get_config().addCallback(_on_get_config) def _on_apply_prefs(self): config = {} @@ -141,15 +143,15 @@ class GtkUI(ui.UI): config["url"] = self.glade.get_widget("entry_url").get_text() config["check_after_days"] = self.glade.get_widget("spin_check_days").get_value_as_int() config["load_on_start"] = self.glade.get_widget("chk_import_on_start").get_active() - client.blocklist.set_config(None, config) + client.blocklist.set_config(config) def _on_button_check_download_clicked(self, widget): self._on_apply_prefs() - client.blocklist.import_list(None, False) + client.blocklist.import_list(False) def _on_button_force_download_clicked(self, widget): self._on_apply_prefs() - client.blocklist.import_list(None, True) + client.blocklist.import_list(True) def _on_status_item_clicked(self, widget, event): component.get("Preferences").show("Blocklist") @@ -157,7 +159,7 @@ class GtkUI(ui.UI): def load_preferences_page(self): """Initializes the preferences page and adds it to the preferences dialog""" # Load the preferences page - self.glade = gtk.glade.XML(self.get_resource("blocklist_pref.glade")) + self.glade = gtk.glade.XML(common.get_resource("blocklist_pref.glade")) self.progress_bar = self.glade.get_widget("progressbar") self.table_info = self.glade.get_widget("table_info") @@ -187,10 +189,10 @@ class GtkUI(ui.UI): # Set button icons self.glade.get_widget("image_download").set_from_file( - self.get_resource("blocklist_download24.png")) + common.get_resource("blocklist_download24.png")) self.glade.get_widget("image_import").set_from_file( - self.get_resource("blocklist_import24.png")) + common.get_resource("blocklist_import24.png")) # Update the preferences page with config values from the core self._on_show_prefs() diff --git a/deluge/plugins/blocklist/blocklist/webui.py b/deluge/plugins/blocklist/blocklist/webui.py index 0ac896d5f..3097b0364 100644 --- a/deluge/plugins/blocklist/blocklist/webui.py +++ b/deluge/plugins/blocklist/blocklist/webui.py @@ -26,13 +26,13 @@ import os from deluge.log import LOG as log -from deluge.ui.client import sclient, aclient +from deluge.ui.client import client from deluge import component -import ui +from deluge.plugins.pluginbase import WebPluginBase -import deluge.ui.webui.lib.newforms_plus as forms +#import deluge.ui.webui.lib.newforms_plus as forms -config_page_manager = component.get("ConfigPageManager") +#config_page_manager = component.get("ConfigPageManager") FORMAT_LIST = [ ('gzmule',_("Emule IP list (GZip)")), @@ -41,68 +41,11 @@ FORMAT_LIST = [ ('p2bgz',_("PeerGuardian P2B (GZip)")) ] -class BlockListCfgForm(forms.Form): - """ - a config form based on django forms. - see webui.lib.newforms_plus, config_forms, etc. - """ - #meta: - title = _("BlockList") - - #load/save: - def initial_data(self): - data = sclient.blocklist.get_config() - return data - - def save(self, data): - cfg = dict(data) - del cfg["btn_import_now"] - del cfg["btn_force_download"] - sclient.blocklist.set_config(cfg) - if data.btn_import_now: - sclient.blocklist.import_list(data.btn_force_download) - - #input fields : - listtype = forms.ChoiceField(FORMAT_LIST) - url = forms.CharField(label=_("Url")) - check_after_days = forms.IntegerField(label=_("Check for every (days)"), min_value=-1, max_value=14) - timeout = forms.IntegerField(label=_("Timeout (seconds)"), min_value=15, max_value=360) - try_times = forms.IntegerField(label=_("Times to attempt download"), min_value=1, max_value=5) - load_on_start = forms.CheckBox(_('Import on daemon startup')) - - btn_import_now = forms.CheckBox(_('Import Now')) - btn_force_download = forms.CheckBox(_('Force Download')) - - def post_html(self): - "show blocklist status" - status = sclient.blocklist.get_status() - - if status["state"] == "Downloading": - txt = _("Downloading %.2f%%") % (status["file_progress"] * 100) - elif status["state"] == "Importing": - txt = _("Importing %s") % str(status["num_blocked"]) - elif status["state"] == "Idle": - txt = _("Blocked Ranges: %s") % str(status["num_blocked"]) - else: - txt = _("Inactive") - - return """ -

Status

-
- %s
-
- """ % (txt, _("Refresh status")) - - -class WebUI(ui.UI): - def __init__(self, plugin_api, plugin_name): - log.debug("Calling UI init") - # Call UI constructor - ui.UI.__init__(self, plugin_api, plugin_name) - log.debug("Blocklist WebUI plugin initalized..") - +class WebUI(WebPluginBase): def enable(self): - config_page_manager.register('plugins','blocklist',BlockListCfgForm) + #config_page_manager.register('plugins','blocklist',BlockListCfgForm) + pass def disable(self): - config_page_manager.deregister('blocklist') + #config_page_manager.deregister('blocklist') + pass diff --git a/deluge/plugins/pluginbase.py b/deluge/plugins/pluginbase.py index 445b515de..328d530ee 100644 --- a/deluge/plugins/pluginbase.py +++ b/deluge/plugins/pluginbase.py @@ -38,13 +38,16 @@ class CorePluginBase(PluginBase): # Register RPC methods component.get("RPCServer").register_object(self, plugin_name.lower()) log.debug("CorePlugin initialized..") + component.start("CorePlugin." + plugin_name) class GtkPluginBase(PluginBase): def __init__(self, plugin_name): component.Component.__init__(self, "GtkPlugin." + plugin_name) log.debug("GtkPlugin initialized..") + component.start("GtkPlugin." + plugin_name) class WebPluginBase(PluginBase): def __init__(self, plugin_name): component.Component.__init__(self, "WebPlugin." + plugin_name) log.debug("WebPlugin initialized..") + component.start("WebPlugin." + plugin_name)