diff options
| author | Eddy Pedroni <epedroni@pm.me> | 2026-05-27 23:20:48 +0200 |
|---|---|---|
| committer | Eddy Pedroni <epedroni@pm.me> | 2026-05-27 23:20:48 +0200 |
| commit | efc7607faa3e273cc23c72471a1bcf75b837d911 (patch) | |
| tree | c46f6e27ee290f990dc277c498b1e01be746d0d6 | |
| parent | a3fd51d581dfe40951bbb7801fe6764b2fa21c1e (diff) | |
| -rw-r--r-- | solo-tool-project/src/solo_tool/session_manager.py | 3 | ||||
| -rw-r--r-- | solo-tool-project/src/solo_tool/storage.py | 14 | ||||
| -rw-r--r-- | web-project/src/solo_tool_web.py | 15 |
3 files changed, 28 insertions, 4 deletions
diff --git a/solo-tool-project/src/solo_tool/session_manager.py b/solo-tool-project/src/solo_tool/session_manager.py index 7d98106..96b100a 100644 --- a/solo-tool-project/src/solo_tool/session_manager.py +++ b/solo-tool-project/src/solo_tool/session_manager.py @@ -19,6 +19,9 @@ class SessionManager(): def getSessions(self) -> list[str]: return self._backend.listSessions() + def getSongs(self) -> list[str]: + return self._backend.listSongs() + def loadSession(self, id: str, player=None) -> SoloTool: session = self._backend.readSession(id) diff --git a/solo-tool-project/src/solo_tool/storage.py b/solo-tool-project/src/solo_tool/storage.py index 0c5577f..d07ba25 100644 --- a/solo-tool-project/src/solo_tool/storage.py +++ b/solo-tool-project/src/solo_tool/storage.py @@ -24,12 +24,15 @@ class StorageBackend(Protocol): def writeRecording(self, recording: Path, destination: str) -> None: raise NotImplementedError + @abstractmethod + def listSongs(self) -> list[str]: + raise NotImplementedError + class FileSystemStorageBackend(StorageBackend): def __init__(self, storagePath: str): self._storagePath = Path(storagePath) def listSessions(self) -> list[str]: - #return [Path(f).stem for f in glob(f"{self._storagePath / "sessions"}/*.json")] return [Path(f).stem for f in glob(str(self._storagePath / "sessions" / "*.json"))] def readSession(self, id: str) -> dict: @@ -44,12 +47,16 @@ class FileSystemStorageBackend(StorageBackend): def writeRecording(self, recording: Path, destination: str) -> None: pass + def listSongs(self) -> list[str]: + return [str(Path(f).absolute()) for f in glob(str(self._storagePath / "songs" / "*"))] + class FileBrowserStorageBackend(StorageBackend): def __init__(self, serverUrl: str): self._baseUrl = serverUrl self._username = getenv("ST_USER") self._password = getenv("ST_PASS") self._apiKey = self._getApiKey() + self._publicUrl = "https://files.0xf7.com/api/public/dl/NR1j-os8/solo-tool" def listSessions(self) -> list[str]: url = f"{self._baseUrl}/api/resources/sessions" @@ -70,6 +77,11 @@ class FileBrowserStorageBackend(StorageBackend): with open(recording, "rb") as file: self._request("POST", url, {"Content-Type" : "audio/mpeg"}, data=file) + def listSongs(self) -> list[str]: + url = f"{self._baseUrl}/api/resources/songs" + response = self._request("GET", url) + return [f"{self._publicUrl}{item["path"]}" for item in response.json()["items"]] + def _getApiKey(self) -> str: response = requests.post(f"{self._baseUrl}/api/login", json={"username":self._username, "password":self._password}) return response.content diff --git a/web-project/src/solo_tool_web.py b/web-project/src/solo_tool_web.py index 25beb6f..98cb9df 100644 --- a/web-project/src/solo_tool_web.py +++ b/web-project/src/solo_tool_web.py @@ -69,8 +69,17 @@ def sessionPage(sessionId: str): ui.keyboard(on_key=makeKeyboardHandler(st)) # Manage songs dialog - with ui.dialog() as manageSongsDialog: - ui.label("Under construction") + with ui.dialog() as manageSongsDialog, ui.card(): + with ui.list().props('bordered separator'): + for song in sessionManager.getSongs(): + def addSong(s): + st.addSong(s) + manageSongsDialog.close() + with ui.item(on_click=partial(addSong, song)): + with ui.item_section().props('avatar'): + ui.icon('music_note') + with ui.item_section(): + ui.item_label(basename(song)) # Header with ui.header().classes('items-center justify-between'): @@ -166,5 +175,5 @@ def main(port, refresh, reload, session_path, buffer_size, sampling_rate): # Hardcoded dev settings if __name__ in {"__main__", "__mp_main__"}: - start(8080, 0.5, False, "https://files.0xf7.com", 1024, 48000) + start(8080, 0.5, True, "https://files.0xf7.com", 1024, 48000) #start(8080, 0.5, True, "/home/eddy/music", 1024, 48000) |
