curds: Add a function for moving tracks in a playlist

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-05-24 10:51:58 -04:00
parent 214ffab2b7
commit 8acd119630
2 changed files with 66 additions and 0 deletions

View File

@ -76,6 +76,24 @@ class Playlist(node.PlaylistNode):
return i
return None
def move(self, track, new):
old = self.index(track)
if old == None:
return
self.list.remove(track)
self.list.insert(new, track)
self.sort_order.clear()
if old == self.current:
self.current = new
elif new < old and new <= self.current:
self.current += 1
elif new > old and new == self.current:
self.current += 1
elif new > old and new > self.current:
self.current -= 1
def next(self):
max = len(self) - 1
if max == -1:

View File

@ -131,6 +131,54 @@ class TestPlaylist(unittest.TestCase):
self.assertIsNone(self.plist.index(track))
self.assertIsNone(self.plist.index(None))
def test_playlist_move_up(self):
tracks = self.add_tracks(range(1, 11))
self.plist.current = 5
self.plist.sort("tracknumber")
self.plist.move(tracks[8], 6)
self.assertEqual(self.plist.current, 5)
self.assertEqual(self.plist.list[6], tracks[8])
self.assertEqual(self.plist.sort_order, [ ])
self.plist.move(tracks[8], 5)
self.assertEqual(self.plist.current, 6)
self.assertEqual(self.plist.list[5], tracks[8])
self.plist.move(tracks[9], 0)
self.assertEqual(self.plist.current, 7)
self.assertEqual(self.plist.list[0], tracks[9])
def test_playlist_move_down(self):
tracks = self.add_tracks(range(1, 11))
self.plist.current = 5
self.plist.move(tracks[1], 4)
self.assertEqual(self.plist.current, 5)
self.assertEqual(self.plist.list[4], tracks[1])
self.plist.move(tracks[1], 5)
self.assertEqual(self.plist.current, 6)
self.assertEqual(self.plist.list[5], tracks[1])
self.plist.move(tracks[0], 9)
self.assertEqual(self.plist.current, 5)
self.assertEqual(self.plist.list[9], tracks[0])
self.plist.move(42, 0)
def test_playlist_move_current(self):
tracks = self.add_tracks(range(1, 11))
self.plist.current = 5
self.plist.move(tracks[5], 8)
self.assertEqual(self.plist.current, 8)
self.assertEqual(self.plist.list[8], tracks[5])
self.plist.move(tracks[5], 0)
self.assertEqual(self.plist.current, 0)
self.assertEqual(self.plist.list[0], tracks[5])
def test_playlist_next_empty_one(self):
self.assertIsNone(self.plist.next())
self.assertEqual(self.plist.current, -1)