curds: Move playlist.peek() out of the Root node

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-12-16 08:37:37 -05:00
parent 1943a7bb08
commit d25a026282
5 changed files with 48 additions and 50 deletions

View File

@ -5,6 +5,7 @@ from . import root
from .. import data
from .. import notify
from .. import trak
import random
import threading
Library = library.LibraryPlaylist
@ -35,6 +36,20 @@ def next():
Root.lookup("Previous").add(Track)
return Track
def peek(n):
res = [ ]
with Lock:
state = random.getstate()
for pl in Root.current:
tracks = pl.peek(n)
res += tracks
if (n := n - len(tracks)) == 0:
break
random.setstate(state)
return res
def previous():
global Track
with Lock:

View File

@ -8,10 +8,7 @@ from . import node
from . import prev
from . import up_next
from . import user
from .. import notify
from .. import sort
from .. import trak
import random
class PlaylistRoot(node.PlaylistNode):
@ -45,21 +42,6 @@ class PlaylistRoot(node.PlaylistNode):
return node
return None
def peek(self, n):
with self.node_lock:
state = random.getstate()
res = [ ]
for pl in self.current:
tracks = pl.peek(n)
res += tracks
n -= len(tracks)
if n == 0:
break
random.setstate(state)
return res
def reset(self):
with self.node_lock:
for plist in self.children:

View File

@ -105,31 +105,6 @@ class TestPlaylistRoot(unittest.TestCase):
self.assertEqual(self.playman.icon, "test")
self.assertEqual(self.playman.current, [ 1, 2, 3 ])
def test_root_peek(self):
self.assertEqual(self.playman.peek(3), [ ])
clist = self.playman.lookup("Collection")
plist = self.playman.lookup("Libraries").lookup(test_library)
library.join()
random.seed(1)
clist.set_random(False)
tracks = self.playman.peek(0)
self.assertEqual(tracks, [ ])
self.assertEqual(clist.current, -1)
tracks = self.playman.peek(5)
self.assertEqual(tracks, [ clist[0], clist[1], clist[2], clist[3], clist[4] ])
self.assertEqual(clist.current, -1)
clist.set_random(True)
tracks = self.playman.peek(5)
self.assertEqual(len(tracks), 5)
self.assertEqual(clist.current, -1)
#for i in range(5):
# self.assertEqual(self.playman.next(), tracks[i])
def test_root_select_playlist(self):
clist = self.playman.lookup("Collection")
plist = self.playman.lookup("Libraries").lookup(test_library)
@ -156,12 +131,12 @@ class TestPlaylistRoot(unittest.TestCase):
self.assertEqual(self.cb_change, [ ])
plist.current = 1247
peek = self.playman.peek(4)
self.assertEqual(len(peek), 4)
self.assertEqual(peek[0], plist[-2])
self.assertEqual(peek[1], plist[-1])
self.assertEqual(peek[2], glist[ 0])
self.assertEqual(peek[3], glist[ 1])
#peek = self.playman.peek(4)
#self.assertEqual(len(peek), 4)
#self.assertEqual(peek[0], plist[-2])
#self.assertEqual(peek[1], plist[-1])
#self.assertEqual(peek[2], glist[ 0])
#self.assertEqual(peek[3], glist[ 1])
#self.cb_change = [ ]
#self.assertEqual(self.playman.next(), plist[-2])

View File

@ -4,6 +4,7 @@ from . import notify
from . import playlist
from . import trak
import os
import random
import unittest
test_album = os.path.abspath("./trier/Test Album")
@ -91,6 +92,31 @@ class TestPlaylist(unittest.TestCase):
self.assertEqual(len(prev), 0)
self.assertIsNone(playlist.Track)
def test_peek(self):
self.assertEqual(playlist.peek(3), [ ])
clist = playlist.lookup("Collection")
plist = playlist.lookup("Libraries").lookup(test_album)
playlist.library.join()
random.seed(1)
clist.set_random(False)
tracks = playlist.peek(0)
self.assertEqual(tracks, [ ])
self.assertEqual(clist.current, -1)
tracks = playlist.peek(5)
self.assertEqual(tracks, [ clist[i] for i in range(5) ])
self.assertEqual(clist.current, -1)
clist.set_random(True)
tracks = playlist.peek(5)
self.assertEqual(len(tracks), 5)
self.assertEqual(clist.current, -1)
for i in range(5):
self.assertEqual(playlist.next(), tracks[i])
def test_save_playlists(self):
dfile = data.DataFile("playlists.pickle", data.READ)
track = trak.lookup(os.path.join(test_album, "01 - Test Track.ogg"))

View File

@ -28,7 +28,7 @@ def __changed__():
Down.set_sensitive(Count > MINIMUM)
def __estimate__():
tracks = curds.playlist.Root.peek(Count)
tracks = curds.playlist.peek(Count)
length = sum([ t.length for t in tracks if t is not None ])
length += playbin.remaining() / Gst.SECOND
(m, s) = divmod(round(length / 5.0) * 5, 60)