db: Give playlists a next_track() function
For picking the next track (with or without random enabled) Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
8a4590f0ed
commit
7a46ffdf47
|
@ -1,4 +1,5 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import random
|
||||
from gi.repository import GObject
|
||||
from . import sql
|
||||
from . import state
|
||||
|
@ -65,6 +66,14 @@ class Playlist(GObject.GObject):
|
|||
def remove_track(self, track):
|
||||
self.emit("track-removed", track)
|
||||
|
||||
def next_track(self):
|
||||
n = self.get_n_tracks()
|
||||
if self.random and n > 0:
|
||||
self.current += random.randint(1, int((3*n)/4))
|
||||
else:
|
||||
self.current += 1
|
||||
return self.get_current_track()
|
||||
|
||||
def refresh(self):
|
||||
self.emit("refreshed")
|
||||
|
||||
|
@ -82,11 +91,12 @@ class Playlist(GObject.GObject):
|
|||
|
||||
@current.setter
|
||||
def current(self, newval):
|
||||
if newval >= self.get_n_tracks():
|
||||
if self.get_n_tracks() == 0: newval = -1
|
||||
elif self.random: newval = newval % self.get_n_tracks()
|
||||
n_tracks = self.get_n_tracks()
|
||||
if newval >= n_tracks:
|
||||
if n_tracks == 0: newval = -1
|
||||
elif self.random: newval = newval % n_tracks
|
||||
elif self.loop: newval = 0
|
||||
else: newval = -1
|
||||
else: newval = n_tracks
|
||||
self._plstate.set_property("current", newval)
|
||||
|
||||
@GObject.Property(type=bool,default=False)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import db
|
||||
import random
|
||||
import unittest
|
||||
from gi.repository import GObject
|
||||
from . import playlist
|
||||
|
@ -58,7 +59,11 @@ class TestPlaylist(unittest.TestCase):
|
|||
self.assertEqual(plist.get_current_track(), plist.get_track(1))
|
||||
|
||||
plist.set_property("current", 2)
|
||||
self.assertEqual(plist.get_property("current"), -1)
|
||||
self.assertEqual(plist.get_property("current"), 2)
|
||||
self.assertIsNone(plist.get_current_track())
|
||||
|
||||
plist.set_property("current", 3)
|
||||
self.assertEqual(plist.get_property("current"), 2)
|
||||
self.assertIsNone(plist.get_current_track())
|
||||
|
||||
def test_loop(self):
|
||||
|
@ -127,6 +132,34 @@ class TestPlaylist(unittest.TestCase):
|
|||
plist.set_property("sort", [ "tracks.number ASC" ])
|
||||
self.assertEqual(plist.get_property("current"), 1)
|
||||
|
||||
def test_next_track(self):
|
||||
plist = db.user.Table.find("Test Playlist")
|
||||
self.assertIsNone(plist.next_track())
|
||||
self.assertEqual(plist.get_property("current"), -1)
|
||||
|
||||
plist.add_track(db.make_fake_track(1, 1, "Track 1", "/a/b/c/1.ogg"))
|
||||
plist.add_track(db.make_fake_track(2, 2, "Track 2", "/a/b/c/2.ogg"))
|
||||
self.assertEqual(plist.next_track(), plist.get_track(0))
|
||||
self.assertEqual(plist.next_track(), plist.get_track(1))
|
||||
self.assertIsNone(plist.next_track())
|
||||
self.assertIsNone(plist.next_track())
|
||||
|
||||
def test_random_next_track(self):
|
||||
plist = db.user.Table.find("Test Playlist")
|
||||
plist.random = True
|
||||
self.assertIsNone(plist.next_track())
|
||||
self.assertEqual(plist.get_property("current"), -1)
|
||||
|
||||
plist.add_track(db.make_fake_track(1, 1, "Track 1", "/a/b/c/1.ogg"))
|
||||
plist.add_track(db.make_fake_track(2, 2, "Track 2", "/a/b/c/2.ogg"))
|
||||
plist.add_track(db.make_fake_track(3, 3, "Track 3", "/a/b/c/3.ogg"))
|
||||
|
||||
random.seed(20210318)
|
||||
self.assertEqual(plist.next_track(), plist.get_track(1))
|
||||
self.assertEqual(plist.next_track(), plist.get_track(2))
|
||||
self.assertEqual(plist.next_track(), plist.get_track(0))
|
||||
self.assertEqual(plist.next_track(), plist.get_track(2))
|
||||
|
||||
|
||||
class TestMappedPlaylist(unittest.TestCase):
|
||||
def test_init(self):
|
||||
|
|
Loading…
Reference in New Issue