From f676ab0fb4d8f300c5a548c1191035e17a7ee689 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 | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/core/downloader.py b/core/downloader.py index ea918462..ddcc8bac 100644 --- a/core/downloader.py +++ b/core/downloader.py @@ -92,9 +92,9 @@ class Downloader: # 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) % ( @@ -102,10 +102,7 @@ class Downloader: 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 0673d1d6..db0b45e9 100644 --- a/specials/downloads.py +++ b/specials/downloads.py @@ -7,12 +7,14 @@ import os import re import time import unicodedata +from threading import Thread from core import filetools, jsontools, scraper, scrapertools, servertools, videolibrarytools, support 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}) @@ -244,7 +246,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]: @@ -343,14 +346,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 = [] @@ -400,7 +403,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 @@ -467,7 +470,7 @@ def download_from_url(url, item): d.start_dialog(config.get_localized_string(60332)) # Descarga detenida. Obtenemos el estado: - # Se ha producido un error en la descarga + # Se ha producido un error en la descarga if d.state == d.states.error: logger.info("Error trying to download %s" % (url)) status = STATUS_CODES.error @@ -668,7 +671,7 @@ def start_download(item): def get_episodes(item): logger.info("contentAction: %s | contentChannel: %s | contentType: %s" % ( item.contentAction, item.contentChannel, item.contentType)) - + # El item que pretendemos descargar YA es un episodio if item.contentType == "episode": episodes = [item.clone()]