diff options
author | Eddy Pedroni <epedroni@pm.me> | 2025-02-22 11:26:27 +0100 |
---|---|---|
committer | Eddy Pedroni <epedroni@pm.me> | 2025-02-22 11:26:27 +0100 |
commit | e6f712c656365241434a71983024ac2a6e829cc8 (patch) | |
tree | 5bc9ac292834067aa3c1640165d050ff61aed399 | |
parent | 336ee67aa4b6c467d3d936124db16ce7dcd5a3b3 (diff) |
Removed playlist class, simplified a bunch of stuff
-rw-r--r-- | solo-tool-project/src/solo_tool/playlist.py | 26 | ||||
-rw-r--r-- | solo-tool-project/src/solo_tool/session_manager.py | 11 | ||||
-rw-r--r-- | solo-tool-project/src/solo_tool/solo_tool.py | 33 | ||||
-rw-r--r-- | solo-tool-project/test/playlist_unittest.py | 103 | ||||
-rw-r--r-- | solo-tool-project/test/session_manager_unittest.py | 28 |
5 files changed, 27 insertions, 174 deletions
diff --git a/solo-tool-project/src/solo_tool/playlist.py b/solo-tool-project/src/solo_tool/playlist.py deleted file mode 100644 index 988cc04..0000000 --- a/solo-tool-project/src/solo_tool/playlist.py +++ /dev/null @@ -1,26 +0,0 @@ -class Playlist: - def __init__(self, callback): - self._songList = list() - self._currentSong = None - self._setSongCallback = callback - - def addSong(self, path): - self._songList.append(path) - - def setCurrentSong(self, index): - if index >= 0 and index < len(self._songList): - self._currentSong = index - self._setSongCallback(self._songList[index]) - - def getCurrentSong(self): - index = self._currentSong - return self._songList[index] if index is not None else None - - def getCurrentSongIndex(self): - return self._currentSong - - def getSongs(self): - return self._songList - - def clear(self): - self.__init__(self._setSongCallback) diff --git a/solo-tool-project/src/solo_tool/session_manager.py b/solo-tool-project/src/solo_tool/session_manager.py index 0896b22..a4dabc0 100644 --- a/solo-tool-project/src/solo_tool/session_manager.py +++ b/solo-tool-project/src/solo_tool/session_manager.py @@ -1,26 +1,25 @@ import json -def loadSession(file, playlist, abController): +def loadSession(file, songList, abController): jsonStr = file.read() session = json.loads(jsonStr) - playlist.clear() + songList.clear() abController.clear() for entry in session: songPath = entry["path"] abLimits = entry["ab_limits"] - playlist.addSong(songPath) + songList.append(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() +def saveSession(file, songList, abController): session = list() - for s in songs: + for s in songList: entry = { "path": s, "ab_limits" : abController.getStoredLimits(s) diff --git a/solo-tool-project/src/solo_tool/solo_tool.py b/solo-tool-project/src/solo_tool/solo_tool.py index 743c8d5..a4c7af8 100644 --- a/solo-tool-project/src/solo_tool/solo_tool.py +++ b/solo-tool-project/src/solo_tool/solo_tool.py @@ -1,6 +1,5 @@ import os -from .playlist import Playlist from .abcontroller import ABController from .session_manager import loadSession, saveSession from .notifier import Notifier @@ -9,13 +8,17 @@ from .player_vlc import Player class SoloTool: def __init__(self, playerOverride=None): self._player = Player() if playerOverride is None else playerOverride - self._playlist = Playlist(self._playlistCallback) self._abController = ABController(enabled=False, callback=self._abControllerCallback) self._notifier = Notifier(self._player) + self._songList = [] + self._song = None - def _playlistCallback(self, path): + def _updateSong(self, index): + self._song = index + path = self._songList[index] self._player.setCurrentSong(path) self._abController.setCurrentSong(path) + self._notifier.notify(Notifier.CURRENT_SONG_EVENT, index) def _abControllerCallback(self, position): self._player.setPlaybackPosition(position) @@ -26,23 +29,20 @@ class SoloTool: @property def songList(self) -> list[str]: - return self._playlist.getSongs() + return self._songList def addSong(self, path: str) -> None: if os.path.isfile(path): - self._playlist.addSong(path) + self._songList.append(path) @property def song(self) -> int: - return self._playlist.getCurrentSongIndex() + return self._song @song.setter - def song(self, index: int) -> None: - previous = self._playlist.getCurrentSongIndex() - self._playlist.setCurrentSong(index) - new = self._playlist.getCurrentSongIndex() - if previous != new: - self._notifier.notify(Notifier.CURRENT_SONG_EVENT, new) + def song(self, new: int) -> None: + if new >= 0 and new < len(self._songList) and new != self._song: + self._updateSong(new) def storeAbLimits(self, aLimit, bLimit): self._abController.storeLimits(aLimit, bLimit) @@ -58,9 +58,8 @@ class SoloTool: self._abController.setLimits(aLimit, bLimit) def getStoredAbLimits(self): - currentSong = self._playlist.getCurrentSong() - if currentSong is not None: - return self._abController.getStoredLimits(currentSong) + if self._song is not None: + return self._abController.getStoredLimits(self.songList[self._song]) else: return list() @@ -95,11 +94,11 @@ class SoloTool: def loadSession(self, path): with open(path, "r") as f: - loadSession(f, self._playlist, self._abController) + loadSession(f, self._songList, self._abController) def saveSession(self, path): with open(path, "w") as f: - saveSession(f, self._playlist, self._abController) + saveSession(f, self._songList, self._abController) def play(self): self._player.play() diff --git a/solo-tool-project/test/playlist_unittest.py b/solo-tool-project/test/playlist_unittest.py deleted file mode 100644 index 4b0186b..0000000 --- a/solo-tool-project/test/playlist_unittest.py +++ /dev/null @@ -1,103 +0,0 @@ -from solo_tool.playlist import Playlist - -def test_addAndSelectOneSong(): - songAddedByUser = "/path/to/song" - songSetByCallback = None - - def testCallback(song): - nonlocal songSetByCallback - songSetByCallback = song - - uut = Playlist(testCallback) - uut.addSong(songAddedByUser) - uut.setCurrentSong(0) - - assert songAddedByUser == songSetByCallback - assert uut.getCurrentSong() == songAddedByUser - assert uut.getCurrentSongIndex() == 0 - assert uut.getSongs() == [songAddedByUser] - -def test_addTwoSongsAndSelectBoth(): - songAddedByUser = ["/path/to/song", "/path/to/second/song"] - songSetByCallback = None - - def testCallback(song): - nonlocal songSetByCallback - songSetByCallback = song - - uut = Playlist(testCallback) - uut.addSong(songAddedByUser[0]) - uut.addSong(songAddedByUser[1]) - assert uut.getSongs() == songAddedByUser - - uut.setCurrentSong(0) - assert songAddedByUser[0] == songSetByCallback - assert uut.getCurrentSong() == songAddedByUser[0] - assert uut.getCurrentSongIndex() == 0 - - uut.setCurrentSong(1) - assert songAddedByUser[1] == songSetByCallback - assert uut.getCurrentSong() == songAddedByUser[1] - assert uut.getCurrentSongIndex() == 1 - -def test_firstAddedSongIsNotSelected(): - songAddedByUser = "/path/to/song" - songSetByCallback = None - - def testCallback(song): - nonlocal songSetByCallback - songSetByCallback = song - - uut = Playlist(testCallback) - uut.addSong(songAddedByUser) - - assert songSetByCallback == None - assert uut.getCurrentSong() == None - assert uut.getCurrentSongIndex() == None - assert uut.getSongs() == [songAddedByUser] - -def test_invalidSongSelection(): - songAddedByUser = "/path/to/song" - songSetByCallback = None - - def testCallback(song): - nonlocal songSetByCallback - songSetByCallback = song - - uut = Playlist(testCallback) - assert songSetByCallback == None - assert uut.getCurrentSong() == None - assert uut.getCurrentSongIndex() == None - - uut.setCurrentSong(10) - assert songSetByCallback == None - assert uut.getCurrentSong() == None - assert uut.getCurrentSongIndex() == None - - uut.addSong(songAddedByUser) - uut.setCurrentSong(10) - assert songSetByCallback == None - assert uut.getCurrentSong() == None - assert uut.getCurrentSongIndex() == None - assert uut.getSongs() == [songAddedByUser] - -def test_clearPlaylist(): - songAddedByUser = ["/path/to/song", "/path/to/second/song"] - - def dummy(index): - pass - - uut = Playlist(dummy) - for s in songAddedByUser: - uut.addSong(s) - uut.setCurrentSong(0) - - assert uut.getSongs() == songAddedByUser - assert uut.getCurrentSong() == songAddedByUser[0] - assert uut.getCurrentSongIndex() == 0 - - uut.clear() - - assert uut.getSongs() == [] - assert uut.getCurrentSong() == None - assert uut.getCurrentSongIndex() == None diff --git a/solo-tool-project/test/session_manager_unittest.py b/solo-tool-project/test/session_manager_unittest.py index d7c5e7f..d89b82a 100644 --- a/solo-tool-project/test/session_manager_unittest.py +++ b/solo-tool-project/test/session_manager_unittest.py @@ -23,21 +23,6 @@ testSession = [ } ] -class PlaylistMock: - def __init__(self): - self.lastAddedSong = None - self.songs = list() - - def addSong(self, s): - self.songs.append(s) - self.lastAddedSong = s - - def getSongs(self): - return self.songs - - def clear(self): - self.__init__() - class ABControllerMock: def __init__(self): self.limits = dict() @@ -68,7 +53,7 @@ class MockFile: @pytest.fixture def playlistMock(): - return PlaylistMock() + return [] @pytest.fixture def abControllerMock(): @@ -81,7 +66,7 @@ def test_loadSession(playlistMock, abControllerMock): for i, entry in enumerate(testSession): expectedSong = entry["path"] expectedLimits = entry["ab_limits"] - loadedSong = playlistMock.songs[i] + loadedSong = playlistMock[i] loadedLimits = abControllerMock.limits.get(expectedSong) assert loadedSong == expectedSong @@ -90,7 +75,7 @@ def test_loadSession(playlistMock, abControllerMock): def test_saveSession(playlistMock, abControllerMock): for i, entry in enumerate(testSession): song = entry["path"] - playlistMock.addSong(song) + playlistMock.append(song) abLimits = entry["ab_limits"] if abLimits is not None: @@ -111,9 +96,8 @@ def test_loadAndSaveEmptySession(playlistMock, abControllerMock): loadSession(sessionFile, playlistMock, abControllerMock) - songs = playlistMock.getSongs() - assert songs == list() - for s in songs: + assert playlistMock == list() + for s in playlistMock: assert abControllerMock.getStoredLimits(s) == None def test_loadSessionNotAdditive(playlistMock, abControllerMock): @@ -121,7 +105,7 @@ def test_loadSessionNotAdditive(playlistMock, abControllerMock): loadSession(sessionFile, playlistMock, abControllerMock) loadSession(sessionFile, playlistMock, abControllerMock) - songs = playlistMock.getSongs() + songs = playlistMock assert len(songs) == len(set(songs)) for s in songs: abLimits = abControllerMock.getStoredLimits(s) |