diff options
author | Eddy Pedroni <epedroni@pm.me> | 2025-07-17 18:58:37 +0200 |
---|---|---|
committer | Eddy Pedroni <epedroni@pm.me> | 2025-07-17 19:08:48 +0200 |
commit | 34b936cff84ee1fd38941ce807e78a88fa081c92 (patch) | |
tree | 5ca7039275f0b67d499b6a3053f6bd275694179d /web-project/src | |
parent | 2296c0b696123c34ff8c2f5b1cd528bfcb65ff41 (diff) |
Small improvements in web GUI
Diffstat (limited to 'web-project/src')
-rw-r--r-- | web-project/src/solo_tool_web.py | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/web-project/src/solo_tool_web.py b/web-project/src/solo_tool_web.py index ea3de5b..3665c25 100644 --- a/web-project/src/solo_tool_web.py +++ b/web-project/src/solo_tool_web.py @@ -3,8 +3,8 @@ from os import getenv from os.path import basename, splitext from functools import partial from nicegui import ui, events -from starlette.formparsers import MultiPartParser import click +from fastapi import HTTPException from solo_tool import SoloTool from solo_tool.session_manager import SessionManager @@ -29,20 +29,17 @@ def songList(st: SoloTool, songDrawer) -> None: sessions = {} sessionManager = None -@ui.page('/{sessionName}') -def sessionPage(sessionName: str): - if sessionName not in sessions: - return +@ui.page('/{sessionId}') +def sessionPage(sessionId: str): + if sessionId not in sessions: + raise HTTPException(status_code=404, detail=f"No session with ID {sessionId}") fullscreen = ui.fullscreen() ui.dark_mode().enable() ui.colors(secondary='#ffc107') - ui.page_title(sessionName) + ui.page_title(sessionId) - # Improved performance with large file uploads - MultiPartParser.max_file_size = 1024 * 1024 * 100 # 100 MB - - st = sessions[sessionName] + st = sessions[sessionId] # Manage songs dialog with ui.dialog() as manageSongsDialog: @@ -55,7 +52,7 @@ def sessionPage(sessionName: str): 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') with ui.row().classes('items-center justify-start'): ui.button(icon='home', on_click=lambda: ui.navigate.to("/")).props('flat dense round color=white') - def save(): sessionManager.saveSession(st, sessionName) + def save(): sessionManager.saveSession(st, sessionId) ui.button(icon='save', on_click=save).props('flat dense round color=white') ui.button(icon='fullscreen', on_click=fullscreen.toggle).props('flat dense round color=white') @@ -109,8 +106,8 @@ def landingPage(): with ui.header().classes('items-center'): ui.label("Choose a session").classes('text-lg') - for name, soloTool in sessions.items(): - ui.button(name, on_click=partial(ui.navigate.to, f"/{name}")) + for id, soloTool in sessions.items(): + ui.button(id, on_click=partial(ui.navigate.to, f"/{id}")) def start(port, refresh, reload, session_path): global sessionManager @@ -122,7 +119,6 @@ def start(port, refresh, reload, session_path): songTool.registerSongSelectionCallback(lambda new: keyPointList.refresh()) songTool.registerSongListCallback(lambda new: songList.refresh()) sessions[fileName(key)] = songTool - try: ui.run(reload=reload, binding_refresh_interval=refresh, port=port) except KeyboardInterrupt: |