diff --git a/docs/api/core.rst b/docs/api/core.rst index e74d9f45..1563b61b 100644 --- a/docs/api/core.rst +++ b/docs/api/core.rst @@ -48,3 +48,10 @@ Manages the music library, e.g. searching for tracks to be added to a playlist. .. autoclass:: mopidy.core.LibraryController :members: + + +Core listener +============= + +.. autoclass:: mopidy.core.CoreListener + :members: diff --git a/docs/api/index.rst b/docs/api/index.rst index 618096ee..5a210812 100644 --- a/docs/api/index.rst +++ b/docs/api/index.rst @@ -11,4 +11,3 @@ API reference core audio frontends - listeners diff --git a/docs/api/listeners.rst b/docs/api/listeners.rst deleted file mode 100644 index 609dc3c7..00000000 --- a/docs/api/listeners.rst +++ /dev/null @@ -1,7 +0,0 @@ -************ -Listener API -************ - -.. automodule:: mopidy.listeners - :synopsis: Listener API - :members: diff --git a/mopidy/core/__init__.py b/mopidy/core/__init__.py index 6070dcc8..28274fe3 100644 --- a/mopidy/core/__init__.py +++ b/mopidy/core/__init__.py @@ -1,5 +1,6 @@ from .actor import Core from .current_playlist import CurrentPlaylistController from .library import LibraryController +from .listener import CoreListener from .playback import PlaybackController, PlaybackState from .stored_playlists import StoredPlaylistsController diff --git a/mopidy/core/current_playlist.py b/mopidy/core/current_playlist.py index a39b4c39..973fe71f 100644 --- a/mopidy/core/current_playlist.py +++ b/mopidy/core/current_playlist.py @@ -2,9 +2,10 @@ from copy import copy import logging import random -from mopidy.listeners import BackendListener from mopidy.models import CpTrack +from .listener import CoreListener + logger = logging.getLogger('mopidy.core') @@ -240,4 +241,4 @@ class CurrentPlaylistController(object): def _trigger_playlist_changed(self): logger.debug(u'Triggering playlist changed event') - BackendListener.send('playlist_changed') + CoreListener.send('playlist_changed') diff --git a/mopidy/listeners.py b/mopidy/core/listener.py similarity index 92% rename from mopidy/listeners.py rename to mopidy/core/listener.py index a8794232..a77b29a8 100644 --- a/mopidy/listeners.py +++ b/mopidy/core/listener.py @@ -1,11 +1,12 @@ from pykka import registry -class BackendListener(object): + +class CoreListener(object): """ - Marker interface for recipients of events sent by the backend. + Marker interface for recipients of events sent by the core actor. Any Pykka actor that mixes in this class will receive calls to the methods - defined here when the corresponding events happen in the backend. This + defined here when the corresponding events happen in the core actor. This interface is used both for looking up what actors to notify of the events, and for providing default implementations for those listeners that are not interested in all events. @@ -13,7 +14,7 @@ class BackendListener(object): @staticmethod def send(event, **kwargs): - """Helper to allow calling of backend listener events""" + """Helper to allow calling of core listener events""" # FIXME this should be updated once Pykka supports non-blocking calls # on proxies or some similar solution. registry.ActorRegistry.broadcast({ @@ -21,7 +22,7 @@ class BackendListener(object): 'attr_path': (event,), 'args': [], 'kwargs': kwargs, - }, target_class=BackendListener) + }, target_class=CoreListener) def track_playback_paused(self, track, time_position): """ diff --git a/mopidy/core/playback.py b/mopidy/core/playback.py index efba03dd..603b40a4 100644 --- a/mopidy/core/playback.py +++ b/mopidy/core/playback.py @@ -1,7 +1,7 @@ import logging import random -from mopidy.listeners import BackendListener +from .listener import CoreListener logger = logging.getLogger('mopidy.backends.base') @@ -479,7 +479,7 @@ class PlaybackController(object): logger.debug(u'Triggering track playback paused event') if self.current_track is None: return - BackendListener.send('track_playback_paused', + CoreListener.send('track_playback_paused', track=self.current_track, time_position=self.time_position) @@ -487,7 +487,7 @@ class PlaybackController(object): logger.debug(u'Triggering track playback resumed event') if self.current_track is None: return - BackendListener.send('track_playback_resumed', + CoreListener.send('track_playback_resumed', track=self.current_track, time_position=self.time_position) @@ -495,26 +495,26 @@ class PlaybackController(object): logger.debug(u'Triggering track playback started event') if self.current_track is None: return - BackendListener.send('track_playback_started', + CoreListener.send('track_playback_started', track=self.current_track) def _trigger_track_playback_ended(self): logger.debug(u'Triggering track playback ended event') if self.current_track is None: return - BackendListener.send('track_playback_ended', + CoreListener.send('track_playback_ended', track=self.current_track, time_position=self.time_position) def _trigger_playback_state_changed(self, old_state, new_state): logger.debug(u'Triggering playback state change event') - BackendListener.send('playback_state_changed', + CoreListener.send('playback_state_changed', old_state=old_state, new_state=new_state) def _trigger_options_changed(self): logger.debug(u'Triggering options changed event') - BackendListener.send('options_changed') + CoreListener.send('options_changed') def _trigger_seeked(self, time_position): logger.debug(u'Triggering seeked event') - BackendListener.send('seeked', time_position=time_position) + CoreListener.send('seeked', time_position=time_position) diff --git a/mopidy/frontends/lastfm.py b/mopidy/frontends/lastfm.py index 0e79024b..f2bc44d2 100644 --- a/mopidy/frontends/lastfm.py +++ b/mopidy/frontends/lastfm.py @@ -9,15 +9,16 @@ except ImportError as import_error: from pykka.actor import ThreadingActor -from mopidy import settings, SettingsError -from mopidy.listeners import BackendListener +from mopidy import core, settings, SettingsError + logger = logging.getLogger('mopidy.frontends.lastfm') API_KEY = '2236babefa8ebb3d93ea467560d00d04' API_SECRET = '94d9a09c0cd5be955c4afaeaffcaefcd' -class LastfmFrontend(ThreadingActor, BackendListener): + +class LastfmFrontend(ThreadingActor, core.CoreListener): """ Frontend which scrobbles the music you play to your `Last.fm `_ profile. diff --git a/mopidy/frontends/mpd/__init__.py b/mopidy/frontends/mpd/__init__.py index 5d287d03..9dcf4c34 100644 --- a/mopidy/frontends/mpd/__init__.py +++ b/mopidy/frontends/mpd/__init__.py @@ -3,13 +3,15 @@ import sys from pykka import registry, actor -from mopidy import listeners, settings +from mopidy import core, settings from mopidy.frontends.mpd import dispatcher, protocol from mopidy.utils import locale_decode, log, network, process + logger = logging.getLogger('mopidy.frontends.mpd') -class MpdFrontend(actor.ThreadingActor, listeners.BackendListener): + +class MpdFrontend(actor.ThreadingActor, core.CoreListener): """ The MPD frontend. diff --git a/mopidy/frontends/mpris/__init__.py b/mopidy/frontends/mpris/__init__.py index 4d4d5edb..2815c551 100644 --- a/mopidy/frontends/mpris/__init__.py +++ b/mopidy/frontends/mpris/__init__.py @@ -10,12 +10,11 @@ except ImportError as import_error: from pykka.actor import ThreadingActor -from mopidy import settings +from mopidy import core, settings from mopidy.frontends.mpris import objects -from mopidy.listeners import BackendListener -class MprisFrontend(ThreadingActor, BackendListener): +class MprisFrontend(ThreadingActor, core.CoreListener): """ Frontend which lets you control Mopidy through the Media Player Remote Interfacing Specification (`MPRIS `_) D-Bus diff --git a/tests/backends/events_test.py b/tests/backends/events_test.py index 5408d71f..200e0ca2 100644 --- a/tests/backends/events_test.py +++ b/tests/backends/events_test.py @@ -4,13 +4,12 @@ from pykka.registry import ActorRegistry from mopidy import audio, core from mopidy.backends import dummy -from mopidy.listeners import BackendListener from mopidy.models import Track from tests import unittest -@mock.patch.object(BackendListener, 'send') +@mock.patch.object(core.CoreListener, 'send') class BackendEventsTest(unittest.TestCase): def setUp(self): self.audio = mock.Mock(spec=audio.Audio) diff --git a/tests/listeners_test.py b/tests/core/listener_test.py similarity index 87% rename from tests/listeners_test.py rename to tests/core/listener_test.py index 896fedf0..2abd9479 100644 --- a/tests/listeners_test.py +++ b/tests/core/listener_test.py @@ -1,13 +1,12 @@ -from mopidy.core import PlaybackState -from mopidy.listeners import BackendListener +from mopidy.core import CoreListener, PlaybackState from mopidy.models import Track from tests import unittest -class BackendListenerTest(unittest.TestCase): +class CoreListenerTest(unittest.TestCase): def setUp(self): - self.listener = BackendListener() + self.listener = CoreListener() def test_listener_has_default_impl_for_track_playback_paused(self): self.listener.track_playback_paused(Track(), 0)