# -*- coding: utf-8 -*- import urlparse from module.plugins.internal.Plugin import Plugin from module.utils import decode, save_path as safe_filename class Crypter(Plugin): __name__ = "Crypter" __type__ = "crypter" __version__ = "0.03" __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 #@TODO: Move to Hoster def __init__(self, pyfile): super(Crypter, self).__init__(pyfile) #: Provide information in dict here self.info = {} #@TODO: Move to Plugin #: 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 def process(self, pyfile): """Main method""" self.decrypt(pyfile) if self.urls: self._generate_packages() elif not self.packages: self.error(_("No link grabbed"), "decrypt") self._create_packages() def decrypt(self, pyfile): raise NotImplementedError def _generate_packages(self): """Generate new packages from self.urls""" packages = [(name, links, None) for name, links in self.core.api.generatePackages(self.urls).iteritems()] self.packages.extend(packages) def _create_packages(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') use_subfolder = self.getConfig('use_subfolder', folder_per_package) subfolder_per_package = self.getConfig('subfolder_per_package', True) for name, links, folder in self.packages: 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 ""}) #@NOTE: 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.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)