Merge branch 'gstreamer' of git://github.com/jodal/mopidy into gstreamer

This commit is contained in:
Thomas Adamcik 2010-08-14 16:07:56 +02:00
commit 6346e07ad5
10 changed files with 33 additions and 19 deletions

View File

@ -7,8 +7,3 @@ Contributors to Mopidy in the order of appearance:
- Johannes Knutsen <johannes@knutseninfo.no> - Johannes Knutsen <johannes@knutseninfo.no>
- Thomas Adamcik <adamcik@samfundet.no> - Thomas Adamcik <adamcik@samfundet.no>
- Kristian Klette <klette@klette.us> - Kristian Klette <klette@klette.us>
Also, we would like to thank:
- Jørgen P. Tjernø for his work on the Python wrapper for Despotify.
- Doug Winter for his work on the Python wrapper for libspotify.

View File

@ -47,12 +47,16 @@ greatly improved MPD client support.
- Fixed delete current playing track from playlist, which crashed several - Fixed delete current playing track from playlist, which crashed several
clients. clients.
- Implement ``seek`` and ``seekid``. - Implement ``seek`` and ``seekid``.
- Fix ``playlistfind`` output so the correct song is played when playing
songs directly from search results in GMPC.
- Backends: - Backends:
- Rename :mod:`mopidy.backends.gstreamer` to :mod:`mopidy.backends.local`. - Rename :mod:`mopidy.backends.gstreamer` to :mod:`mopidy.backends.local`.
- Remove :mod:`mopidy.backends.despotify`, as Despotify is little maintained - Remove :mod:`mopidy.backends.despotify`, as Despotify is little maintained
and the Libspotify backend is working much better. and the Libspotify backend is working much better.
- Rename ``mopidy.frontends.mpd.{serializer => translator}`` to match naming
in backends.
- Backend API: - Backend API:

View File

@ -63,4 +63,12 @@ Check out the pyspotify code, and install it::
git clone git://github.com/jodal/pyspotify.git git clone git://github.com/jodal/pyspotify.git
cd pyspotify/pyspotify/ cd pyspotify/pyspotify/
sudo rm -rf build/ # If you are upgrading pyspotify
sudo python setup.py install sudo python setup.py install
.. note::
The ``sudo rm -rf build/`` step is needed if you are upgrading pyspotify.
Simply running ``python setup.py clean`` will *not* clean out the C parts
of the ``build/`` directory, and you will thus not get any changes to the C
code included in your installation.

View File

@ -8,7 +8,7 @@ from mopidy.backends.base.current_playlist import BaseCurrentPlaylistController
from mopidy.backends.base.library import BaseLibraryController from mopidy.backends.base.library import BaseLibraryController
from mopidy.backends.base.playback import BasePlaybackController from mopidy.backends.base.playback import BasePlaybackController
from mopidy.backends.base.stored_playlists import BaseStoredPlaylistsController from mopidy.backends.base.stored_playlists import BaseStoredPlaylistsController
from mopidy.frontends.mpd import serializer from mopidy.frontends.mpd import translator
from mopidy.models import Playlist from mopidy.models import Playlist
from mopidy.utils import get_class from mopidy.utils import get_class

View File

@ -2,7 +2,7 @@ from copy import copy
import logging import logging
import random import random
from mopidy.frontends.mpd import serializer from mopidy.frontends.mpd import translator
logger = logging.getLogger('mopidy.backends.base') logger = logging.getLogger('mopidy.backends.base')
@ -196,4 +196,4 @@ class BaseCurrentPlaylistController(object):
def mpd_format(self, *args, **kwargs): def mpd_format(self, *args, **kwargs):
"""Not a part of the generic backend API.""" """Not a part of the generic backend API."""
kwargs['cpids'] = [ct[0] for ct in self._cp_tracks] kwargs['cpids'] = [ct[0] for ct in self._cp_tracks]
return serializer.tracks_to_mpd_format(self.tracks, *args, **kwargs) return translator.tracks_to_mpd_format(self.tracks, *args, **kwargs)

View File

@ -173,7 +173,10 @@ def playlistfind(frontend, tag, needle):
if tag == 'filename': if tag == 'filename':
try: try:
cp_track = frontend.backend.current_playlist.get(uri=needle) cp_track = frontend.backend.current_playlist.get(uri=needle)
return cp_track[1].mpd_format() (cpid, track) = cp_track
position = frontend.backend.current_playlist.cp_tracks.index(
cp_track)
return track.mpd_format(cpid=cpid, position=position)
except LookupError: except LookupError:
return None return None
raise MpdNotImplemented # TODO raise MpdNotImplemented # TODO

View File

@ -1,6 +1,6 @@
from copy import copy from copy import copy
from mopidy.frontends.mpd import serializer from mopidy.frontends.mpd import translator
class ImmutableObject(object): class ImmutableObject(object):
""" """
@ -136,7 +136,7 @@ class Track(ImmutableObject):
return list(self._artists) return list(self._artists)
def mpd_format(self, *args, **kwargs): def mpd_format(self, *args, **kwargs):
return serializer.track_to_mpd_format(self, *args, **kwargs) return translator.track_to_mpd_format(self, *args, **kwargs)
class Playlist(ImmutableObject): class Playlist(ImmutableObject):
@ -177,7 +177,7 @@ class Playlist(ImmutableObject):
return len(self._tracks) return len(self._tracks)
def mpd_format(self, *args, **kwargs): def mpd_format(self, *args, **kwargs):
return serializer.playlist_to_mpd_format(self, *args, **kwargs) return translator.playlist_to_mpd_format(self, *args, **kwargs)
def with_(self, uri=None, name=None, tracks=None, last_modified=None): def with_(self, uri=None, name=None, tracks=None, last_modified=None):
""" """

View File

@ -195,14 +195,16 @@ class CurrentPlaylistHandlerTest(unittest.TestCase):
result = self.h.handle_request(u'playlistfind "tag" "needle"') result = self.h.handle_request(u'playlistfind "tag" "needle"')
self.assert_(u'ACK [0@0] {} Not implemented' in result) self.assert_(u'ACK [0@0] {} Not implemented' in result)
def test_playlistfind_by_filename(self): def test_playlistfind_by_filename_not_in_current_playlist(self):
result = self.h.handle_request( result = self.h.handle_request(
u'playlistfind "filename" "file:///dev/null"') u'playlistfind "filename" "file:///dev/null"')
self.assertEqual(len(result), 1)
self.assert_(u'OK' in result) self.assert_(u'OK' in result)
def test_playlistfind_by_filename_without_quotes(self): def test_playlistfind_by_filename_without_quotes(self):
result = self.h.handle_request( result = self.h.handle_request(
u'playlistfind filename "file:///dev/null"') u'playlistfind filename "file:///dev/null"')
self.assertEqual(len(result), 1)
self.assert_(u'OK' in result) self.assert_(u'OK' in result)
def test_playlistfind_by_filename_in_current_playlist(self): def test_playlistfind_by_filename_in_current_playlist(self):
@ -211,6 +213,8 @@ class CurrentPlaylistHandlerTest(unittest.TestCase):
result = self.h.handle_request( result = self.h.handle_request(
u'playlistfind filename "file:///exists"') u'playlistfind filename "file:///exists"')
self.assert_(u'file: file:///exists' in result) self.assert_(u'file: file:///exists' in result)
self.assert_(u'Id: 1' in result)
self.assert_(u'Pos: 0' in result)
self.assert_(u'OK' in result) self.assert_(u'OK' in result)
def test_playlistid_without_songid(self): def test_playlistid_without_songid(self):

View File

@ -1,12 +1,12 @@
import datetime as dt import datetime as dt
import unittest import unittest
from mopidy.frontends.mpd import serializer from mopidy.frontends.mpd import translator
from mopidy.models import Album, Artist, Playlist, Track from mopidy.models import Album, Artist, Playlist, Track
class TrackMpdFormatTest(unittest.TestCase): class TrackMpdFormatTest(unittest.TestCase):
def test_mpd_format_for_empty_track(self): def test_mpd_format_for_empty_track(self):
result = serializer.track_to_mpd_format(Track()) result = translator.track_to_mpd_format(Track())
self.assert_(('file', '') in result) self.assert_(('file', '') in result)
self.assert_(('Time', 0) in result) self.assert_(('Time', 0) in result)
self.assert_(('Artist', '') in result) self.assert_(('Artist', '') in result)
@ -25,7 +25,7 @@ class TrackMpdFormatTest(unittest.TestCase):
date=dt.date(1977, 1, 1), date=dt.date(1977, 1, 1),
length=137000, length=137000,
) )
result = serializer.track_to_mpd_format(track, position=9, cpid=122) result = translator.track_to_mpd_format(track, position=9, cpid=122)
self.assert_(('file', 'a uri') in result) self.assert_(('file', 'a uri') in result)
self.assert_(('Time', 137) in result) self.assert_(('Time', 137) in result)
self.assert_(('Artist', 'an artist') in result) self.assert_(('Artist', 'an artist') in result)
@ -38,7 +38,7 @@ class TrackMpdFormatTest(unittest.TestCase):
def test_mpd_format_artists(self): def test_mpd_format_artists(self):
track = Track(artists=[Artist(name=u'ABBA'), Artist(name=u'Beatles')]) track = Track(artists=[Artist(name=u'ABBA'), Artist(name=u'Beatles')])
self.assertEqual(serializer.track_artists_to_mpd_format(track), self.assertEqual(translator.track_artists_to_mpd_format(track),
u'ABBA, Beatles') u'ABBA, Beatles')
@ -46,12 +46,12 @@ class PlaylistMpdFormatTest(unittest.TestCase):
def test_mpd_format(self): def test_mpd_format(self):
playlist = Playlist(tracks=[ playlist = Playlist(tracks=[
Track(track_no=1), Track(track_no=2), Track(track_no=3)]) Track(track_no=1), Track(track_no=2), Track(track_no=3)])
result = serializer.playlist_to_mpd_format(playlist) result = translator.playlist_to_mpd_format(playlist)
self.assertEqual(len(result), 3) self.assertEqual(len(result), 3)
def test_mpd_format_with_range(self): def test_mpd_format_with_range(self):
playlist = Playlist(tracks=[ playlist = Playlist(tracks=[
Track(track_no=1), Track(track_no=2), Track(track_no=3)]) Track(track_no=1), Track(track_no=2), Track(track_no=3)])
result = serializer.playlist_to_mpd_format(playlist, 1, 2) result = translator.playlist_to_mpd_format(playlist, 1, 2)
self.assertEqual(len(result), 1) self.assertEqual(len(result), 1)
self.assertEqual(dict(result[0])['Track'], 2) self.assertEqual(dict(result[0])['Track'], 2)