# -*- coding: utf-8 -*- from urlparse import urlparse from pyload.plugin.Plugin import Plugin from pyload.utils import decode, safe_filename class Crypter(Plugin): __name = "Crypter" __type = "crypter" __version = "0.05" __pattern = r'^unmatchable$' __config = [("use_subfolder", "bool", "Save package to subfolder", True), #: Overrides core.config.get("general", "folder_per_package") ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] __description = """Base decrypter plugin""" __license = "GPLv3" __authors = [("Walter Purcaro", "vuolter@gmail.com")] html = None #: last html loaded def __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 = [] 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 grabbed"), "decrypt") self.createPackages() def decrypt(self, pyfile): raise NotImplementedError def generatePackages(self): """ generate new packages from self.urls """ packages = map(lambda name, links: (name, links, None), self.core.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 folder_per_package = self.core.config.get("general", "folder_per_package") try: use_subfolder = self.getConfig('use_subfolder') except Exception: use_subfolder = folder_per_package try: subfolder_per_package = self.getConfig('subfolder_per_package') except Exception: subfolder_per_package = True for pack in self.packages: name, links, folder = pack self.logDebug("Parsed package: %s" % name, "%d links" % len(links), "Saved to folder: %s" % folder if folder else "Saved to download folder") links = map(decode, links) pid = self.core.api.addPackage(name, links, package_queue) if package_password: self.core.api.setPackageData(pid, {"password": package_password}) setFolder = lambda x: self.core.api.setPackageData(pid, {"folder": x or ""}) #: Workaround to do 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 = urlparse(name).path.split("/")[-1] setFolder(safe_filename(folder)) self.logDebug("Set package %(name)s folder to: %(folder)s" % {"name": name, "folder": folder}) elif folder_per_package: setFolder(None)