diff options
author | 2015-05-10 17:01:05 +0200 | |
---|---|---|
committer | 2015-05-10 17:01:05 +0200 | |
commit | 8606b72470e0e506d9da26f190a2880d47d289a4 (patch) | |
tree | 6225bba54bafb655ca969a1287673807c7c2d131 /pyload/Thread/Addon.py | |
parent | Merge branch 'stable' into 0.4.10 (diff) | |
download | pyload-8606b72470e0e506d9da26f190a2880d47d289a4.tar.xz |
Improve and fix file structure a bit
Diffstat (limited to 'pyload/Thread/Addon.py')
-rw-r--r-- | pyload/Thread/Addon.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/pyload/Thread/Addon.py b/pyload/Thread/Addon.py new file mode 100644 index 000000000..bf3b62eb1 --- /dev/null +++ b/pyload/Thread/Addon.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +# @author: RaNaN + +import traceback + +from Queue import Queue +from copy import copy +from os import listdir, stat +from os.path import join +from pprint import pformat +from sys import exc_info, exc_clear +from time import sleep, time, strftime, gmtime +from types import MethodType + +from pyload.Thread.Plugin import PluginThread + + +class AddonThread(PluginThread): + """thread for addons""" + + def __init__(self, m, function, args, kwargs): + """Constructor""" + PluginThread.__init__(self, m) + + self.f = function + self.args = args + self.kwargs = kwargs + + self.active = [] + + m.localThreads.append(self) + + self.start() + + + def getActiveFiles(self): + return self.active + + + def addActive(self, pyfile): + """ Adds a pyfile to active list and thus will be displayed on overview""" + if pyfile not in self.active: + self.active.append(pyfile) + + + def finishFile(self, pyfile): + if pyfile in self.active: + self.active.remove(pyfile) + + pyfile.finishIfDone() + + + def run(self): + try: + try: + self.kwargs['thread'] = self + self.f(*self.args, **self.kwargs) + except TypeError, e: + # dirty method to filter out exceptions + if "unexpected keyword argument 'thread'" not in e.args[0]: + raise + + del self.kwargs['thread'] + self.f(*self.args, **self.kwargs) + finally: + local = copy(self.active) + for x in local: + self.finishFile(x) + + self.m.localThreads.remove(self) |