From 277083d07c74ef227efc7eacff4f78a38c3aa825 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 17 Jul 2017 07:59:14 -0700 Subject: [PATCH] More functionality --- disco/voice/client.py | 2 +- disco/voice/queue.py | 23 +++++++++++++++++++++-- tests/tests_voice_queue.py | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/disco/voice/client.py b/disco/voice/client.py index e747d02..62fb63e 100644 --- a/disco/voice/client.py +++ b/disco/voice/client.py @@ -226,7 +226,7 @@ class VoiceClient(LoggingClass): if self.token and self.token != data.token: return - self.log.info('[%s] Recieved VOICE_SERVER_UPDATE (state = %s)', self, self.state) + self.log.info('[%s] Recieved VOICE_SERVER_UPDATE (state = %s / endpoint = %s)', self, self.state, data.endpoint) self.token = data.token self.set_state(VoiceState.AUTHENTICATING) diff --git a/disco/voice/queue.py b/disco/voice/queue.py index e71c612..8670d14 100644 --- a/disco/voice/queue.py +++ b/disco/voice/queue.py @@ -1,6 +1,7 @@ import abc import six import gevent +import random @six.add_metaclass(abc.ABCMeta) @@ -22,10 +23,28 @@ class PlayableQueue(BaseQueue): self._event.set() self._event = None - def get(self): + def _get(self): if not len(self._data): if not self._event: self._event = gevent.event.Event() self._event.wait() - return self.get() + return self._get() return self._data.pop(0) + + def get(self): + return self._get() + + def shuffle(self): + random.shuffle(self._data) + + def clear(self): + self._data = [] + + def __len__(self): + return len(self._data) + + def __iter__(self): + return self._data.__iter__() + + def __nonzero__(self): + return True diff --git a/tests/tests_voice_queue.py b/tests/tests_voice_queue.py index 5af4cdb..914e8ea 100644 --- a/tests/tests_voice_queue.py +++ b/tests/tests_voice_queue.py @@ -16,6 +16,22 @@ class TestPlayableQueue(TestCase): self.assertEqual(q.get(), 2) self.assertEqual(q.get(), 3) + def test_len(self): + q = PlayableQueue() + + for idx in range(1234): + q.append(idx) + + self.assertEqual(len(q), 1234) + + def test_iter(self): + q = PlayableQueue() + + for idx in range(5): + q.append(idx) + + self.assertEqual(sum(q), 10) + def test_blocking_get(self): q = PlayableQueue() result = gevent.event.AsyncResult() @@ -26,3 +42,25 @@ class TestPlayableQueue(TestCase): gevent.spawn(get) q.append(5) self.assertEqual(result.get(), 5) + + def test_shuffle(self): + q = PlayableQueue() + + for idx in range(10000): + q.append(idx) + + self.assertEqual(q._data[0], 0) + q.shuffle() + self.assertNotEqual(q._data[0], 0) + + def test_clear(self): + q = PlayableQueue() + + for idx in range(100): + q.append(idx) + + self.assertEqual(q._data[0], 0) + self.assertEqual(q._data[-1], 99) + self.assertEqual(len(q), 100) + q.clear() + self.assertEqual(len(q), 0)