def register_article(self, article, success=True): """ Register the articles we tried Not locked for performance, since it only modifies individual NZOs """ nzf = article.nzf nzo = nzf.nzo if nzf.deleted: logging.debug("Discarding article %s, no longer in queue", article.article) return articles_left, file_done, post_done = nzo.remove_article( article, success) if nzo.is_gone(): logging.debug("Discarding article for file %s, no longer in queue", nzf.filename) else: # Write data if file is done or at trigger time if file_done or (articles_left and (articles_left % DIRECT_WRITE_TRIGGER) == 0): if not nzo.precheck: # Only start decoding if we have a filename and type # The type is only set if sabyenc could decode the article if nzf.filename and nzf.type: Assembler.do.process((nzo, nzf, file_done)) elif nzf.filename.lower().endswith(".par2"): # Broken par2 file, try to get another one nzo.promote_par2(nzf) else: if file_has_articles(nzf): logging.warning(T("%s -> Unknown encoding"), nzf.filename) # Save bookkeeping in case of crash if file_done and (nzo.next_save is None or time.time() > nzo.next_save): nzo.save_to_disk() BPSMeter.do.save() if nzo.save_timeout is None: nzo.next_save = None else: nzo.next_save = time.time() + nzo.save_timeout # Remove post from Queue if post_done: self.end_job(nzo)
def register_article(self, article, found=True): """ Register the articles we tried Not locked for performance, since it only modifies individual NZOs """ nzf = article.nzf nzo = nzf.nzo if nzf.deleted: logging.debug("Discarding article %s, no longer in queue", article.article) return file_done, post_done = nzo.remove_article(article, found) filename = nzf.filename if nzo.is_gone(): logging.debug('Discarding article %s for deleted job', filename) else: if file_done: if nzo.next_save is None or time.time() > nzo.next_save: nzo.save_to_disk() BPSMeter.do.save() if nzo.save_timeout is None: nzo.next_save = None else: nzo.next_save = time.time() + nzo.save_timeout if not nzo.precheck: _type = nzf.type # Only start decoding if we have a filename and type if filename and _type: Assembler.do.process((nzo, nzf)) elif filename.lower().endswith('.par2'): # Broken par2 file, try to get another one nzo.promote_par2(nzf) else: if file_has_articles(nzf): logging.warning(T('%s -> Unknown encoding'), filename) if post_done: self.end_job(nzo)
def register_article(self, article, found=True): nzf = article.nzf nzo = nzf.nzo if nzf.deleted: logging.debug("Discarding article %s, no longer in queue", article.article) return file_done, post_done, reset = nzo.remove_article(article, found) filename = nzf.filename if reset: self.reset_try_list() if nzo.is_gone(): logging.debug('Discarding file completion %s for deleted job', filename) else: if file_done: if nzo.next_save is None or time.time() > nzo.next_save: sabnzbd.save_data(nzo, nzo.nzo_id, nzo.workpath) BPSMeter.do.save() if nzo.save_timeout is None: nzo.next_save = None else: nzo.next_save = time.time() + nzo.save_timeout if not nzo.precheck: _type = nzf.type # Only start decoding if we have a filename and type if filename and _type: Assembler.do.process((nzo, nzf)) else: if file_has_articles(nzf): logging.warning(T('%s -> Unknown encoding'), filename) if post_done: self.end_job(nzo)
def register_article(self, article): nzf = article.nzf nzo = nzf.nzo if nzo.deleted or nzf.deleted: logging.debug("Discarding article %s, no longer in queue", article.article) return file_done, post_done, reset = nzo.remove_article(article) filename = nzf.filename if reset: self.reset_try_list() if file_done: if nzo.next_save is None or time.time() > nzo.next_save: sabnzbd.save_data(nzo, nzo.nzo_id, nzo.workpath) BPSMeter.do.save() if nzo.save_timeout is None: nzo.next_save = None else: nzo.next_save = time.time() + nzo.save_timeout _type = nzf.type # Only start decoding if we have a filename and type if filename and _type: Assembler.do.process((nzo, nzf)) else: if file_has_articles(nzf): logging.warning(Ta('%s -> Unknown encoding'), filename) if post_done: if self.actives(grabs=False) < 2 and cfg.autodisconnect(): # This was the last job, close server connections sabnzbd.downloader.Downloader.do.disconnect() # Notify assembler to call postprocessor Assembler.do.process((nzo, None))