aboutsummaryrefslogtreecommitdiffstats
path: root/web-project/src
diff options
context:
space:
mode:
authorEddy Pedroni <epedroni@pm.me>2025-07-17 18:58:37 +0200
committerEddy Pedroni <epedroni@pm.me>2025-07-17 19:08:48 +0200
commit34b936cff84ee1fd38941ce807e78a88fa081c92 (patch)
tree5ca7039275f0b67d499b6a3053f6bd275694179d /web-project/src
parent2296c0b696123c34ff8c2f5b1cd528bfcb65ff41 (diff)
Small improvements in web GUI
Diffstat (limited to 'web-project/src')
-rw-r--r--web-project/src/solo_tool_web.py24
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: