def download_and_play(url,file_name,download_path,show_dialog=True):
# Lanza thread
logger.info("[download_and_play.py] Active threads "+str(threading.active_count()))
logger.info("[download_and_play.py] "+repr(threading.enumerate()))
logger.info("[download_and_play.py] Starting download thread...")
download_thread = DownloadThread(url,file_name,download_path)
download_thread.start()
logger.info("[download_and_play.py] Download thread started")
logger.info("[download_and_play.py] Active threads "+str(threading.active_count()))
logger.info("[download_and_play.py] "+repr(threading.enumerate()))
# Espera
logger.info("[download_and_play.py] Waiting...")
while True:
cancelled=False
if show_dialog:
dialog = xbmcgui.DialogProgress()
dialog.create('Descargando...', 'Cierra esta ventana para empezar la reproducción')
dialog.update(0)
while not cancelled and download_thread.is_alive():
dialog.update( download_thread.get_progress() , "Cancela esta ventana para empezar la reproducción", "Velocidad: "+str(int(download_thread.get_speed()/1024))+" KB/s "+str(download_thread.get_actual_size())+"MB de "+str(download_thread.get_total_size())+"MB" , "Tiempo restante: "+str( downloadtools.sec_to_hms(download_thread.get_remaining_time())) )
xbmc.sleep(1000)
if dialog.iscanceled():
cancelled=True
break
dialog.close()
else:
xbmc.executebuiltin((u'XBMC.Notification("Iniciando", "Iniciando descarga en segundo plano...", 300)'))
xbmc.sleep(3000)
logger.info("[download_and_play.py] End of waiting")
# Lanza el reproductor
player = CustomPlayer()
player.set_download_thread(download_thread)
player.PlayStream( download_thread.get_file_name() )
# Fin de reproducción
logger.info("[download_and_play.py] Fin de reproducción")
if player.is_stopped():
logger.info("[download_and_play.py] Terminado por el usuario")
break
else:
if not download_thread.is_alive():
logger.info("[download_and_play.py] La descarga ha terminado")
break
else:
logger.info("[download_and_play.py] Continua la descarga")
# Cuando el reproductor acaba, si continúa descargando lo para ahora
logger.info("[download_and_play.py] Download thread alive="+str(download_thread.is_alive()))
if download_thread.is_alive():
logger.info("[download_and_play.py] Killing download thread")
download_thread.force_stop()
评论列表
文章目录