From df94b062da9908786e55da86f02faaebf71b4807 Mon Sep 17 00:00:00 2001 From: marco Date: Mon, 17 Jun 2019 19:56:36 +0200 Subject: [PATCH] initial background downloader support --- core/downloader.py | 9 +++------ specials/downloads.py | 21 ++++++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/core/downloader.py b/core/downloader.py index a0bb4b51..e5baf8ec 100644 --- a/core/downloader.py +++ b/core/downloader.py @@ -102,9 +102,9 @@ class Downloader(object): # Funciones def start_dialog(self, title=config.get_localized_string(60200)): from platformcode import platformtools - progreso = platformtools.dialog_progress(title, config.get_localized_string(60201)) + progreso = platformtools.dialog_progress_bg(title, config.get_localized_string(60201)) self.start() - while self.state == self.states.downloading and not progreso.iscanceled(): + while self.state == self.states.downloading: time.sleep(0.1) line1 = "%s" % (self.filename) line2 = config.get_localized_string(59983) % ( @@ -112,10 +112,7 @@ class Downloader(object): self.speed[1], self.speed[2], self.connections[0], self.connections[1]) line3 = config.get_localized_string(60202) % (self.remaining_time) - progreso.update(int(self.progress), line1, line2, line3) - if self.state == self.states.downloading: - self.stop() - progreso.close() + progreso.update(int(self.progress), line1, line2 + line3) def start(self): if self._state == self.states.error: return diff --git a/specials/downloads.py b/specials/downloads.py index 46b83284..925f70df 100644 --- a/specials/downloads.py +++ b/specials/downloads.py @@ -14,6 +14,7 @@ from past.utils import old_div import re import time import unicodedata +from threading import Thread from core import filetools, jsontools, scraper, scrapertools, servertools, videolibrarytools, support @@ -21,6 +22,7 @@ from core.downloader import Downloader from core.item import Item from platformcode import config, logger from platformcode import platformtools +from platformcode.launcher import downloaderObj STATUS_COLORS = {0: "orange", 1: "orange", 2: "green", 3: "red"} STATUS_CODES = type("StatusCode", (), {"stoped": 0, "canceled": 1, "completed": 2, "error": 3}) @@ -262,7 +264,8 @@ def menu(item): # Opcion inicaiar descarga if opciones[seleccion] == op[0]: - start_download(item) + th = Thread(target=start_download, args=(item,)) + th.start() # Elegir Servidor if opciones[seleccion] == op[3]: @@ -398,14 +401,14 @@ def get_match_list(data, match_list, order_list=None, only_ascii=False, ignoreca { "ID1" : ["Cadena 1", "Cadena 2", "Cadena 3"], "ID2" : ["Cadena 4", "Cadena 5", "Cadena 6"] } - + El diccionario no pude contener una misma cadena de busqueda en varías IDs. - + La busqueda se realiza por orden de tamaño de cadena de busqueda (de mas larga a mas corta) si una cadena coincide, se elimina de la cadena a buscar para las siguientes, para que no se detecten dos categorias si una cadena es parte de otra: - por ejemplo: "Idioma Español" y "Español" si la primera aparece en la cadena "Pablo sabe hablar el Idioma Español" + por ejemplo: "Idioma Español" y "Español" si la primera aparece en la cadena "Pablo sabe hablar el Idioma Español" coincidira con "Idioma Español" pero no con "Español" ya que la coincidencia mas larga tiene prioridad. - + """ match_dict = dict() matches = [] @@ -459,7 +462,7 @@ def get_match_list(data, match_list, order_list=None, only_ascii=False, ignoreca def sort_method(item): """ - Puntua cada item en funcion de varios parametros: + Puntua cada item en funcion de varios parametros: @type item: item @param item: elemento que se va a valorar. @return: puntuacion otenida @@ -733,14 +736,14 @@ def start_download(item): def get_episodes(item): - logger.info("contentAction: %s | contentChannel: %s | contentType: %s" % (item.contentAction, item.contentChannel, item.contentType)) - + logger.info("contentAction: %s | contentChannel: %s | contentType: %s" % ( + item.contentAction, item.contentChannel, item.contentType)) + if 'dlseason' in item: season = True season_number = item.dlseason else: season = False - # El item que pretendemos descargar YA es un episodio if item.contentType == "episode": episodes = [item.clone()]