aboutsummaryrefslogtreecommitdiffstats
path: root/web-project/src
diff options
context:
space:
mode:
authorEddy Pedroni <epedroni@pm.me>2025-02-26 22:38:03 +0100
committerEddy Pedroni <epedroni@pm.me>2025-02-26 22:38:03 +0100
commit08a1f8922eed79adafd88ecec9ab8dbe729e9237 (patch)
tree9b8239c565a60c82f3d1006bc3eeb4e22d61bdec /web-project/src
parente2a8104992eeaafe3aa9a2ade0f3ea4455039deb (diff)
Add session route
Diffstat (limited to 'web-project/src')
-rw-r--r--web-project/src/solo_tool_web.py58
1 files changed, 34 insertions, 24 deletions
diff --git a/web-project/src/solo_tool_web.py b/web-project/src/solo_tool_web.py
index 758825d..4d05e01 100644
--- a/web-project/src/solo_tool_web.py
+++ b/web-project/src/solo_tool_web.py
@@ -5,57 +5,56 @@ from solo_tool.session_manager import loadSession
from solo_tool import handlers
from solo_tool.midi_controller_launchpad_mini import MidiController
-st = loadSession("/home/eddy/music/sessions/funk-band-2024.json", "/home/eddy/music")
-midiController = MidiController(st)
+SESSION_DIR = "/home/eddy/music/sessions"
+SONG_POOL = "/home/eddy/music"
-try:
- midiController.connect()
-except:
- pass
+st = None
-def songName(path: str) -> str:
+def fileName(path: str) -> str:
from os.path import basename, splitext
return basename(splitext(path)[0])
-def addKeyPoint() -> None:
- st.keyPoints += [st.keyPoint]
-
-def setPosition(e) -> None:
- st.position = e.args
-
@ui.refreshable
-def keyPointTables() -> None:
+def keyPointTables(st: SoloTool) -> None:
for i, song in enumerate(st.songs):
with ui.list().props('separator').bind_visibility_from(st, 'song', value=i):
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')
-st.registerKeyPointListCallback(lambda new: keyPointTables.refresh())
-
-def main():
+@ui.page('/{sessionFile}')
+def sessionPage(sessionFile: str):
fullscreen = ui.fullscreen()
ui.dark_mode().enable()
ui.colors(secondary='#ffc107')
- #ui.run_javascript("rateSliderLabels = { 0: '0°C', 3: { label: '3°C' }, 5: '5°C', 6: '6°C' }")
+ ui.page_title(sessionFile)
+
+ global st
+ if st is not None:
+ del st
+ st = loadSession(f"{SESSION_DIR}/{sessionFile}.json", SONG_POOL)
+ st.registerKeyPointListCallback(lambda new: keyPointTables.refresh())
# Header
with ui.header().classes('items-center'):
ui.button(icon='menu', on_click=lambda: song_drawer.toggle()).props('flat round dense color=white')
- ui.label().bind_text_from(st, 'song', lambda index: songName(st.songs[index]) if index is not None else "Select a song").classes('text-lg')
+ ui.label().bind_text_from(st, 'song', lambda index: fileName(st.songs[index]) if index is not None else "Select a song").classes('text-lg')
# Key points list
with ui.right_drawer(top_corner=True, bottom_corner=True).props('width=120 behavior=desktop'):
ui.label("Key Points").classes('text-lg')
- keyPointTables()
+ keyPointTables(st)
+
+ def addKeyPoint() -> None: st.keyPoints += [st.keyPoint]
ui.button(icon='add', on_click=addKeyPoint).props('flat round dense color=white')
# Song list
with ui.left_drawer(bottom_corner=True).props('overlay breakpoint=8000') as song_drawer:
with ui.list().props('separator'):
for i, path in enumerate(st.songs):
- ui.item(songName(path), on_click=handlers.setSong(st, i, lambda: song_drawer.hide())).props('clickable v-ripple')
+ ui.item(fileName(path), on_click=handlers.setSong(st, i, lambda: song_drawer.hide())).props('clickable v-ripple')
# Playback position
+ def setPosition(e) -> None: st.position = e.args
ui.slider(min=0, max=1.0, step=0.001) \
.bind_value_from(st, 'position') \
.on('change', setPosition) \
@@ -86,7 +85,18 @@ def main():
ui.button(icon='fullscreen', on_click=fullscreen.toggle).props('outline')
- ui.run(binding_refresh_interval=0.5)
+@ui.page('/')
+def landingPage():
+ ui.dark_mode().enable()
+ ui.page_title("Solo Tool")
+
+ # Header
+ 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}")
-if __name__ in {'__main__', '__mp_main__'}:
- main()
+ui.run(binding_refresh_interval=0.2)