aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEddy Pedroni <epedroni@pm.me>2025-02-22 10:44:50 +0100
committerEddy Pedroni <epedroni@pm.me>2025-02-22 10:44:50 +0100
commit336ee67aa4b6c467d3d936124db16ce7dcd5a3b3 (patch)
treea12ba3843e3263904c5c94a7d8d369589e1594af
parentc990b0231c425743622368399aaf3b3b7231c481 (diff)
Simplify session management
-rw-r--r--solo-tool-project/src/solo_tool/session_manager.py67
-rw-r--r--solo-tool-project/src/solo_tool/solo_tool.py9
-rw-r--r--solo-tool-project/test/session_manager_unittest.py71
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))