db: Preserve the current track when adding tracks
We have to be careful not to check track positions against playlists where current == -1, because this could drastically slow down adding new tracks because SQLite would need to find the position for every track Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
e94a737718
commit
2f747ccaa6
|
@ -57,6 +57,9 @@ class Playlist(GObject.GObject):
|
|||
f"WHERE trackid=?", [ track.rowid ])
|
||||
return cur.fetchone()[1] - 1
|
||||
|
||||
def track_adjusts_current(self, track):
|
||||
return self.current > -1 and self.get_track_index(track) <= self.current
|
||||
|
||||
def add_track(self, track):
|
||||
self.emit("track-added", track)
|
||||
|
||||
|
@ -132,7 +135,9 @@ class Playlist(GObject.GObject):
|
|||
def refreshed(self): pass
|
||||
|
||||
@GObject.Signal(arg_types=(GObject.TYPE_PYOBJECT,))
|
||||
def track_added(self, track): pass
|
||||
def track_added(self, track):
|
||||
if self.track_adjusts_current(track):
|
||||
self.current += 1
|
||||
|
||||
@GObject.Signal(arg_types=(GObject.TYPE_PYOBJECT,))
|
||||
def track_removed(self, track): pass
|
||||
|
|
|
@ -40,6 +40,32 @@ class TestPlaylist(unittest.TestCase):
|
|||
with self.assertRaises(NotImplementedError):
|
||||
plist.delete()
|
||||
|
||||
def test_add_track(self):
|
||||
plist = db.user.Table.find("Test Playlist")
|
||||
track1 = db.make_fake_track(1, 1, "Track 1", "/a/b/c/1.ogg")
|
||||
track2 = db.make_fake_track(2, 2, "Track 2", "/a/b/c/2.ogg")
|
||||
track3 = db.make_fake_track(3, 3, "Track 3", "/a/b/c/3.ogg")
|
||||
plist.sort = [ "tracks.number ASC" ]
|
||||
|
||||
plist.add_track(track2)
|
||||
self.assertEqual(plist.get_track(0), track2)
|
||||
self.assertEqual(plist.current, -1)
|
||||
self.assertFalse(plist.track_adjusts_current(track2))
|
||||
|
||||
plist.current = 0
|
||||
self.assertTrue(plist.track_adjusts_current(track2))
|
||||
|
||||
plist.add_track(track1)
|
||||
self.assertEqual(plist.get_track(0), track1)
|
||||
self.assertEqual(plist.get_track(1), track2)
|
||||
self.assertEqual(plist.current, 1)
|
||||
|
||||
plist.add_track(track3)
|
||||
self.assertEqual(plist.get_track(0), track1)
|
||||
self.assertEqual(plist.get_track(1), track2)
|
||||
self.assertEqual(plist.get_track(2), track3)
|
||||
self.assertEqual(plist.current, 1)
|
||||
|
||||
def test_current(self):
|
||||
plist = db.user.Table.find("Test Playlist")
|
||||
self.assertEqual(plist.get_property("current"), -1)
|
||||
|
|
Loading…
Reference in New Issue