summaryrefslogtreecommitdiffstats
path: root/module/plugins
diff options
context:
space:
mode:
authorGravatar Walter Purcaro <vuolter@users.noreply.github.com> 2015-03-18 15:39:11 +0100
committerGravatar Walter Purcaro <vuolter@users.noreply.github.com> 2015-03-18 15:39:11 +0100
commita54c4268e402a3a1509c33d0b2de6f4336583416 (patch)
treeeac5a762b34aaee67979acb9acaef139e5dd0f8c /module/plugins
parentSpare code cosmetics (diff)
downloadpyload-a54c4268e402a3a1509c33d0b2de6f4336583416.tar.xz
[ExternalScripts] Fix https://github.com/pyload/pyload/issues/1233
Diffstat (limited to 'module/plugins')
-rw-r--r--module/plugins/hooks/ExternalScripts.py132
1 files changed, 86 insertions, 46 deletions
diff --git a/module/plugins/hooks/ExternalScripts.py b/module/plugins/hooks/ExternalScripts.py
index d17e4740c..435ab618c 100644
--- a/module/plugins/hooks/ExternalScripts.py
+++ b/module/plugins/hooks/ExternalScripts.py
@@ -10,7 +10,7 @@ from module.utils import fs_encode, save_join
class ExternalScripts(Hook):
__name__ = "ExternalScripts"
__type__ = "hook"
- __version__ = "0.32"
+ __version__ = "0.35"
__config__ = [("activated", "bool", "Activated" , True ),
("waitend" , "bool", "Wait script ending", False)]
@@ -23,8 +23,10 @@ class ExternalScripts(Hook):
("Walter Purcaro", "vuolter@gmail.com")]
- event_list = ["archive_extracted", "package_extracted", "all_archives_extracted", "all_archives_processed",
- "allDownloadsFinished", "allDownloadsProcessed"]
+ event_list = ["archive_extract_failed", "archive_extracted" ,
+ "package_extract_failed", "package_extracted" ,
+ "all_archives_extracted", "all_archives_processed",
+ "allDownloadsFinished" , "allDownloadsProcessed" ]
#@TODO: Remove in 0.4.10
@@ -33,14 +35,15 @@ class ExternalScripts(Hook):
def setup(self):
+ self.info = {} #@TODO: Remove in 0.4.10
self.scripts = {}
- folders = ["download_preparing", "download_finished", "all_downloads_finished", "all_downloads_processed",
- "before_reconnect", "after_reconnect",
- "package_finished", "package_extracted",
- "archive_extracted", "all_archives_extracted", "all_archives_processed",
- # deprecated folders
- "unrar_finished", "all_dls_finished", "all_dls_processed"]
+ folders = ["before_reconnect", "after_reconnect",
+ "download_preparing", "download_failed", "download_finished",
+ "archive_extract_failed", "archive_extracted",
+ "package_finished", "package_extract_failed", "package_extracted",
+ "all_downloads_processed", "all_downloads_finished", #@TODO: Invert `all_downloads_processed`, `all_downloads_finished` order in 0.4.10
+ "all_archives_extracted", "all_archives_processed"]
for folder in folders:
self.scripts[folder] = []
@@ -49,7 +52,7 @@ class ExternalScripts(Hook):
for script_type, names in self.scripts.iteritems():
if names:
- self.logInfo(_("Installed scripts for ") + script_type, ", ".join(map(os.path.basename, names)))
+ self.logInfo(_("Installed scripts for: ") + script_type, ", ".join(map(os.path.basename, names)))
def initPluginType(self, name, dir):
@@ -57,12 +60,12 @@ class ExternalScripts(Hook):
try:
os.makedirs(dir)
- except IOError, e:
+ except OSError, e:
self.logDebug(e)
return
for filename in os.listdir(dir):
- file = os.path.join(dir, filename)
+ file = save_join(dir, filename)
if not os.path.isfile(file):
continue
@@ -78,76 +81,113 @@ class ExternalScripts(Hook):
def callScript(self, script, *args):
try:
- cmd = [script] + [(str(x) if not isinstance(x, basestring) else x).encode('utf-8') for x in args]
+ cmd_args = [fs_encode(str(x) if not isinstance(x, basestring) else x) for x in args]
+ cmd = [script] + cmd_args
- self.logDebug("Executing", os.path.abspath(script), " ".join(cmd))
+ self.logDebug("Executing: %s" % os.path.abspath(script), "Args: " + ' '.join(cmd_args))
p = subprocess.Popen(cmd, bufsize=-1) #@NOTE: output goes to pyload
if self.getConfig('waitend'):
p.communicate()
except Exception, e:
- self.logError(_("Error in %(script)s: %(error)s") % {"script": os.path.basename(script), "error": e})
+ try:
+ self.logError(_("Runtime error: %s") % os.path.abspath(script), e)
+ except Exception:
+ self.logError(_("Runtime error: %s") % os.path.abspath(script), _("Unknown error"))
+
+ def beforeReconnecting(self, ip):
+ for script in self.scripts['before_reconnect']:
+ self.callScript(script, ip)
+
+
+ def afterReconnecting(self, ip):
+ for script in self.scripts['after_reconnect']:
+ self.callScript(script, ip)
def downloadPreparing(self, pyfile):
for script in self.scripts['download_preparing']:
- self.callScript(script, pyfile.pluginname, pyfile.url, pyfile.id)
+ self.callScript(script, pyfile.id, pyfile.name, pyfile.pluginname, pyfile.url, None)
+
+
+ def downloadFailed(self, pyfile):
+ if self.config['general']['folder_per_package']:
+ download_folder = save_join(self.config['general']['download_folder'], pyfile.package().folder)
+ else:
+ download_folder = self.config['general']['download_folder']
+
+ for script in self.scripts['download_failed']:
+ file = save_join(download_folder, pyfile.name)
+ self.callScript(script, pyfile.id, pyfile.name, pyfile.pluginname, pyfile.url, file)
def downloadFinished(self, pyfile):
- download_folder = self.config['general']['download_folder']
+ if self.config['general']['folder_per_package']:
+ download_folder = save_join(self.config['general']['download_folder'], pyfile.package().folder)
+ else:
+ download_folder = self.config['general']['download_folder']
+
for script in self.scripts['download_finished']:
- file = save_join(download_folder, pyfile.package().folder, pyfile.name)
- self.callScript(script, pyfile.pluginname, pyfile.url, pyfile.name, file, pyfile.id)
+ file = save_join(download_folder, pyfile.name)
+ self.callScript(script, pyfile.id, pyfile.name, pyfile.pluginname, pyfile.url, file)
- def packageFinished(self, pypack):
- download_folder = self.config['general']['download_folder']
- for script in self.scripts['package_finished']:
- folder = save_join(download_folder, pypack.folder)
- self.callScript(script, pypack.name, folder, pypack.password, pypack.id)
+ def archive_extract_failed(self, pyfile, archive):
+ for script in self.scripts['archive_extract_failed']:
+ self.callScript(script, pyfile.id, pyfile.name, archive.out, archive.filename, archive.files)
- def beforeReconnecting(self, ip):
- for script in self.scripts['before_reconnect']:
- self.callScript(script, ip)
+ def archive_extracted(self, pyfile, archive):
+ for script in self.scripts['archive_extracted']:
+ self.callScript(script, pyfile.id, pyfile.name, archive.out, archive.filename, archive.files)
- def afterReconnecting(self, ip):
- for script in self.scripts['after_reconnect']:
- self.callScript(script, ip)
+ def packageFinished(self, pypack):
+ if self.config['general']['folder_per_package']:
+ download_folder = save_join(self.config['general']['download_folder'], pypack.folder)
+ else:
+ download_folder = self.config['general']['download_folder']
+ for script in self.scripts['package_finished']:
+ self.callScript(script, pypack.id, pypack.name, download_folder)
- def archive_extracted(self, pyfile, folder, filename, files):
- for script in self.scripts['archive_extracted']:
- self.callScript(script, folder, filename, files)
- for script in self.scripts['unrar_finished']: #: deprecated
- self.callScript(script, folder, filename)
+
+ def package_extract_failed(self, pypack):
+ if self.config['general']['folder_per_package']:
+ download_folder = save_join(self.config['general']['download_folder'], pypack.folder)
+ else:
+ download_folder = self.config['general']['download_folder']
+
+ for script in self.scripts['package_extract_failed']:
+ self.callScript(script, pypack.id, pypack.name, download_folder)
def package_extracted(self, pypack):
- download_folder = self.config['general']['download_folder']
+ if self.config['general']['folder_per_package']:
+ download_folder = save_join(self.config['general']['download_folder'], pypack.folder)
+ else:
+ download_folder = self.config['general']['download_folder']
+
for script in self.scripts['package_extracted']:
- folder = save_join(download_folder, pypack.folder)
- self.callScript(script, pypack.name, folder, pypack.password, pypack.id)
+ self.callScript(script, pypack.id, pypack.name, download_folder)
- def all_archives_extracted(self):
- for script in self.scripts['all_archives_extracted']:
+ def allDownloadsFinished(self):
+ for script in self.scripts['all_downloads_finished']:
self.callScript(script)
- def all_archives_processed(self):
- for script in self.scripts['all_archives_processed']:
+ def allDownloadsProcessed(self):
+ for script in self.scripts['all_downloads_processed']:
self.callScript(script)
- def allDownloadsFinished(self):
- for script in self.scripts['all_downloads_finished'] + self.scripts['all_dls_finished']:
+ def all_archives_extracted(self):
+ for script in self.scripts['all_archives_extracted']:
self.callScript(script)
- def allDownloadsProcessed(self):
- for script in self.scripts['all_downloads_processed'] + self.scripts['all_dls_processed']:
+ def all_archives_processed(self):
+ for script in self.scripts['all_archives_processed']:
self.callScript(script)