def download(item, VideoItem=Item(url=["",""]), Reproducir = False): logger.info("[torrent_player.py] - play") try: PorcentajeInicio = int(config.get_setting("porcentaje_torrent")) except: PorcentajeInicio = 5 video_file_path = "" video_file = "" video_file_size = 0 Cancelado = False #importa la libreria si no la encuentra sale de la funcion lt = libtorrent() if lt is None: return -2 #Para enlaces de EliteTorrent y quiza otros import HTMLParser item.url = HTMLParser.HTMLParser().unescape(item.url) #Creamos el directorio save_path_videos = os.path.join( config.get_setting("downloadpath") , "Torrent") if not os.path.exists(save_path_videos): os.mkdir(save_path_videos) #Creamos la sesion session = lt.session() settings = session.settings() settings.stop_tracker_timeout = 5 session.set_settings(settings) session.stop_dht() session.listen_on(0,0) session.add_dht_router("router.bittorrent.com",6881) session.add_dht_router("router.utorrent.com",6881) session.add_dht_router("router.bitcomet.com",554) session.start_dht(None) #Añadimos el torrent if not item.url.startswith("magnet:" ): if os.path.isfile(item.url): f = open(url,'rb') data = f.read() info = lt.torrent_info(bencode.bdecode(data)) f.close() else: data = scrapertools.downloadpage(item.url) info = lt.torrent_info(bencode.bdecode(data)) torrent = session.add_torrent({'ti':info , 'save_path':save_path_videos, 'storage_mode':lt.storage_mode_t.storage_mode_allocate}) else: torrent = session.add_torrent({'url':item.url, 'save_path':save_path_videos, 'storage_mode':lt.storage_mode_t.storage_mode_allocate}) #Descarga secuencial torrent.set_sequential_download(True) Time = time.time() pDialog = guitools.Dialog_Progress(__module__,"Iniciando descarga...") #Esperamos a los metadatos while not torrent.has_metadata(): time.sleep(1) if pDialog.IsCanceled(): pDialog.Cerrar() Cancelado =True break Progreso(session,torrent,pDialog,Time) #Obtenemos la info del Torrent if torrent.has_metadata(): info = torrent.get_torrent_info() #Buscamos el archivo del vídeo, en principio es el de mayor tamaño. for f in info.files(): if f.size > video_file_size: video_file_size = f.size video_file_path = f.path.decode("utf8") video_file = os.path.basename(video_file_path) VideoItem.url[1] = os.path.join(save_path_videos,video_file_path.encode("utf8")) #Loop para controlar la descarga ReproduccionIniciada = False IniciarAutomatico = Reproducir while (not torrent.is_seed()): time.sleep(1) Progreso(session,torrent,pDialog,Time) #Si se cierra el reproductor, vuelve a mostrar el progreso if not guitools.isPlaying() and ReproduccionIniciada: ReproduccionIniciada = False IniciarAutomatico = False pDialog = guitools.Dialog_Progress(__module__,"") Progreso(session,torrent,pDialog,Time) #Para cancelar la descarga if not guitools.isPlaying() and pDialog.IsCanceled(): pDialog.Cerrar() Respuesta = guitools.Dialog_YesNo(__module__,"Presione 'Si' para cancelar la descarga y 'No' para cerrar el dialogo e iniciar la reproduccion.") if Respuesta == True: Cancelado =True break; else: ReproduccionIniciada =True guitools.play(item,VideoItem) #Para reproducir el vídeo if torrent.status().state ==3 and (torrent.status().progress * 100) >= PorcentajeInicio and not guitools.isPlaying() and IniciarAutomatico and not ReproduccionIniciada: logger.info("[torrent_player.py] - Iniciando reproduccion") pDialog.Cerrar() ReproduccionIniciada = True guitools.play(item,VideoItem) #Si llega aqui es porque se ha cancelado o porque la descarga ha terminado. #si se esta reprodciendo se espera. while guitools.isPlaying(): time.sleep(1) #Si era una reproduccion, pregunta si desea eliminar los datos descargados if Reproducir: pDialog.Cerrar() Respuesta = guitools.Dialog_YesNo(__module__,"Eliminar los datos descargados?") pDialog = guitools.Dialog_Progress(__module__,"") pDialog.Actualizar(25, "Deteniendo Torrent") if Respuesta ==True: session.remove_torrent(torrent,1) else: session.remove_torrent(torrent,0) pDialog.Actualizar(50, "Eliminando sesion") del session pDialog.Actualizar(75, "Deteniendo libtorrent") del lt pDialog.Cerrar() if Respuesta ==True: guitools.Dialog_OK(__module__, 'Torrent eliminado y datos borrados.') #Si era una descarga, detiene el torrent. else: pDialog = guitools.Dialog_Progress(__module__,"") pDialog.Actualizar(25, "Deteniendo Torrent") session.remove_torrent(torrent,0) pDialog.Actualizar(50, "Eliminando sesion") del session pDialog.Actualizar(75, "Deteniendo libtorrent") del lt #Si la descarga se ha completado, la mueve a la carpeta descargas if not Cancelado: ''' RutaArchivo = os.path.join(config.get_setting("downloadpath"),item.title + "." + video_file.split(".")[len(video_file.split("."))-1] ) if os.path.exists(RutaArchivo): os.remove(RutaArchivo) if os.path.exists(os.path.join(save_path_videos,video_file_path)): os.rename(os.path.join(save_path_videos,video_file_path), RutaArchivo ) import shutil shutil.rmtree(os.path.join(save_path_videos,video_file_path.replace(save_path_videos,"").replace(video_file,""))) ''' pDialog.Cerrar() return 0 else: pDialog.Cerrar() return -1
def download(item, VideoItem=Item(url=["", ""]), Reproducir=False): logger.info("[torrent_player.py] - play") try: PorcentajeInicio = int(config.get_setting("porcentaje_torrent")) except: PorcentajeInicio = 5 video_file_path = "" video_file = "" video_file_size = 0 Cancelado = False #importa la libreria si no la encuentra sale de la funcion lt = libtorrent() if lt is None: return -2 #Para enlaces de EliteTorrent y quiza otros import HTMLParser item.url = HTMLParser.HTMLParser().unescape(item.url) #Creamos el directorio save_path_videos = os.path.join(config.get_setting("downloadpath"), "Torrent") if not os.path.exists(save_path_videos): os.mkdir(save_path_videos) #Creamos la sesion session = lt.session() settings = session.settings() settings.stop_tracker_timeout = 5 session.set_settings(settings) session.stop_dht() session.listen_on(0, 0) session.add_dht_router("router.bittorrent.com", 6881) session.add_dht_router("router.utorrent.com", 6881) session.add_dht_router("router.bitcomet.com", 554) session.start_dht(None) #Añadimos el torrent if not item.url.startswith("magnet:"): if os.path.isfile(item.url): f = open(url, 'rb') data = f.read() info = lt.torrent_info(bencode.bdecode(data)) f.close() else: data = scrapertools.downloadpage(item.url, addheaders=[["Referer", item.url]]) info = lt.torrent_info(bencode.bdecode(data)) torrent = session.add_torrent({ 'ti': info, 'save_path': save_path_videos, 'storage_mode': lt.storage_mode_t.storage_mode_allocate }) else: torrent = session.add_torrent({ 'url': item.url, 'save_path': save_path_videos, 'storage_mode': lt.storage_mode_t.storage_mode_allocate }) #Descarga secuencial torrent.set_sequential_download(True) Time = time.time() pDialog = guitools.Dialog_Progress(__module__, "Iniciando descarga...") #Esperamos a los metadatos while not torrent.has_metadata(): time.sleep(1) if pDialog.IsCanceled(): pDialog.Cerrar() Cancelado = True break Progreso(session, torrent, pDialog, Time, 0) #Obtenemos la info del Torrent if torrent.has_metadata(): info = torrent.get_torrent_info() VideoFiles = [] SrtFiles = [] Files = [] for f in info.files(): Size = 0 for file in Files: Size += file["Size"] Start = int(Size / info.piece_length()) End = int((Size + f.size) / info.piece_length()) Files.append({ "Start": Start, "End": End, "Size": f.size, "Path": f.path }) VideoExtensions = ["avi", "mp4", "mkv", "flv", "mpeg", "ts"] for file in Files: if file["Path"].split(".")[len(file["Path"].split(".")) - 1].lower() in VideoExtensions: VideoFiles.append(file) elif file["Path"].split(".")[len(file["Path"].split(".")) - 1].lower() == "srt": SrtFiles.append(file) VideoItem.url[1] = os.path.join(save_path_videos, VideoFiles[0]["Path"].encode("utf8")) #Loop para controlar la descarga ReproduccionIniciada = False IniciarAutomatico = Reproducir while (not torrent.is_seed()): time.sleep(1) VideoFile = VideoFiles[0] PiezaLista = VideoFile["Start"] for x in range(VideoFile["Start"], VideoFile["End"] - VideoFile["Start"] + 1): if torrent.status().pieces[x]: PiezaLista = x else: break #Los Srt Primero if len(SrtFiles): SrtFile = SrtFiles[0] for x in range(SrtFile["Start"], SrtFile["End"] - SrtFile["Start"] + 1): torrent.piece_priority(x, 7) Progreso(session, torrent, pDialog, Time, PiezaLista) #Si se cierra el reproductor, vuelve a mostrar el progreso if not guitools.isPlaying() and ReproduccionIniciada: ReproduccionIniciada = False IniciarAutomatico = False pDialog = guitools.Dialog_Progress(__module__, "") Progreso(session, torrent, pDialog, Time, PiezaLista) #Para cancelar la descarga if not guitools.isPlaying() and pDialog.IsCanceled(): pDialog.Cerrar() Respuesta = guitools.Dialog_YesNo( __module__, "Presione 'Si' para cancelar la descarga y 'No' para cerrar el dialogo e iniciar la reproduccion." ) if Respuesta == True: Cancelado = True break else: ReproduccionIniciada = True guitools.play(item, VideoItem) #Para reproducir el vídeo if torrent.status().state == 3 and ( torrent.status().progress * 100) >= PorcentajeInicio and not guitools.isPlaying( ) and IniciarAutomatico and not ReproduccionIniciada: logger.info("[torrent_player.py] - Iniciando reproduccion") pDialog.Cerrar() ReproduccionIniciada = True guitools.play(item, VideoItem) #Si llega aqui es porque se ha cancelado o porque la descarga ha terminado. #si se esta reprodciendo se espera. while guitools.isPlaying(): time.sleep(1) #Si era una reproduccion, pregunta si desea eliminar los datos descargados if Reproducir: pDialog.Cerrar() Respuesta = guitools.Dialog_YesNo(__module__, "Eliminar los datos descargados?") pDialog = guitools.Dialog_Progress(__module__, "") pDialog.Actualizar(25, "Deteniendo Torrent") if Respuesta == True: session.remove_torrent(torrent, 1) else: session.remove_torrent(torrent, 0) pDialog.Actualizar(50, "Eliminando sesion") del session pDialog.Actualizar(75, "Deteniendo libtorrent") del lt pDialog.Cerrar() if Respuesta == True: guitools.Dialog_OK(__module__, 'Torrent eliminado y datos borrados.') #Si era una descarga, detiene el torrent. else: pDialog = guitools.Dialog_Progress(__module__, "") pDialog.Actualizar(25, "Deteniendo Torrent") session.remove_torrent(torrent, 0) pDialog.Actualizar(50, "Eliminando sesion") del session pDialog.Actualizar(75, "Deteniendo libtorrent") del lt #Si la descarga se ha completado, la mueve a la carpeta descargas if not Cancelado: ''' RutaArchivo = os.path.join(config.get_setting("downloadpath"),item.title + "." + video_file.split(".")[len(video_file.split("."))-1] ) if os.path.exists(RutaArchivo): os.remove(RutaArchivo) if os.path.exists(os.path.join(save_path_videos,video_file_path)): os.rename(os.path.join(save_path_videos,video_file_path), RutaArchivo ) import shutil shutil.rmtree(os.path.join(save_path_videos,video_file_path.replace(save_path_videos,"").replace(video_file,""))) ''' pDialog.Cerrar() return 0 else: pDialog.Cerrar() return -1
def download(item, VideoItem=Item(url=["",""]), Reproducir = False): logger.info("[torrent_player.py] - play") try: PorcentajeInicio = int(config.get_setting("porcentaje_torrent")) except: PorcentajeInicio = 5 video_file_path = "" video_file = "" video_file_size = 0 Cancelado = False #importa la libreria si no la encuentra sale de la funcion lt = libtorrent() if lt is None: return -2 #Para enlaces de EliteTorrent y quiza otros import HTMLParser item.url = HTMLParser.HTMLParser().unescape(item.url) #Creamos el directorio save_path_videos = os.path.join( config.get_setting("downloadpath") , "Torrent") if not os.path.exists(save_path_videos): os.mkdir(save_path_videos) #Creamos la sesion session = lt.session() settings = session.settings() settings.stop_tracker_timeout = 5 session.set_settings(settings) session.stop_dht() session.add_dht_router("router.bittorrent.com",6881) session.add_dht_router("router.utorrent.com",6881) session.add_dht_router("router.bitcomet.com",554) session.start_dht(None) import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(('8.8.8.8', 0)) # connecting to a UDP address doesn't send packets local_ip_address = s.getsockname()[0] session.listen_on(0,0,local_ip_address) #Añadimos el torrent if not item.url.startswith("magnet:" ): if os.path.isfile(item.url): f = open(url,'rb') data = f.read() info = lt.torrent_info(bencode.bdecode(data)) f.close() else: data = scrapertools.downloadpage(item.url, addheaders=[["Referer",item.url]]) info = lt.torrent_info(bencode.bdecode(data)) torrent = session.add_torrent({'ti':info , 'save_path':save_path_videos, 'storage_mode':lt.storage_mode_t.storage_mode_sparse}) else: torrent = session.add_torrent({'url':item.url, 'save_path':save_path_videos, 'storage_mode':lt.storage_mode_t.storage_mode_sparse}) #Descarga secuencial torrent.set_sequential_download(True) Time = time.time() pDialog = guitools.Dialog_Progress(__module__,"Iniciando descarga...") #Esperamos a los metadatos while not torrent.has_metadata(): time.sleep(1) if pDialog.IsCanceled(): pDialog.Cerrar() Cancelado =True break Progreso(session,torrent,pDialog,Time,0) #Obtenemos la info del Torrent if torrent.has_metadata(): info = torrent.get_torrent_info() VideoFiles=[] SrtFiles=[] Files = [] for f in info.files(): Size = 0 for file in Files: Size += file["Size"] Start = int(Size / info.piece_length()) End = int((Size + f.size) / info.piece_length()) Files.append({"Start":Start, "End" : End, "Size": f.size, "Path" : f.path}) VideoExtensions = ["avi", "mp4", "mkv", "flv", "mpeg", "ts"] for file in Files: if file["Path"].split(".")[len( file["Path"].split("."))-1].lower() in VideoExtensions: VideoFiles.append(file) elif file["Path"].split(".")[len(file["Path"].split("."))-1].lower() =="srt": SrtFiles.append(file) VideoItem.url[1] = os.path.join(save_path_videos, VideoFiles[0]["Path"]) #Loop para controlar la descarga ReproduccionIniciada = False IniciarAutomatico = Reproducir while (not torrent.is_seed()): time.sleep(1) VideoFile = VideoFiles[0] PiezaLista = VideoFile["Start"] for x in range(VideoFile["Start"],VideoFile["End"]- VideoFile["Start"] +1): if torrent.status().pieces[x]: PiezaLista = x else: break #Los Srt Primero if len(SrtFiles): SrtFile = SrtFiles[0] for x in range(SrtFile["Start"],SrtFile["End"]- SrtFile["Start"] +1): torrent.piece_priority(x,7) Progreso(session,torrent,pDialog,Time,PiezaLista) #Si se cierra el reproductor, vuelve a mostrar el progreso if not guitools.isPlaying() and ReproduccionIniciada: ReproduccionIniciada = False IniciarAutomatico = False pDialog = guitools.Dialog_Progress(__module__,"") Progreso(session,torrent,pDialog,Time,PiezaLista) #Para cancelar la descarga if not guitools.isPlaying() and pDialog.IsCanceled(): pDialog.Cerrar() Respuesta = guitools.Dialog_YesNo(__module__,"Presione 'Si' para cancelar la descarga y 'No' para cerrar el dialogo e iniciar la reproduccion.") if Respuesta == True: Cancelado =True break; else: ReproduccionIniciada =True guitools.play(item,VideoItem) #Para reproducir el vídeo if torrent.status().state ==3 and (torrent.status().progress * 100) >= PorcentajeInicio and not guitools.isPlaying() and IniciarAutomatico and not ReproduccionIniciada: logger.info("[torrent_player.py] - Iniciando reproduccion") pDialog.Cerrar() ReproduccionIniciada = True guitools.play(item,VideoItem) #Si llega aqui es porque se ha cancelado o porque la descarga ha terminado. #si se esta reprodciendo se espera. while guitools.isPlaying(): time.sleep(1) #Si era una reproduccion, pregunta si desea eliminar los datos descargados if Reproducir: pDialog.Cerrar() Respuesta = guitools.Dialog_YesNo(__module__,"Eliminar los datos descargados?") pDialog = guitools.Dialog_Progress(__module__,"") pDialog.Actualizar(25, "Deteniendo Torrent") if Respuesta ==True: session.remove_torrent(torrent,1) else: session.remove_torrent(torrent,0) pDialog.Actualizar(50, "Eliminando sesion") del session pDialog.Actualizar(75, "Deteniendo libtorrent") del lt pDialog.Cerrar() if Respuesta ==True: guitools.Dialog_OK(__module__, 'Torrent eliminado y datos borrados.') #Si era una descarga, detiene el torrent. else: pDialog = guitools.Dialog_Progress(__module__,"") pDialog.Actualizar(25, "Deteniendo Torrent") session.remove_torrent(torrent,0) pDialog.Actualizar(50, "Eliminando sesion") del session pDialog.Actualizar(75, "Deteniendo libtorrent") del lt #Si la descarga se ha completado, la mueve a la carpeta descargas if not Cancelado: ''' RutaArchivo = os.path.join(config.get_setting("downloadpath"),item.title + "." + video_file.split(".")[len(video_file.split("."))-1] ) if os.path.exists(RutaArchivo): os.remove(RutaArchivo) if os.path.exists(os.path.join(save_path_videos,video_file_path)): os.rename(os.path.join(save_path_videos,video_file_path), RutaArchivo ) import shutil shutil.rmtree(os.path.join(save_path_videos,video_file_path.replace(save_path_videos,"").replace(video_file,""))) ''' pDialog.Cerrar() return 0 else: pDialog.Cerrar() return -1