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()
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()
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()
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)
def _save(self): """Just save.""" # get it from tabs config.update(self.gp.get_config()) config.update(self.cp.get_config()) config.save()