diff options
| author | Eddy Pedroni <epedroni@pm.me> | 2026-01-03 08:01:46 +0100 |
|---|---|---|
| committer | Eddy Pedroni <epedroni@pm.me> | 2026-01-03 08:01:46 +0100 |
| commit | 2eaa83bea9d53367a768e1b6345f113e1f1ec29d (patch) | |
| tree | 99ad7435d7da8dd162ebba1b1fcc5c016b07b09b | |
| parent | b73ffa337f260ec529c0f1c0e52445bb93827f75 (diff) | |
Better default name for recording upload
| -rw-r--r-- | web-project/pyproject.toml | 3 | ||||
| -rw-r--r-- | web-project/src/recording.py | 14 | ||||
| -rw-r--r-- | web-project/src/solo_tool_web.py | 2 |
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(): |
