From 182a14f4b9aec4722f7f94ab44bf57356c6d71aa Mon Sep 17 00:00:00 2001 From: Eddy Pedroni Date: Tue, 21 Dec 2021 08:16:55 +0100 Subject: Added AB controller with some tests, minor refactor to playlist --- abcontroller.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 abcontroller.py (limited to 'abcontroller.py') diff --git a/abcontroller.py b/abcontroller.py new file mode 100644 index 0000000..8c14c0c --- /dev/null +++ b/abcontroller.py @@ -0,0 +1,38 @@ +from collections import namedtuple + +_AB = namedtuple("_AB", ["a", "b"]) + +class ABController: + def __init__(self): + self.setPositionCallback = None + self._limits = dict() # dictionary of all songs + self._songLimits = None # list of limits for selected song + self._currentLimits = None # a/b positions of selected limit + + def setCurrentSong(self, path): + if path not in self._limits: + self._limits[path] = list() + + self._songLimits = self._limits[path] + self._currentLimits = None + + def addLimits(self, aLimit, bLimit): + if self._songLimits is None: + return + + ab = _AB(aLimit, bLimit) + self._songLimits.append(ab) + + def setCurrentLimits(self, index): + if not self._songLimits: + return + + if index >= 0 and index < len(self._songLimits): + self._currentLimits = self._songLimits[index] + + def positionChanged(self, position): + if not self._currentLimits: + return + + if position > self._currentLimits.b and self.setPositionCallback: + self.setPositionCallback(self._currentLimits.a) -- cgit v1.2.3