2024-06-14 17:39:50 +02:00
|
|
|
import os
|
2024-06-14 19:52:38 +02:00
|
|
|
import glob
|
2024-06-14 19:29:12 +02:00
|
|
|
from subprocess import check_call, CalledProcessError
|
2024-06-14 17:39:50 +02:00
|
|
|
from flask import Flask
|
|
|
|
|
2024-06-14 19:52:38 +02:00
|
|
|
from flask import request, render_template, make_response
|
|
|
|
|
|
|
|
from threading import Thread
|
2024-06-14 17:39:50 +02:00
|
|
|
|
|
|
|
app = Flask(
|
|
|
|
__name__,
|
|
|
|
# static_url_path="./",
|
|
|
|
static_folder="static",
|
|
|
|
template_folder="templates",
|
|
|
|
)
|
|
|
|
os.makedirs("uploads", exist_ok=True)
|
|
|
|
|
|
|
|
|
2024-06-14 19:29:12 +02:00
|
|
|
def convert_to_wav(file_name: str):
|
|
|
|
output, extension = file_name.rsplit(".", maxsplit=1)
|
|
|
|
|
|
|
|
assert extension != "wav"
|
|
|
|
|
|
|
|
print(f"{extension=}")
|
2024-06-14 19:58:16 +02:00
|
|
|
command = [
|
|
|
|
"tape2wav",
|
2024-06-14 20:07:50 +02:00
|
|
|
os.path.join("uploads", file_name),
|
2024-06-15 12:24:26 +02:00
|
|
|
os.path.join("uploads", f"{output}.wav"),
|
2024-06-14 19:58:16 +02:00
|
|
|
]
|
2024-06-14 19:29:12 +02:00
|
|
|
try:
|
2024-06-14 19:58:16 +02:00
|
|
|
check_call(command)
|
2024-06-14 19:29:12 +02:00
|
|
|
except CalledProcessError as exc:
|
|
|
|
print(f"tape2wav failed: {exc.output=}\n{exc.stderr=}")
|
|
|
|
raise
|
|
|
|
|
|
|
|
|
2024-06-14 19:52:38 +02:00
|
|
|
def run_cassetta(cassetta: str):
|
2024-06-14 20:41:00 +02:00
|
|
|
print("running cassetta")
|
2024-06-14 20:07:50 +02:00
|
|
|
command = [
|
|
|
|
"aplay",
|
|
|
|
os.path.join("uploads", cassetta),
|
|
|
|
]
|
2024-06-14 19:52:38 +02:00
|
|
|
|
|
|
|
try:
|
2024-06-14 20:07:50 +02:00
|
|
|
check_call(command)
|
2024-06-14 19:52:38 +02:00
|
|
|
except CalledProcessError as exc:
|
|
|
|
print(f"aplay failed: {exc.output=}\n{exc.stderr=}")
|
|
|
|
|
|
|
|
|
|
|
|
def uploads():
|
|
|
|
return map(
|
|
|
|
os.path.basename,
|
|
|
|
glob.glob("uploads/*wav"),
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2024-06-14 17:39:50 +02:00
|
|
|
@app.route("/")
|
|
|
|
def upload_form():
|
|
|
|
return render_template(
|
|
|
|
"upload.html",
|
|
|
|
title="Upload your shit here",
|
2024-06-14 19:52:38 +02:00
|
|
|
files=uploads(),
|
2024-06-14 17:39:50 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@app.route("/upload", methods=["POST"])
|
|
|
|
def upload_file():
|
|
|
|
if "file" not in request.files:
|
|
|
|
return "No file part"
|
|
|
|
|
|
|
|
file = request.files["file"]
|
|
|
|
if file.filename == "":
|
|
|
|
return "No selected file"
|
|
|
|
|
|
|
|
if not file:
|
|
|
|
return "No file?"
|
|
|
|
|
|
|
|
save_path = os.path.join("uploads", file.filename)
|
2024-06-14 20:07:50 +02:00
|
|
|
if os.path.exists(save_path):
|
2024-06-14 20:08:32 +02:00
|
|
|
return make_response("file already exists", 400)
|
2024-06-14 17:39:50 +02:00
|
|
|
|
|
|
|
try:
|
|
|
|
file.save(save_path)
|
|
|
|
except Exception as exc:
|
|
|
|
return f"fail: {exc=}"
|
|
|
|
|
2024-06-14 19:29:12 +02:00
|
|
|
name, extension = file.filename.rsplit(".", maxsplit=1)
|
|
|
|
if extension != "wav":
|
|
|
|
thread = Thread(target=convert_to_wav, args=(file.filename,))
|
|
|
|
thread.start()
|
|
|
|
print(f"thread started for {file.filename=}")
|
|
|
|
|
2024-06-14 20:13:21 +02:00
|
|
|
return render_template(
|
|
|
|
"upload_successful.html",
|
|
|
|
url="/",
|
|
|
|
seconds=3,
|
|
|
|
)
|
2024-06-14 17:39:50 +02:00
|
|
|
|
|
|
|
|
2024-06-14 19:52:38 +02:00
|
|
|
@app.route("/run/<string:cassetta>", methods=["GET"])
|
|
|
|
def run(cassetta: str):
|
|
|
|
thread = Thread(target=run_cassetta, args=(cassetta,))
|
|
|
|
thread.start()
|
|
|
|
|
2024-06-14 20:41:00 +02:00
|
|
|
response = make_response(make_response("", 302))
|
2024-06-14 19:52:38 +02:00
|
|
|
response.headers["Location"] = "/"
|
|
|
|
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
2024-06-14 21:17:02 +02:00
|
|
|
@app.route("/kill", methods=["GET"])
|
|
|
|
def kill():
|
|
|
|
check_call(["pkill", "aplay"])
|
|
|
|
|
|
|
|
response = make_response(make_response("", 302))
|
|
|
|
response.headers["Location"] = "/"
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
2024-06-14 17:39:50 +02:00
|
|
|
if __name__ == "__main__":
|
2024-06-14 20:29:25 +02:00
|
|
|
app.run(
|
|
|
|
host="0.0.0.0",
|
|
|
|
debug=True,
|
|
|
|
)
|