From 2edfc6bb1dcaeb5622ef0c9e7844608db334c07a Mon Sep 17 00:00:00 2001 From: marti Date: Tue, 15 Jul 2025 21:26:34 +0000 Subject: [PATCH] Actualizar app/main.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Añadido mensaje de descargando mientras descargas lista de reproducción --- app/main.py | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/app/main.py b/app/main.py index 7670dda..d17bcd6 100644 --- a/app/main.py +++ b/app/main.py @@ -13,11 +13,12 @@ os.makedirs(BASE_DOWNLOADS_DIR, exist_ok=True) def index(): if request.method == "POST": url = request.form.get("url") - mode = request.form.get("mode") # 'audio' o 'video' - download_type = request.form.get("type") # 'single' o 'playlist' + mode = request.form.get("mode") # 'audio' o 'video' + download_type = request.form.get("type") # 'single' o 'playlist' if not url: - return render_template("index.html", error="URL obligatoria") + # En caso de error, siempre renderiza la plantilla para que el JS pueda leer el error. + return render_template("index.html", error="URL obligatoria"), 400 # Modo single o playlist @@ -41,7 +42,7 @@ def index(): files = os.listdir(folder_path) if not files: - return render_template("index.html", error="No se pudo descargar el archivo.") + return render_template("index.html", error="No se pudo descargar el archivo."), 500 downloaded_file_path = os.path.join(folder_path, files[0]) @@ -56,10 +57,17 @@ def index(): print(f"Error al borrar archivos: {e}") return response + # Si es exitoso, solo envía el archivo. No render_template aquí. return send_file(downloaded_file_path, as_attachment=True, download_name=files[0]) - except subprocess.CalledProcessError: - return render_template("index.html", error="Error al descargar el vídeo.") + except subprocess.CalledProcessError as e: + # Captura la salida de error de yt-dlp para un mensaje más específico si es posible + error_message = f"Error al descargar el vídeo: {e}" + if e.stderr: + error_message += f" - {e.stderr.decode().strip()}" + return render_template("index.html", error=error_message), 500 + except Exception as e: + return render_template("index.html", error=f"Error inesperado: {e}"), 500 elif download_type == "playlist": folder_id = str(uuid.uuid4()) @@ -77,8 +85,13 @@ def index(): ) playlist_title = result.stdout.strip().splitlines()[0] playlist_title_clean = "".join(c for c in playlist_title if c.isalnum() or c in " _-").strip().replace(" ", "_") - except subprocess.CalledProcessError: - return render_template("index.html", error="Error al obtener el título de la playlist.") + except subprocess.CalledProcessError as e: + error_message = f"Error al obtener el título de la playlist: {e}" + if e.stderr: + error_message += f" - {e.stderr.decode().strip()}" + return render_template("index.html", error=error_message), 500 + except Exception as e: + return render_template("index.html", error=f"Error inesperado al obtener título de playlist: {e}"), 500 output_path = os.path.join(folder_path, "%(title)s.%(ext)s") cmd = ["yt-dlp", "-o", output_path] @@ -102,16 +115,21 @@ def index(): if os.path.exists(zip_path): os.remove(zip_path) except Exception as e: - print(f"Error al borrar archivos: {e}") + print(f"Error al borrar archivos de la playlist: {e}") return response + # Si es exitoso, solo envía el archivo. No render_template aquí. return send_file(zip_path, as_attachment=True, download_name=zip_filename, mimetype='application/zip') - except subprocess.CalledProcessError: - return render_template("index.html", error="Error al descargar la lista.") - + except subprocess.CalledProcessError as e: + error_message = f"Error al descargar la lista: {e}" + if e.stderr: + error_message += f" - {e.stderr.decode().strip()}" + return render_template("index.html", error=error_message), 500 + except Exception as e: + return render_template("index.html", error=f"Error inesperado al descargar playlist: {e}"), 500 else: - return render_template("index.html", error="Tipo de descarga no válido.") + return render_template("index.html", error="Tipo de descarga no válido."), 400 return render_template("index.html")