def assignJob(self): """assing a job to a thread if possible""" if self.pause or not self.core.api.isTimeDownload(): return # if self.downloaded > 20: # if not self.cleanPyCurl(): return free = [x for x in self.threads if not x.active] inuse = set([((x.active.plugintype, x.active.pluginname), self.getLimit(x)) for x in self.threads if x.active and isinstance(x.active, PyFile) and x.active.hasPlugin() and x.active.plugin.account]) inuse = map(lambda x: ('.'.join(x[0]), x[1], len([y for y in self.threads if y.active and isinstance(y.active, PyFile) and y.active.plugintype == x[0][0] and y.active.pluginname == x[0][1]])), inuse) onlimit = [x[0] for x in inuse if x[1] > 0 and x[2] >= x[1]] occ = [x.active.plugintype + '.' + x.active.pluginname for x in self.threads if x.active and isinstance(x.active, PyFile) and x.active.hasPlugin() and not x.active.plugin.multiDL] + onlimit occ.sort() occ = tuple(set(occ)) job = self.core.files.getJob(occ) if job: try: job.initPlugin() except Exception, e: self.core.log.critical(str(e)) traceback.print_exc() job.setStatus("failed") job.error = str(e) job.release() return if job.plugin.getPluginType() == "hoster": spaceLeft = freeSpace(self.core.config.get("general", "download_folder")) / 1024 / 1024 if spaceLeft < self.core.config.get("general", "min_free_space"): self.core.log.warning(_("Not enough space left on device")) self.pause = True if free and not self.pause: thread = free[0] # self.downloaded += 1 thread.put(job) else: # put job back if occ not in self.core.files.jobCache: self.core.files.jobCache[occ] = [] self.core.files.jobCache[occ].append(job.id) # check for decrypt jobs job = self.core.files.getDecryptJob() if job: job.initPlugin() thread = DecrypterThread(self, job) else: thread = DecrypterThread(self, job)
def assignJob(self): """assing a job to a thread if possible""" if self.pause or not self.core.api.isTimeDownload(): return # if self.downloaded > 20: # if not self.cleanPyCurl(): return free = [x for x in self.threads if not x.active] inuse = set([((x.active.plugintype, x.active.pluginname), self.getLimit(x)) for x in self.threads if x.active and isinstance(x.active, PyFile) and x.active.hasPlugin() and x.active.plugin.account]) inuse = map(lambda x: ('.'.join(x[0]), x[1], len([y for y in self.threads if y.active and isinstance(y.active, PyFile) and y.active.plugintype == x[0][0] and y.active.pluginname == x[0][1]])), inuse) onlimit = [x[0] for x in inuse if x[1] > 0 and x[2] >= x[1]] occ = [x.active.plugintype + '.' + x.active.pluginname for x in self.threads if x.active and isinstance(x.active, PyFile) and x.active.hasPlugin() and not x.active.plugin.multiDL] + onlimit occ.sort() occ = tuple(set(occ)) job = self.core.files.getJob(occ) if job: try: job.initPlugin() except Exception, e: self.core.log.critical(str(e)) print_exc() job.setStatus("failed") job.error = str(e) job.release() return if job.plugin.getPluginType() == "hoster": spaceLeft = freeSpace(self.core.config.get("general", "download_folder")) / 1024 / 1024 if spaceLeft < self.core.config.get("general", "min_free_space"): self.core.log.warning(_("Not enough space left on device")) self.pause = True if free and not self.pause: thread = free[0] #self.downloaded += 1 thread.put(job) else: # put job back if occ not in self.core.files.jobCache: self.core.files.jobCache[occ] = [] self.core.files.jobCache[occ].append(job.id) # check for decrypt jobs job = self.core.files.getDecryptJob() if job: job.initPlugin() thread = DecrypterThread(self, job) else: thread = DecrypterThread(self, job)
def freeSpace(self): """Available free space at download directory in bytes""" return freeSpace(self.core.config.get("general", "download_folder"))