aboutsummaryrefslogtreecommitdiffstats
path: root/web-project/src
diff options
context:
space:
mode:
authorEddy Pedroni <epedroni@pm.me>2025-02-27 07:32:06 +0100
committerEddy Pedroni <epedroni@pm.me>2025-02-27 07:32:06 +0100
commit5565c6ae6ce8ad8588af777cb90a477a4514ef7e (patch)
tree45d1be89744adcc16fbcb38ea1aaf60bbc276375 /web-project/src
parent08a1f8922eed79adafd88ecec9ab8dbe729e9237 (diff)
One SoloTool instance per session
Diffstat (limited to 'web-project/src')
-rw-r--r--web-project/src/solo_tool_web.py34
1 files changed, 16 insertions, 18 deletions
diff --git a/web-project/src/solo_tool_web.py b/web-project/src/solo_tool_web.py
index 4d05e01..4e8f76d 100644
--- a/web-project/src/solo_tool_web.py
+++ b/web-project/src/solo_tool_web.py
@@ -1,3 +1,5 @@
+from glob import glob
+from os.path import basename, splitext
from nicegui import ui
from solo_tool import SoloTool
@@ -8,10 +10,7 @@ from solo_tool.midi_controller_launchpad_mini import MidiController
SESSION_DIR = "/home/eddy/music/sessions"
SONG_POOL = "/home/eddy/music"
-st = None
-
def fileName(path: str) -> str:
- from os.path import basename, splitext
return basename(splitext(path)[0])
@ui.refreshable
@@ -21,18 +20,20 @@ def keyPointTables(st: SoloTool) -> None:
for kp in st._keyPoints[i]:
ui.item(f"{kp:0.2}", on_click=handlers.setKeyPoint(st, kp)).props('clickable v-ripple').classes('text-lg')
-@ui.page('/{sessionFile}')
-def sessionPage(sessionFile: str):
+sessions = {}
+for f in glob(f"{SESSION_DIR}/*.json"):
+ sessionName = fileName(f)
+ sessions[sessionName] = loadSession(f, SONG_POOL)
+ sessions[sessionName].registerKeyPointListCallback(lambda new: keyPointTables.refresh())
+
+@ui.page('/{sessionName}')
+def sessionPage(sessionName: str):
fullscreen = ui.fullscreen()
ui.dark_mode().enable()
ui.colors(secondary='#ffc107')
- ui.page_title(sessionFile)
+ ui.page_title(sessionName)
- global st
- if st is not None:
- del st
- st = loadSession(f"{SESSION_DIR}/{sessionFile}.json", SONG_POOL)
- st.registerKeyPointListCallback(lambda new: keyPointTables.refresh())
+ st = sessions[sessionName]
# Header
with ui.header().classes('items-center'):
@@ -58,11 +59,10 @@ def sessionPage(sessionFile: str):
ui.slider(min=0, max=1.0, step=0.001) \
.bind_value_from(st, 'position') \
.on('change', setPosition) \
- .props('thumb-size=0px track-size=16px') \
- .classes('q-pa-none')
+ .props('thumb-size=0px track-size=16px')
# Key point position
- ui.slider(min=0, max=1.0, step=0.001).bind_value(st, 'keyPoint').props('selection-color=transparent color=secondary').classes('q-py-none')
+ ui.slider(min=0, max=1.0, step=0.001).bind_value(st, 'keyPoint').props('selection-color=transparent color=secondary')
# Play control
with ui.button_group().classes('w-full').style('height: 80px'):
@@ -94,9 +94,7 @@ def landingPage():
with ui.header().classes('items-center'):
ui.label("Choose a session").classes('text-lg')
- from glob import glob
- for f in glob(f"{SESSION_DIR}/*.json"):
- sessionName = fileName(f)
- ui.link(sessionName, f"/{sessionName}")
+ for name, soloTool in sessions.items():
+ ui.link(name, f"/{name}")
ui.run(binding_refresh_interval=0.2)