fix: fixed issues related to missing wvd
This commit is contained in:
63
app.py
63
app.py
@@ -42,6 +42,7 @@ def require_login():
|
||||
DOWNLOADS_DIR = Path(os.environ.get("DOWNLOADS_DIR", "/downloads"))
|
||||
COOKIES_PATH = Path(os.environ.get("COOKIES_PATH", "/config/cookies.txt"))
|
||||
CONFIG_DIR = Path(os.environ.get("CONFIG_DIR", "/config"))
|
||||
WVD_PATH = Path(os.environ.get("WVD_PATH", "/config/device.wvd"))
|
||||
TEMP_DIR = Path("/tmp/votify")
|
||||
|
||||
DOWNLOADS_DIR.mkdir(parents=True, exist_ok=True)
|
||||
@@ -93,6 +94,8 @@ def run_download(job_id: str, urls: list[str], options: dict):
|
||||
cmd.extend(["--cookies-path", str(COOKIES_PATH)])
|
||||
cmd.extend(["--output-path", str(DOWNLOADS_DIR)])
|
||||
cmd.extend(["--temp-path", str(TEMP_DIR)])
|
||||
if WVD_PATH.exists():
|
||||
cmd.extend(["--wvd-path", str(WVD_PATH)])
|
||||
|
||||
quality = options.get("audio_quality", "aac-medium")
|
||||
if quality:
|
||||
@@ -149,8 +152,14 @@ def run_download(job_id: str, urls: list[str], options: dict):
|
||||
text=True,
|
||||
bufsize=1,
|
||||
)
|
||||
with jobs_lock:
|
||||
jobs[job_id]["process"] = process
|
||||
|
||||
output_lines = []
|
||||
for line in process.stdout:
|
||||
with jobs_lock:
|
||||
if jobs[job_id]["status"] == "cancelled":
|
||||
break
|
||||
line = line.rstrip("\n")
|
||||
output_lines.append(line)
|
||||
with jobs_lock:
|
||||
@@ -158,12 +167,18 @@ def run_download(job_id: str, urls: list[str], options: dict):
|
||||
|
||||
process.wait()
|
||||
|
||||
if process.returncode == 0 and want_mp3:
|
||||
convert_to_mp3(job_id, files_before)
|
||||
|
||||
with jobs_lock:
|
||||
jobs[job_id]["status"] = "completed" if process.returncode == 0 else "failed"
|
||||
jobs[job_id]["return_code"] = process.returncode
|
||||
cancelled = jobs[job_id]["status"] == "cancelled"
|
||||
|
||||
if cancelled:
|
||||
with jobs_lock:
|
||||
jobs[job_id]["output"] = jobs[job_id].get("output", []) + ["[cancelled] Job was cancelled by user."]
|
||||
else:
|
||||
if process.returncode == 0 and want_mp3:
|
||||
convert_to_mp3(job_id, files_before)
|
||||
with jobs_lock:
|
||||
jobs[job_id]["status"] = "completed" if process.returncode == 0 else "failed"
|
||||
jobs[job_id]["return_code"] = process.returncode
|
||||
except Exception as e:
|
||||
with jobs_lock:
|
||||
jobs[job_id]["status"] = "failed"
|
||||
@@ -244,10 +259,14 @@ def start_download():
|
||||
return jsonify({"job_id": job_id})
|
||||
|
||||
|
||||
def job_to_dict(job):
|
||||
return {k: v for k, v in job.items() if k != "process"}
|
||||
|
||||
|
||||
@app.route("/api/jobs")
|
||||
def list_jobs():
|
||||
with jobs_lock:
|
||||
return jsonify(list(jobs.values()))
|
||||
return jsonify([job_to_dict(j) for j in jobs.values()])
|
||||
|
||||
|
||||
@app.route("/api/jobs/<job_id>")
|
||||
@@ -256,7 +275,22 @@ def get_job(job_id):
|
||||
job = jobs.get(job_id)
|
||||
if not job:
|
||||
return jsonify({"error": "Job not found"}), 404
|
||||
return jsonify(job)
|
||||
return jsonify(job_to_dict(job))
|
||||
|
||||
|
||||
@app.route("/api/jobs/<job_id>/cancel", methods=["POST"])
|
||||
def cancel_job(job_id):
|
||||
with jobs_lock:
|
||||
job = jobs.get(job_id)
|
||||
if not job:
|
||||
return jsonify({"error": "Job not found"}), 404
|
||||
if job["status"] != "running":
|
||||
return jsonify({"error": "Job is not running"}), 400
|
||||
job["status"] = "cancelled"
|
||||
proc = job.get("process")
|
||||
if proc:
|
||||
proc.terminate()
|
||||
return jsonify({"ok": True})
|
||||
|
||||
|
||||
@app.route("/api/jobs/<job_id>", methods=["DELETE"])
|
||||
@@ -355,5 +389,20 @@ def upload_cookies():
|
||||
return jsonify({"ok": True})
|
||||
|
||||
|
||||
@app.route("/api/wvd", methods=["GET"])
|
||||
def check_wvd():
|
||||
return jsonify({"exists": WVD_PATH.exists()})
|
||||
|
||||
|
||||
@app.route("/api/wvd", methods=["POST"])
|
||||
def upload_wvd():
|
||||
if "file" not in request.files:
|
||||
return jsonify({"error": "No file uploaded"}), 400
|
||||
file = request.files["file"]
|
||||
CONFIG_DIR.mkdir(parents=True, exist_ok=True)
|
||||
file.save(WVD_PATH)
|
||||
return jsonify({"ok": True})
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="0.0.0.0", port=5000, debug=False)
|
||||
|
||||
Reference in New Issue
Block a user