Пример #1
0
    def shutdown(self):
        """Stop everything and quit.

        This shutdown con be called at any time, even on init, so we have
        extra precautions about which attributes we have.
        """
        signal.emit('save_state')
        config.save()
        self.finished = True

        programs_data = getattr(self, 'programs_data', None)
        if programs_data is not None:
            programs_data.save()

        # shutdown all the downloaders
        for downloader in self.downloaders.values():
            downloader.shutdown()

        # bye bye
        self.app_quit()
Пример #2
0
    def shutdown(self):
        """Stop everything and quit.

        This shutdown con be called at any time, even on init, so we have
        extra precautions about which attributes we have.
        """
        signal.emit('save_state')
        config.save()
        self.finished = True

        programs_data = getattr(self, 'programs_data', None)
        if programs_data is not None:
            programs_data.save()

        downloaders = getattr(self, 'downloaders', {})
        for downloader in downloaders.itervalues():
            downloader.shutdown()

        # bye bye
        self.app_quit()
Пример #3
0
    def _update(self, dialog=None):
        """Update the content from source, being it server or something indicated at start."""
        if dialog:
            # when loading from disk we won't free the CPU much, so let's
            # leave some time for Qt to work (here on start and on each message below)
            QApplication.processEvents()

            def tell_user(template, *elements):
                if elements:
                    try:
                        msg = template % elements
                    except Exception as err:
                        msg = "ERROR %s when building message (template=%r, elements=%s" % (
                            err, template, elements)
                else:
                    msg = template
                dialog.append(msg)
                QApplication.processEvents()
        else:

            def tell_user(*t):
                """Do nothing."""

        logger.info("Downloading backend list")
        tell_user("Descargando la lista de backends...")
        try:
            backends_file = yield self._get(BACKENDS_LIST)
        except Exception as e:
            logger.error("Problem when downloading backends: %s", e)
            tell_user("Hubo un PROBLEMA al bajar la lista de backends: %s", e)
            return
        if dialog and dialog.closed:
            return

        # This is a text file, let's convert to unicode, and get useful lines.
        backends_file = backends_file.decode('utf-8')
        backends_list = [
            line.strip().split() for line in backends_file.split("\n")
            if line and line[0] != '#'
        ]

        backends = {}
        for b_name, b_dloader, b_filename in backends_list:
            logger.info("Downloading backend metadata for %r", b_name)
            tell_user("Descargando la lista de episodios para backend %r...",
                      b_name)
            try:
                compressed = yield self._get(b_filename)
            except Exception as e:
                logger.error("Problem when downloading episodes: %s", e)
                tell_user("Hubo un PROBLEMA al bajar los episodios: %s", e)
                return
            if dialog and dialog.closed:
                return

            tell_user("Descomprimiendo el archivo....")
            new_content = bz2.decompress(compressed)
            logger.debug("Downloaded data decompressed ok")

            content = json.loads(new_content)
            for item in content:
                item['downtype'] = b_dloader
            backends[b_name] = content

        if dialog and dialog.closed:
            return
        tell_user("Conciliando datos de diferentes backends")
        new_data = []
        for data in backends.values():
            new_data.extend(data)

        tell_user("Actualizando los datos internos (%d)....", len(new_data))
        logger.debug("Updating internal metadata (%d)", len(new_data))
        self.main_window.programs_data.merge(
            new_data, self.main_window.big_panel.episodes)

        config.update({'autorefresh_last_time': datetime.now()})
        config.save()

        tell_user("¡Todo terminado bien!")

        if dialog:
            dialog.accept()
Пример #4
0
                item['downtype'] = b_dloader
            backends[b_name] = content

        if dialog and dialog.closed:
            return
        tell_user("Conciliando datos de diferentes backends")
        logger.debug("Merging backends data")
        new_data = self._merge(backends)

        tell_user("Actualizando los datos internos....")
        logger.debug("Updating internal metadata (%d)", len(new_data))
        self.main_window.programs_data.merge(
            new_data, self.main_window.big_panel.episodes)

        config.update({'autorefresh_last_time': datetime.now()})
        config.save()

        tell_user(u"¡Todo terminado bien!")

        if dialog:
            dialog.accept()

    def _merge(self, backends):
        """Merge content from all backends.

        This is for v03-05, with only 'encuentro' and 'conectar' data to be
        really merged, other data just appended.
        """
        raw_encuentro_data = backends.pop('encuentro')
        raw_conectar_data = backends.pop('conectar')
        enc_data = dict((x['episode_id'], x) for x in raw_encuentro_data)
Пример #5
0
                item['downtype'] = b_dloader
            backends[b_name] = content

        if dialog and dialog.closed:
            return
        tell_user("Conciliando datos de diferentes backends")
        logger.debug("Merging backends data")
        new_data = self._merge(backends)

        tell_user("Actualizando los datos internos....")
        logger.debug("Updating internal metadata (%d)", len(new_data))
        self.main_window.programs_data.merge(
            new_data, self.main_window.big_panel.episodes)

        config.update({'autorefresh_last_time': datetime.now()})
        config.save()

        tell_user(u"¡Todo terminado bien!")

        if dialog:
            dialog.accept()

    def _merge(self, backends):
        """Merge content from all backends.

        This is for v03-05, with only 'encuentro' and 'conectar' data to be
        really merged, other data just appended.
        """
        raw_encuentro_data = backends.pop('encuentro')
        raw_conectar_data = backends.pop('conectar')
        enc_data = dict((x['episode_id'], x) for x in raw_encuentro_data)
Пример #6
0
 def _save(self):
     """Just save."""
     # get it from tabs
     config.update(self.gp.get_config())
     config.update(self.cp.get_config())
     config.save()
Пример #7
0
 def _save(self):
     """Just save."""
     # get it from tabs
     config.update(self.gp.get_config())
     config.update(self.cp.get_config())
     config.save()