diff options
author | Walter Purcaro <vuolter@gmail.com> | 2014-10-27 23:00:44 +0100 |
---|---|---|
committer | Walter Purcaro <vuolter@gmail.com> | 2014-10-27 23:00:44 +0100 |
commit | 691c4974df7cd3305c78e518dbcbc638adc36f88 (patch) | |
tree | 693df0cdf2d7248479f314096c8a3874db14f81f /module/plugins | |
parent | Increase LOW_SPEED_TIME to try to avoid pycurl error 28 (diff) | |
download | pyload-691c4974df7cd3305c78e518dbcbc638adc36f88.tar.xz |
[Crypter] Rewitten
Diffstat (limited to 'module/plugins')
-rw-r--r-- | module/plugins/Crypter.py | 77 |
1 files changed, 61 insertions, 16 deletions
diff --git a/module/plugins/Crypter.py b/module/plugins/Crypter.py index be6d9cbc3..61cdeddc9 100644 --- a/module/plugins/Crypter.py +++ b/module/plugins/Crypter.py @@ -1,36 +1,45 @@ # -*- coding: utf-8 -*- from module.plugins.Plugin import Plugin +from utils import save_path class Crypter(Plugin): - __name__ = "Crypter" - __type__ = "crypter" - __version__ = "0.1" + __name__ = "Crypter" + __type__ = "crypter" + __version__ = "0.2" __pattern__ = None + __config__ = [] #: [("name", "type", "desc", "default")] __description__ = """Base decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("mkaay", "mkaay@mkaay.de")] + __license__ = "GPLv3" + __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] def __init__(self, pyfile): - Plugin.__init__(self, pyfile) - #: Put all packages here. It's a list of tuples like: ( name, [list of links], folder ) self.packages = [] #: List of urls, pyLoad will generate packagenames self.urls = [] - self.multiDL = True - self.limitDL = 0 + self.__config__.extend([("use_subfolder", "bool", "Save package to subfolder", True), #: Overrides core.config['general']['folder_per_package'] + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]) + + Plugin.__init__(self, pyfile) def process(self, pyfile): """ main method """ + self.decrypt(pyfile) + + if self.urls: + self.generatePackages() + elif not self.packages: + self.error(_("No link extracted"), "decrypt") + self.createPackages() @@ -38,18 +47,54 @@ class Crypter(Plugin): raise NotImplementedError + def generatePackages(self): + """ generate new packages from self.urls """ + + packages = map(lambda name, links: (name, links, None), self.api.generatePackages(self.urls).iteritems()) + self.packages.extend(packages) + + def createPackages(self): """ create new packages from self.packages """ + + package_folder = self.pyfile.package().folder + package_password = self.pyfile.package().password + package_queue = self.pyfile.package().queue + + use_subfolder = self.getConfig('use_subfolder') + subfolder_per_package = self.getConfig('subfolder_per_package') + + folder_per_package = self.config['general']['folder_per_package'] + for pack in self.packages: + name, links, folder = pack - self.logDebug("Parsed package %(name)s with %(len)d links" % { "name" : pack[0], "len" : len(pack[1]) } ) + self.logDebug("Parsed package: " + name, + "%d links" % len(links), + "Saved to folder: %s" % folder if folder else "Saved to download folder") - links = [x.decode("utf-8") for x in pack[1]] + links = map(lambda x: x.decode("utf-8"), links) - pid = self.core.api.addPackage(pack[0], links, self.pyfile.package().queue) + pid = self.api.addPackage(name, links, package_queue) - if self.pyfile.package().password: - self.core.api.setPackageData(pid, {"password": self.pyfile.package().password}) + if package_password: + self.api.setPackageData(pid, {"password": package_password}) - if self.urls: - self.core.api.generateAndAddPackages(self.urls) + setFolder = lambda x: self.api.setPackageData(pid, {"folder": x or ""}) #: Workaround to not break API addPackage method + + if use_subfolder: + if not subfolder_per_package: + setFolder(package_folder) + self.logDebug("Set package %(name)s folder to: %(folder)s" % {"name": name, "folder": folder}) + + elif not folder_per_package or name != folder: + if not folder: + folder = name.replace("http://", "").replace(":", "").replace("/", "_").replace("\\", "_") + + folder = save_path(folder) #@TODO: move to deep code checks + + setFolder(folder) + self.logDebug("Set package %(name)s folder to: %(folder)s" % {"name": name, "folder": folder}) + + elif folder_per_package: + setFolder(None) |