db: Give QueuedTracks a custom next_track() function

So we can remove tracks from the queue as they are played.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-11-17 12:01:23 -05:00
parent 2e57e1fe0a
commit cc88dcab0a
2 changed files with 26 additions and 2 deletions

View File

@ -248,8 +248,8 @@ class TestQueuedTracks(unittest.TestCase):
def test_init(self):
queued = db.user.Table.find("Queued Tracks")
self.assertIsInstance(queued, db.playlist.MappedPlaylist)
self.assertIsInstance(queued, db.user.UserPlaylist)
self.assertIsInstance(queued, db.user.QueuedTracks)
self.assertEqual(queued.name, "Queued Tracks")
self.assertEqual(queued.icon_name, "edit-redo")
self.assertEqual(queued.map_table, "playlist_map")
@ -278,6 +278,20 @@ class TestQueuedTracks(unittest.TestCase):
self.assertEqual(queued.get_tracks(), [ ])
self.assertEqual(self.removed, (track, False))
def test_next_track(self):
queued = db.user.Table.find("Queued Tracks")
queued.add_track(db.make_fake_track(1, 1, "Test 1", "/a/b/c/1.ogg"))
queued.add_track(db.make_fake_track(2, 2, "Test 2", "/a/b/c/2.ogg"))
queued.add_track(db.make_fake_track(3, 3, "Test 3", "/a/b/c/3.ogg"))
self.assertEqual(queued.next_track(), db.track.Table.lookup("/a/b/c/1.ogg"))
self.assertEqual(queued.get_n_tracks(), 2)
self.assertEqual(queued.next_track(), db.track.Table.lookup("/a/b/c/2.ogg"))
self.assertEqual(queued.get_n_tracks(), 1)
self.assertEqual(queued.next_track(), db.track.Table.lookup("/a/b/c/3.ogg"))
self.assertEqual(queued.get_n_tracks(), 0)
self.assertIsNone(queued.next_track())
class TestUserPlaylist(unittest.TestCase):
def track_added(self, plist, added):

View File

@ -99,6 +99,16 @@ class Previous(UserPlaylist):
return super().next_track()
class QueuedTracks(UserPlaylist):
def __init__(self, row):
UserPlaylist.__init__(self, row, "edit-redo", "playlist_map")
def next_track(self):
if track := super().next_track():
self.remove_track(track)
return track
class UserTable(playlist.Model):
def __init__(self):
playlist.Model.__init__(self, "playlists", "sort")
@ -145,7 +155,7 @@ class UserTable(playlist.Model):
elif row["name"] == "Previous":
return Previous(row)
elif row["name"] == "Queued Tracks":
return UserPlaylist(row, "edit-redo", "playlist_map")
return QueuedTracks(row)
return UserPlaylist(row, "audio-x-generic", "playlist_map")
def do_insert(self, plstate, name):