def add_package(self, name, links, dest=Destination.Queue): """ Adds a package, with links to desired destination. :param name: name of the new package :param links: list of urls :param dest: `Destination` :return: package id of the new package """ if self.pyload.config.get("general", "folder_per_package"): folder = urlparse.urlparse(name).path.split("/")[-1] else: folder = "" folder = safe_filename(folder) pid = self.pyload.files.add_package(name, folder, dest) self.pyload.files.add_links(links, pid) self.pyload.log.info(_("Added package %(name)s containing %(count)d links") % {"name": decode(name), "count": len(links)}) self.pyload.files.save() return pid
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.pyload.config.get("general", "folder_per_package") try: use_subfolder = self.get_config('use_subfolder') except Exception: use_subfolder = folder_per_package try: subfolder_per_package = self.get_config('subfolder_per_package') except Exception: subfolder_per_package = True for pack in self.packages: name, links, folder = pack self.log_debug("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.pyload.api.add_package(name, links, package_queue) if package_password: self.pyload.api.set_package_data(pid, {"password": package_password}) setFolder = lambda x: self.pyload.api.set_package_data(pid, {"folder": x or ""}) #: Workaround to do not break API addPackage method if use_subfolder: if not subfolder_per_package: setFolder(package_folder) self.log_debug("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.log_debug("Set package %(name)s folder to: %(folder)s" % {"name": name, "folder": folder}) elif folder_per_package: setFolder(None)
def folder(self): return safe_filename(self._folder)
if not os.path.exists(location): try: os.makedirs(location, int(self.core.config.get("permission", "folder"), 8)) if self.core.config.get("permission", "change_dl") and os.name != "nt": uid = pwd.getpwnam(self.core.config.get("permission", "user"))[2] gid = grp.getgrnam(self.core.config.get("permission", "group"))[2] os.chown(location, uid, gid) except Exception, e: self.fail(e) # convert back to unicode location = fs_decode(location) name = safe_filename(self.pyfile.name) filename = os.path.join(location, name) self.core.addonManager.dispatch_event("download-start", self.pyfile, url, filename) try: newname = self.req.http_download(url, filename, get=get, post=post, ref=ref, cookies=cookies, chunks=self.get_chunk_count(), resume=self.resumeDownload, progressNotify=self.pyfile.setProgress, disposition=disposition) finally: self.pyfile.size = self.req.size if newname: newname = urlparse.urlparse(newname).path.split('/')[-1]