aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEddy Pedroni <epedroni@pm.me>2026-01-03 08:01:46 +0100
committerEddy Pedroni <epedroni@pm.me>2026-01-03 08:01:46 +0100
commit2eaa83bea9d53367a768e1b6345f113e1f1ec29d (patch)
tree99ad7435d7da8dd162ebba1b1fcc5c016b07b09b
parentb73ffa337f260ec529c0f1c0e52445bb93827f75 (diff)
Better default name for recording upload
-rw-r--r--web-project/pyproject.toml3
-rw-r--r--web-project/src/recording.py14
-rw-r--r--web-project/src/solo_tool_web.py2
3 files changed, 13 insertions, 6 deletions
diff --git a/web-project/pyproject.toml b/web-project/pyproject.toml
index 19353c2..44e5412 100644
--- a/web-project/pyproject.toml
+++ b/web-project/pyproject.toml
@@ -13,7 +13,8 @@ dependencies = [
"nicegui==2.11.1",
"click==8.2.1",
"requests==2.32.4",
- "solo_tool>=2.0"
+ "solo_tool>=2.0",
+ "python-slugify==8.0.4"
]
dynamic = ["version"]
diff --git a/web-project/src/recording.py b/web-project/src/recording.py
index 2afd567..4301b02 100644
--- a/web-project/src/recording.py
+++ b/web-project/src/recording.py
@@ -3,11 +3,16 @@ from contextlib import contextmanager
from asyncio import sleep
from tempfile import TemporaryDirectory
from datetime import date
+from re import sub
from nicegui import ui, run
+from slugify import slugify
_recording = None
+def _removeParens(string):
+ return sub(r'\(.*?\)', '', string).strip()
+
@contextmanager
def _disable(button: ui.button):
button.disable()
@@ -48,10 +53,11 @@ def _makePlayCallback(playButton, recordButton, uploadButton, soloTool, recorder
soloTool.play()
return f
-def _makeUploadCallback(playButton, recordButton, uploadButton, tempDir, sessionManager):
+def _makeUploadCallback(playButton, recordButton, uploadButton, tempDir, sessionManager, getCurrentSong):
async def f():
with ui.dialog() as dialog, ui.card():
- fileName = ui.input(label='File name', value="jam.mp3")
+ defaultName = f"{slugify(_removeParens(getCurrentSong()))}.mp3"
+ fileName = ui.input(label='File name', value=defaultName)
with ui.row():
ui.button('Upload', color='positive', on_click=lambda: dialog.submit(fileName.value))
ui.button('Cancel', color='negative' ,on_click=lambda: dialog.submit(None))
@@ -91,7 +97,7 @@ def _makeUploadCallback(playButton, recordButton, uploadButton, tempDir, session
n.dismiss()
return f
-def recordingControls(soloTool, recorder, sessionManager):
+def recordingControls(soloTool, recorder, sessionManager, getCurrentSong):
tempDir = TemporaryDirectory(prefix="solotool-")
wavFile = Path(tempDir.name) / "st_recording.wav"
@@ -108,4 +114,4 @@ def recordingControls(soloTool, recorder, sessionManager):
recordButton.on_click(_makeRecordCallback(playButton, recordButton, uploadButton, soloTool, recorder, wavFile))
playButton.on_click(_makePlayCallback(playButton, recordButton, uploadButton, soloTool, recorder, wavFile))
- uploadButton.on_click(_makeUploadCallback(playButton, recordButton, uploadButton, tempDir, sessionManager))
+ uploadButton.on_click(_makeUploadCallback(playButton, recordButton, uploadButton, tempDir, sessionManager, getCurrentSong))
diff --git a/web-project/src/solo_tool_web.py b/web-project/src/solo_tool_web.py
index c565d85..7b3d740 100644
--- a/web-project/src/solo_tool_web.py
+++ b/web-project/src/solo_tool_web.py
@@ -117,7 +117,7 @@ def sessionPage(sessionId: str):
markerLabels = ",".join([f"{v}:'{v}x'" for v in [0.4, 0.6, 0.8, 1.0, 1.2]])
ui.slider(min=0.4, max=1.2, step=0.05).bind_value(st, 'rate').props(f'snap markers :marker-labels="{{{markerLabels}}}"').classes('q-px-md')
- recordingControls(st, recorder, sessionManager)
+ recordingControls(st, recorder, sessionManager, lambda: fileName(st.songs[st.song]))
@ui.page('/')
def landingPage():