db: Give the Previous playlist special next and previous functions

previous_track() moves deeper into the previous tracks list while
next_track() moves us closer to the start. I also make sure we reset
current track when new tracks are added to the playlist.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-11-13 17:33:13 -05:00
parent 7a46ffdf47
commit 050a930376
2 changed files with 44 additions and 4 deletions

View File

@ -204,6 +204,38 @@ class TestPrevious(unittest.TestCase):
self.assertEqual(previous.get_track_index(track2), 0)
self.assertEqual(self.removed, track1)
def test_previous_track(self):
previous = db.user.Table.find("Previous")
self.assertEqual(previous.get_property("current"), -1)
previous.add_track(db.make_fake_track(1, 1, "Track 1", "/a/b/c/1.ogg"))
self.assertEqual(previous.get_property("current"), 0)
previous.add_track(db.make_fake_track(2, 2, "Track 2", "/a/b/c/2.ogg"))
self.assertEqual(previous.get_property("current"), 0)
previous.add_track(db.make_fake_track(3, 3, "Track 3", "/a/b/c/3.ogg"))
self.assertEqual(previous.get_property("current"), 0)
self.assertEqual(previous.previous_track(), previous.get_track(1))
self.assertEqual(previous.previous_track(), previous.get_track(2))
self.assertIsNone(previous.previous_track())
self.assertIsNone(previous.previous_track())
def test_next_track(self):
previous = db.user.Table.find("Previous")
previous.add_track(db.make_fake_track(1, 1, "Track 1", "/a/b/c/1.ogg"))
previous.add_track(db.make_fake_track(2, 2, "Track 2", "/a/b/c/2.ogg"))
previous.add_track(db.make_fake_track(3, 3, "Track 3", "/a/b/c/3.ogg"))
previous.current = 2
self.assertEqual(previous.next_track(), previous.get_track(1))
self.assertEqual(previous.current, 1)
self.assertEqual(previous.next_track(), previous.get_track(0))
self.assertEqual(previous.current, 0)
self.assertIsNone(previous.next_track())
self.assertEqual(previous.current, -1)
self.assertIsNone(previous.next_track())
self.assertEqual(previous.current, -1)
class TestQueuedTracks(unittest.TestCase):
def track_added(self, plist, added):

View File

@ -88,10 +88,18 @@ class Previous(UserPlaylist):
UserPlaylist.__init__(self, row, "edit-undo", "temp_playlist_map")
def add_track(self, track):
if super().add_track(track):
return True
self.remove_track(track)
return super().add_track(track)
if self.get_track_index(track):
self.remove_track(track)
super().add_track(track)
self.current = 0
return True
def next_track(self):
self.current = max(-1, self.current - 1)
return self.get_current_track()
def previous_track(self):
return super().next_track()
class UserTable(playlist.Model):