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 | |
| parent | 08a1f8922eed79adafd88ecec9ab8dbe729e9237 (diff) | |
One SoloTool instance per session
| -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) | 
