diff options
author | Eddy Pedroni <epedroni@pm.me> | 2025-02-22 10:44:50 +0100 |
---|---|---|
committer | Eddy Pedroni <epedroni@pm.me> | 2025-02-22 10:44:50 +0100 |
commit | 336ee67aa4b6c467d3d936124db16ce7dcd5a3b3 (patch) | |
tree | a12ba3843e3263904c5c94a7d8d369589e1594af | |
parent | c990b0231c425743622368399aaf3b3b7231c481 (diff) |
Simplify session management
-rw-r--r-- | solo-tool-project/src/solo_tool/session_manager.py | 67 | ||||
-rw-r--r-- | solo-tool-project/src/solo_tool/solo_tool.py | 9 | ||||
-rw-r--r-- | solo-tool-project/test/session_manager_unittest.py | 71 |
3 files changed, 51 insertions, 96 deletions
diff --git a/solo-tool-project/src/solo_tool/session_manager.py b/solo-tool-project/src/solo_tool/session_manager.py index 718e864..0896b22 100644 --- a/solo-tool-project/src/solo_tool/session_manager.py +++ b/solo-tool-project/src/solo_tool/session_manager.py @@ -1,41 +1,30 @@ import json -class SessionManager: - def __init__(self, playlist, abController): - self._playlist = playlist - self._abController = abController - - def addSong(self, path): - self._playlist.addSong(path) - - def storeLimits(self, aLimit, bLimit): - self._abController.storeLimits(aLimit, bLimit) - - def loadSession(self, file): - jsonStr = file.read() - session = json.loads(jsonStr) - - self._playlist.clear() - self._abController.clear() - - for entry in session: - songPath = entry["path"] - abLimits = entry["ab_limits"] - self._playlist.addSong(songPath) - - if abLimits is not None: - for l in abLimits: - self._abController.storeLimits(l[0], l[1], songPath) - - def saveSession(self, file): - songs = self._playlist.getSongs() - session = list() - - for s in songs: - entry = { - "path": s, - "ab_limits" : self._abController.getStoredLimits(s) - } - session.append(entry) - - file.write(json.dumps(session)) +def loadSession(file, playlist, abController): + jsonStr = file.read() + session = json.loads(jsonStr) + + playlist.clear() + abController.clear() + + for entry in session: + songPath = entry["path"] + abLimits = entry["ab_limits"] + playlist.addSong(songPath) + + if abLimits is not None: + for l in abLimits: + abController.storeLimits(l[0], l[1], songPath) + +def saveSession(file, playlist, abController): + songs = playlist.getSongs() + session = list() + + for s in songs: + entry = { + "path": s, + "ab_limits" : abController.getStoredLimits(s) + } + session.append(entry) + + file.write(json.dumps(session)) diff --git a/solo-tool-project/src/solo_tool/solo_tool.py b/solo-tool-project/src/solo_tool/solo_tool.py index 47e31ca..743c8d5 100644 --- a/solo-tool-project/src/solo_tool/solo_tool.py +++ b/solo-tool-project/src/solo_tool/solo_tool.py @@ -2,7 +2,7 @@ import os from .playlist import Playlist from .abcontroller import ABController -from .session_manager import SessionManager +from .session_manager import loadSession, saveSession from .notifier import Notifier from .player_vlc import Player @@ -11,7 +11,6 @@ class SoloTool: self._player = Player() if playerOverride is None else playerOverride self._playlist = Playlist(self._playlistCallback) self._abController = ABController(enabled=False, callback=self._abControllerCallback) - self._sessionManager = SessionManager(self._playlist, self._abController) self._notifier = Notifier(self._player) def _playlistCallback(self, path): @@ -31,7 +30,7 @@ class SoloTool: def addSong(self, path: str) -> None: if os.path.isfile(path): - self._sessionManager.addSong(path) + self._playlist.addSong(path) @property def song(self) -> int: @@ -96,11 +95,11 @@ class SoloTool: def loadSession(self, path): with open(path, "r") as f: - self._sessionManager.loadSession(f) + loadSession(f, self._playlist, self._abController) def saveSession(self, path): with open(path, "w") as f: - self._sessionManager.saveSession(f) + saveSession(f, self._playlist, self._abController) def play(self): self._player.play() diff --git a/solo-tool-project/test/session_manager_unittest.py b/solo-tool-project/test/session_manager_unittest.py index 5468880..d7c5e7f 100644 --- a/solo-tool-project/test/session_manager_unittest.py +++ b/solo-tool-project/test/session_manager_unittest.py @@ -1,6 +1,8 @@ -from solo_tool.session_manager import SessionManager +from solo_tool.session_manager import loadSession, saveSession from json import loads, dumps +import pytest + testSession = [ { "path" : "/path/to/another/song", @@ -64,40 +66,17 @@ class MockFile: def read(self): return self.contents +@pytest.fixture +def playlistMock(): + return PlaylistMock() -def test_addSongs(): - songs = [ - "/path/to/song", - "/path/to/another/song" - ] - - playlistMock = PlaylistMock() - uut = SessionManager(playlistMock, None) - - for s in songs: - uut.addSong(s) - assert playlistMock.lastAddedSong == s - -def test_addAbLimits(): - abLimits = [ - [0.1, 0.2], - [0.3, 0.4] - ] - - abControllerMock = ABControllerMock() - uut = SessionManager(None, abControllerMock) - - for i, ab in enumerate(abLimits): - uut.storeLimits(ab[0], ab[1]) - assert abControllerMock.limits["current"][i] == ab - -def test_loadSession(): - playlistMock = PlaylistMock() - abControllerMock = ABControllerMock() - uut = SessionManager(playlistMock, abControllerMock) +@pytest.fixture +def abControllerMock(): + return ABControllerMock() +def test_loadSession(playlistMock, abControllerMock): sessionFile = MockFile(dumps(testSession)) - uut.loadSession(sessionFile) + loadSession(sessionFile, playlistMock, abControllerMock) for i, entry in enumerate(testSession): expectedSong = entry["path"] @@ -108,11 +87,7 @@ def test_loadSession(): assert loadedSong == expectedSong assert loadedLimits == expectedLimits -def test_saveSession(): - playlistMock = PlaylistMock() - abControllerMock = ABControllerMock() - uut = SessionManager(playlistMock, abControllerMock) - +def test_saveSession(playlistMock, abControllerMock): for i, entry in enumerate(testSession): song = entry["path"] playlistMock.addSong(song) @@ -123,36 +98,28 @@ def test_saveSession(): abControllerMock.storeLimits(l[0], l[1], song) sessionFile = MockFile() - uut.saveSession(sessionFile) + saveSession(sessionFile, playlistMock, abControllerMock) savedSession = loads(sessionFile.read()) assert savedSession == testSession -def test_loadAndSaveEmptySession(): - playlistMock = PlaylistMock() - abControllerMock = ABControllerMock() - uut = SessionManager(playlistMock, abControllerMock) - +def test_loadAndSaveEmptySession(playlistMock, abControllerMock): sessionFile = MockFile() - uut.saveSession(sessionFile) + saveSession(sessionFile, playlistMock, abControllerMock) assert loads(sessionFile.read()) == list() - uut.loadSession(sessionFile) + loadSession(sessionFile, playlistMock, abControllerMock) songs = playlistMock.getSongs() assert songs == list() for s in songs: assert abControllerMock.getStoredLimits(s) == None -def test_loadSessionNotAdditive(): - playlistMock = PlaylistMock() - abControllerMock = ABControllerMock() - uut = SessionManager(playlistMock, abControllerMock) - +def test_loadSessionNotAdditive(playlistMock, abControllerMock): sessionFile = MockFile(dumps(testSession)) - uut.loadSession(sessionFile) - uut.loadSession(sessionFile) + loadSession(sessionFile, playlistMock, abControllerMock) + loadSession(sessionFile, playlistMock, abControllerMock) songs = playlistMock.getSongs() assert len(songs) == len(set(songs)) |