diff options
-rw-r--r-- | docs/plugins/addon_plugin.rst | 2 | ||||
-rw-r--r-- | pyload/AddonManager.py | 34 | ||||
-rw-r--r-- | pyload/PluginManager.py | 8 | ||||
-rw-r--r-- | pyload/interaction/EventManager.py | 15 | ||||
-rw-r--r-- | pyload/plugins/Addon.py | 38 | ||||
-rw-r--r-- | pyload/plugins/accounts/Premium4Me.py | 32 | ||||
-rw-r--r-- | pyload/plugins/addons/MultiHoster.py | 14 | ||||
-rw-r--r-- | pyload/remote/wsbackend/AsyncHandler.py | 2 | ||||
-rw-r--r-- | pyload/threads/ThreadManager.py | 4 |
9 files changed, 38 insertions, 111 deletions
diff --git a/docs/plugins/addon_plugin.rst b/docs/plugins/addon_plugin.rst index bef5b115e..8f1adf39a 100644 --- a/docs/plugins/addon_plugin.rst +++ b/docs/plugins/addon_plugin.rst @@ -95,7 +95,7 @@ It requires a `dict` that maps event names to function names or a `list` of func print "The underlying event (allDownloadsFinished) for this method is not available through the base class" An advantage of the event listener is that you are able to register and remove the listeners at runtime. -Use `self.manager.addEvent("name", function)`, `self.manager.removeEvent("name", function)` and see doc for +Use `self.manager.listenTo("name", function)`, `self.manager.removeEvent("name", function)` and see doc for :class:`HookManager <pyload.HookManager.HookManager>`. Contrary to ``event_map``, ``function`` has to be a reference and **not** a `string`. diff --git a/pyload/AddonManager.py b/pyload/AddonManager.py index 5637b1a8e..f1691fbed 100644 --- a/pyload/AddonManager.py +++ b/pyload/AddonManager.py @@ -45,7 +45,7 @@ class AddonManager: self.createIndex() # manage addons on config change - self.addEvent("config:changed", self.manageAddons) + self.listenTo("config:changed", self.manageAddon) @lock def callInHooks(self, event, eventName, *args): @@ -62,23 +62,6 @@ class AddonManager: addon.logError(_("Error when executing %s" % f), e) self.core.print_exc() - def addRPC(self, plugin, func, doc): - doc = doc.strip() if doc else "" - - if plugin in self.methods: - self.methods[plugin][func] = doc - else: - self.methods[plugin] = {func: doc} - - def callRPC(self, plugin, func, args): - if not args: args = [] - else: - args = literal_eval(args) - - plugin = self.plugins[plugin] - f = getattr(plugin, func) - return f(*args) - @lock def createIndex(self): active = [] @@ -106,7 +89,6 @@ class AddonManager: else: deactive.append(pluginname) - except: self.log.warning(_("Failed activating %(name)s") % {"name": pluginname}) self.core.print_exc() @@ -114,7 +96,7 @@ class AddonManager: self.log.info(_("Activated addons: %s") % ", ".join(sorted(active))) self.log.info(_("Deactivate addons: %s") % ", ".join(sorted(deactive))) - def manageAddons(self, plugin, name, value): + def manageAddon(self, plugin, name, value): # TODO: user # check if section was a plugin @@ -193,12 +175,6 @@ class AddonManager: def packageFinished(self, package): self.callInHooks("packageFinished", "package:finished", package) - def beforeReconnecting(self, ip): - self.callInHooks("beforeReconnecting", "reconnecting:before", ip) - - def afterReconnecting(self, ip): - self.callInHooks("afterReconnecting", "reconnecting:after", ip) - @lock def startThread(self, function, *args, **kwargs): AddonThread(self.core.threadManager, function, args, kwargs) @@ -236,12 +212,12 @@ class AddonManager: for name, plugin in self.plugins.iteritems(): if name in self.events: for func, event in self.events[name]: - self.addEvent(event, getattr(plugin, func)) + self.listenTo(event, getattr(plugin, func)) # clean up del self.events[name] - def addEvent(self, *args): - self.core.eventManager.addEvent(*args) + def listenTo(self, *args): + self.core.eventManager.listenTo(*args) def dispatchEvent(self, *args): self.core.eventManager.dispatchEvent(*args) diff --git a/pyload/PluginManager.py b/pyload/PluginManager.py index 159e7d9de..dab5be063 100644 --- a/pyload/PluginManager.py +++ b/pyload/PluginManager.py @@ -194,15 +194,13 @@ class PluginManager: if folder == "addons" and "config" not in attrs and not attrs.get("internal", False): attrs["config"] = (["activated", "bool", "Activated", False],) - if "config" in attrs and attrs["config"]: + if "config" in attrs and attrs["config"] is not None: config = attrs["config"] desc = attrs.get("description", "") long_desc = attrs.get("long_description", "") - if type(config[0]) == tuple: - config = [list(x) for x in config] - else: - config = [list(config)] + # Convert tuples to list + config = [list(x) for x in config] if folder == "addons" and not attrs.get("internal", False): for item in config: diff --git a/pyload/interaction/EventManager.py b/pyload/interaction/EventManager.py index 7d37ca6b9..329961d93 100644 --- a/pyload/interaction/EventManager.py +++ b/pyload/interaction/EventManager.py @@ -3,6 +3,7 @@ from threading import Lock from traceback import print_exc + class EventManager: """ Handles all event-related tasks, also stores an event queue for clients, so they can retrieve them later. @@ -29,19 +30,11 @@ class EventManager: self.core = core self.log = core.log - # uuid : list of events - self.clients = {} self.events = {"event": []} self.lock = Lock() - def getEvents(self, uuid): - """ Get accumulated events for uuid since last call, this also registers a new client """ - if uuid not in self.clients: - self.clients[uuid] = Client() - return self.clients[uuid].get() - - def addEvent(self, event, func): + def listenTo(self, event, func): """Adds an event listener for event name""" if event in self.events: if func in self.events[event]: @@ -69,7 +62,7 @@ class EventManager: f(event, *args) except Exception, e: self.log.warning("Error calling event handler %s: %s, %s, %s" - % ("event", f, args, str(e))) + % ("event", f, args, str(e))) if self.core.debug: print_exc() @@ -79,6 +72,6 @@ class EventManager: f(*args) except Exception, e: self.log.warning("Error calling event handler %s: %s, %s, %s" - % (event, f, args, str(e))) + % (event, f, args, str(e))) if self.core.debug: print_exc()
\ No newline at end of file diff --git a/pyload/plugins/Addon.py b/pyload/plugins/Addon.py index ff9c57bef..940339bfb 100644 --- a/pyload/plugins/Addon.py +++ b/pyload/plugins/Addon.py @@ -40,19 +40,6 @@ def AddEventListener(event): return f return _klass -class ConfigHandler(object): - """ Register method as config handler. - - Your method signature has to be: - def foo(value=None): - - value will be passed to use your method to set the config. - When value is None your method needs to return an interaction task for configuration. - """ - - def __new__(cls, f, *args, **kwargs): - addonManager.addConfigHandler(class_name(f.__module__), f.func_name) - return f def AddonHandler(desc, media=None): """ Register Handler for files, packages, or arbitrary callable methods. @@ -90,10 +77,6 @@ class Addon(Base): #: automatically register event listeners for functions, attribute will be deleted don't use it yourself event_map = None - # Alternative to event_map - #: List of events the plugin can handle, name the functions exactly like eventname. - event_list = None # dont make duplicate entries in event_map - #: periodic call interval in seconds interval = 60 @@ -114,22 +97,15 @@ class Addon(Base): for event, funcs in self.event_map.iteritems(): if type(funcs) in (list, tuple): for f in funcs: - self.evm.addEvent(event, getattr(self,f)) + self.evm.listenTo(event, getattr(self,f)) else: - self.evm.addEvent(event, getattr(self,funcs)) + self.evm.listenTo(event, getattr(self,funcs)) #delete for various reasons self.event_map = None - if self.event_list: - for f in self.event_list: - self.evm.addEvent(f, getattr(self,f)) - - self.event_list = None - self.initPeriodical() self.init() - self.setup() def initPeriodical(self): if self.interval >=1: @@ -158,10 +134,6 @@ class Addon(Base): def init(self): pass - def setup(self): - """ more init stuff if needed """ - pass - def activate(self): """ Used to activate the addon """ if has_method(self.__class__, "coreReady"): @@ -196,10 +168,4 @@ class Addon(Base): pass def packageFinished(self, pypack): - pass - - def beforeReconnecting(self, ip): - pass - - def afterReconnecting(self, ip): pass
\ No newline at end of file diff --git a/pyload/plugins/accounts/Premium4Me.py b/pyload/plugins/accounts/Premium4Me.py index de1538e4a..fbca3ce84 100644 --- a/pyload/plugins/accounts/Premium4Me.py +++ b/pyload/plugins/accounts/Premium4Me.py @@ -1,27 +1,23 @@ -# -*- coding: utf-8 -*- -from module.plugins.MultiHoster import MultiHoster +from module.plugins.Account import Account -class Premium4Me(MultiHoster): +class Premium4Me(Account): __name__ = "Premium4Me" - __version__ = "0.10" + __version__ = "0.03" __type__ = "account" - __description__ = """Premium4.me account plugin""" - __author_name__ = ("RaNaN", "zoidberg") - __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz") + __description__ = """Premium.to account plugin""" + __author_name__ = ("RaNaN", "zoidberg", "stickell") + __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it") - def loadAccountInfo(self, req): - traffic = req.load("http://premium4.me/api/traffic.php?authcode=%s" % self.authcode) + def loadAccountInfo(self, user, req): + traffic = req.load("http://premium.to/api/traffic.php?authcode=%s" % self.authcode) - account_info = {"trafficleft": int(traffic) / 1024, "validuntil": -1} + account_info = {"trafficleft": int(traffic) / 1024, + "validuntil": -1} return account_info - def login(self, req): - self.authcode = req.load("http://premium4.me/api/getauthcode.php?username=%s&password=%s" % (self.loginname, self.password)).strip() - - if "wrong username" in self.authcode: - self.wrongPassword() + def login(self, user, data, req): + self.authcode = req.load("http://premium.to/api/getauthcode.php?username=%s&password=%s" % (user, data["password"])).strip() - def loadHosterList(self, req): - page = req.load("http://premium4.me/api/hosters.php?authcode=%s" % self.authcode) - return [x.strip() for x in page.replace("\"", "").split(";")]
\ No newline at end of file + if "wrong username" in self.authcode: + self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/addons/MultiHoster.py b/pyload/plugins/addons/MultiHoster.py index 825085df8..b7873a3a2 100644 --- a/pyload/plugins/addons/MultiHoster.py +++ b/pyload/plugins/addons/MultiHoster.py @@ -4,14 +4,15 @@ import re from types import MethodType -from module.plugins.MultiHoster import MultiHoster as MultiHosterAccount, normalize -from module.plugins.Addon import Addon, AddEventListener -from module.plugins.PluginManager import PluginTuple +from pyload.plugins.MultiHoster import MultiHoster as MultiHosterAccount, normalize +from pyload.plugins.Addon import Addon, AddEventListener +from pyload.PluginManager import PluginTuple + class MultiHoster(Addon): __version__ = "0.1" __internal__ = True - __description__ = "Gives ability to use MultiHoster services. You need to add your account first." + __description__ = "Gives ability to use MultiHoster services." __config__ = [] __author_mail__ = ("pyLoad Team",) __author_mail__ = ("support@pyload.org",) @@ -25,7 +26,7 @@ class MultiHoster(Addon): def addHoster(self, account): - self.logDebug("New MultiHoster %s" % account.__name__) + self.logInfo(_("Added MultiHoster %s") % account.__name__) pluginMap = {} for name in self.core.pluginManager.getPlugins("hoster").keys(): @@ -65,12 +66,10 @@ class MultiHoster(Addon): hoster[account.__name__] = new - @AddEventListener("account:deleted") def refreshAccounts(self, plugin=None, user=None): self.plugins = {} - for name, account in self.core.accountManager.iterAccounts(): if isinstance(account, MultiHosterAccount) and account.isUsable(): self.addHoster(account) @@ -94,7 +93,6 @@ class MultiHoster(Addon): pm = self.core.pluginManager pm.getPlugin = MethodType(getPlugin, pm, object) - def deactivate(self): #restore state pm = self.core.pluginManager diff --git a/pyload/remote/wsbackend/AsyncHandler.py b/pyload/remote/wsbackend/AsyncHandler.py index 88bd371b0..f1c584b7d 100644 --- a/pyload/remote/wsbackend/AsyncHandler.py +++ b/pyload/remote/wsbackend/AsyncHandler.py @@ -52,7 +52,7 @@ class AsyncHandler(AbstractHandler): self.clients = [] self.lock = Lock() - self.core.evm.addEvent("event", self.add_event) + self.core.evm.listenTo("event", self.add_event) @lock def on_open(self, req): diff --git a/pyload/threads/ThreadManager.py b/pyload/threads/ThreadManager.py index 0044ebcb2..086e8ba51 100644 --- a/pyload/threads/ThreadManager.py +++ b/pyload/threads/ThreadManager.py @@ -202,7 +202,7 @@ class ThreadManager: ip = self.getIP() - self.core.addonManager.beforeReconnecting(ip) + self.core.evm.dispatchEvent("reconnect:before", ip) self.log.debug("Old IP: %s" % ip) @@ -219,7 +219,7 @@ class ThreadManager: reconn.wait() sleep(1) ip = self.getIP() - self.core.addonManager.afterReconnecting(ip) + self.core.evm.dispatchEvent("reconnect:after", ip) self.log.info(_("Reconnected, new IP: %s") % ip) |