summaryrefslogtreecommitdiffstats
path: root/module/PluginThread.py
diff options
context:
space:
mode:
Diffstat (limited to 'module/PluginThread.py')
-rw-r--r--module/PluginThread.py158
1 files changed, 79 insertions, 79 deletions
diff --git a/module/PluginThread.py b/module/PluginThread.py
index 2bd078e02..f6707a908 100644
--- a/module/PluginThread.py
+++ b/module/PluginThread.py
@@ -39,7 +39,7 @@ class PluginThread(Thread):
Thread.__init__(self)
self.setDaemon(True)
self.m = manager #thread manager
-
+
########################################################################
class DownloadThread(PluginThread):
@@ -49,61 +49,61 @@ class DownloadThread(PluginThread):
def __init__(self, manager):
"""Constructor"""
PluginThread.__init__(self, manager)
-
+
self.queue = Queue() # job queue
self.active = False
-
+
self.start()
-
+
#----------------------------------------------------------------------
def run(self):
"""run method"""
-
+
while True:
self.active = self.queue.get()
pyfile = self.active
-
+
if self.active == "quit":
return True
-
+
self.m.log.info(_("Download starts: %s" % pyfile.name))
-
+
try:
pyfile.plugin.preprocessing(self)
-
+
except NotImplementedError:
-
+
self.m.log.error(_("Plugin %s is missing a function.") % pyfile.pluginname)
continue
-
+
except Abort:
self.m.log.info(_("Download aborted: %s") % pyfile.name)
pyfile.setStatus("aborted")
-
+
self.active = False
pyfile.release()
continue
-
+
except Reconnect:
self.queue.put(pyfile)
#@TODO
#pyfile.req.clearCookies()
-
+
while self.m.reconnecting.isSet():
sleep(0.5)
-
+
continue
-
+
except Retry:
-
+
self.m.log.info(_("Download restarted: %s") % pyfile.name)
self.queue.put(pyfile)
continue
-
+
except Fail, e:
-
+
msg = e.args[0]
-
+
if msg == "offline":
pyfile.setStatus("offline")
self.m.log.warning(_("Download is offline: %s") % pyfile.name)
@@ -111,65 +111,65 @@ class DownloadThread(PluginThread):
pyfile.setStatus("failed")
self.m.log.warning(_("Download failed: %s | %s") % (pyfile.name, msg))
pyfile.error = msg
-
+
self.active = False
pyfile.release()
continue
-
+
except error, e:
code, msg = e
if self.m.core.debug:
print "pycurl error", code, msg
print_exc()
-
+
if code == 7:
self.m.log.warning(_("Couldn't connect to host waiting 1 minute and retry."))
self.queue.put(pyfile)
continue
-
+
self.active = False
pyfile.release()
continue
-
+
except Exception, e:
pyfile.setStatus("failed")
self.m.log.error(_("Download failed: %s | %s") % (pyfile.name, str(e)))
pyfile.error = str(e)
-
+
if self.m.core.debug:
print_exc()
-
+
self.active = False
pyfile.release()
continue
-
-
+
+
finally:
self.m.core.files.save()
-
-
+
+
self.m.log.info(_("Download finished: %s") % pyfile.name)
-
+
self.m.core.hookManager.downloadFinished(pyfile)
-
+
self.m.core.files.checkPackageFinished(pyfile)
-
+
self.active = False
pyfile.finishIfDone()
self.m.core.files.save()
-
+
#----------------------------------------------------------------------
def put(self, job):
"""assing job to thread"""
self.queue.put(job)
-
+
#----------------------------------------------------------------------
def stop(self):
"""stops the thread"""
self.put("quit")
-
-
-
+
+
+
########################################################################
class DecrypterThread(PluginThread):
"""thread for decrypting"""
@@ -178,33 +178,33 @@ class DecrypterThread(PluginThread):
def __init__(self, manager, pyfile):
"""constructor"""
PluginThread.__init__(self, manager)
-
+
self.active = pyfile
manager.localThreads.append(self)
-
+
pyfile.setStatus("decrypting")
-
+
self.start()
-
+
#----------------------------------------------------------------------
def run(self):
"""run method"""
-
+
pyfile = self.active
-
+
try:
self.m.log.info(_("Decrypting starts: %s") % self.active.name)
self.active.plugin.preprocessing(self)
-
+
except NotImplementedError:
-
+
self.m.log.error(_("Plugin %s is missing a function.") % self.active.pluginname)
return
-
+
except Fail, e:
-
+
msg = e.args[0]
-
+
if msg == "offline":
self.active.setStatus("offline")
self.m.log.warning(_("Download is offline: %s") % self.active.name)
@@ -212,36 +212,36 @@ class DecrypterThread(PluginThread):
self.active.setStatus("failed")
self.m.log.warning(_("Decrypting failed: %s | %s") % (self.active.name, msg))
self.active.error = msg
-
+
return
-
-
+
+
except Exception, e:
-
+
self.active.setStatus("failed")
self.m.log.error(_("Decrypting failed: %s | %s") % (self.active.name, str(e)))
self.active.error = str(e)
-
+
if self.m.core.debug:
print_exc()
-
+
return
-
-
+
+
finally:
self.active.release()
self.active = False
self.m.core.files.save()
self.m.localThreads.remove(self)
-
-
+
+
#self.m.core.hookManager.downloadFinished(pyfile)
-
-
+
+
#self.m.localThreads.remove(self)
#self.active.finishIfDone()
pyfile.delete()
-
+
########################################################################
class HookThread(PluginThread):
"""thread for hooks"""
@@ -250,24 +250,24 @@ class HookThread(PluginThread):
def __init__(self, m, function, pyfile):
"""Constructor"""
PluginThread.__init__(self, m)
-
+
self.f = function
self.active = pyfile
-
+
m.localThreads.append(self)
-
+
pyfile.setStatus("processing")
-
+
self.start()
-
+
def run(self):
self.f(self.active)
-
-
+
+
self.m.localThreads.remove(self)
self.active.finishIfDone()
-
-
+
+
########################################################################
class InfoThread(PluginThread):
@@ -275,18 +275,18 @@ class InfoThread(PluginThread):
def __init__(self, manager, data, pid):
"""Constructor"""
PluginThread.__init__(self, manager)
-
+
self.data = data
self.pid = pid # package id
# [ .. (name, plugin) .. ]
self.start()
-
+
#----------------------------------------------------------------------
def run(self):
"""run method"""
-
+
plugins = {}
-
+
for url, plugin in self.data:
if plugins.has_key(plugin):
plugins[plugin].append(url)
@@ -300,7 +300,7 @@ class InfoThread(PluginThread):
for result in plugin.getInfo(urls):
if not type(result) == list: result = [result]
self.m.core.files.updateFileInfo(result, self.pid)
-
+
self.m.core.log.debug("Finished Info Fetching for %s" % pluginname)
-
- self.m.core.files.save() \ No newline at end of file
+
+ self.m.core.files.save() \ No newline at end of file