diff options
author | Eddy Pedroni <epedroni@pm.me> | 2025-02-27 07:32:06 +0100 |
---|---|---|
committer | Eddy Pedroni <epedroni@pm.me> | 2025-02-27 07:32:06 +0100 |
commit | 5565c6ae6ce8ad8588af777cb90a477a4514ef7e (patch) | |
tree | 45d1be89744adcc16fbcb38ea1aaf60bbc276375 /web-project/src | |
parent | 08a1f8922eed79adafd88ecec9ab8dbe729e9237 (diff) |
One SoloTool instance per session
Diffstat (limited to 'web-project/src')
-rw-r--r-- | web-project/src/solo_tool_web.py | 34 |
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) |