Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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))
Beispiel #5
0
    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)
Beispiel #6
0
    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)