From d522415757e6870e12ce41d4bea80df60bbe5aab Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Mon, 26 Apr 2010 23:27:47 +0200 Subject: [PATCH 1/8] Placeholder test_santitising_of_playlist_filenames --- tests/backends/gstreamer_test.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/backends/gstreamer_test.py b/tests/backends/gstreamer_test.py index f1f40d11..c6df4f01 100644 --- a/tests/backends/gstreamer_test.py +++ b/tests/backends/gstreamer_test.py @@ -79,6 +79,9 @@ class GStreamerBackendStoredPlaylistsControllerTest(BaseStoredPlaylistsControlle self.assert_(not os.path.exists(file1)) self.assert_(os.path.exists(file2)) + def test_santitising_of_playlist_filenames(self): + raise SkipTest + if __name__ == '__main__': unittest.main() From 2f4cea233957196affa270ac54a268cd847ec6ee Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Mon, 26 Apr 2010 23:43:06 +0200 Subject: [PATCH 2/8] Add test_playlist_contents_get_written_to_disk test --- mopidy/backends/gstreamer.py | 11 +++++++++-- tests/backends/gstreamer_test.py | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/mopidy/backends/gstreamer.py b/mopidy/backends/gstreamer.py index 594f55be..0e9acd8e 100644 --- a/mopidy/backends/gstreamer.py +++ b/mopidy/backends/gstreamer.py @@ -142,6 +142,13 @@ class GStreamerStoredPlaylistsController(BaseStoredPlaylistsController): shutil.move(src, dst) def save(self, playlist): - file = os.path.join(self._folder, playlist.name + '.m3u') - open(file, 'w').close() + file_path = os.path.join(self._folder, playlist.name + '.m3u') + + with open(file_path, 'w') as file: + for track in playlist.tracks: + if track.uri.startswith('file:'): + file.write(track.uri[len('file:'):] + '\n') + else: + file.write(track.uri + '\n') + self._playlists.append(playlist) diff --git a/tests/backends/gstreamer_test.py b/tests/backends/gstreamer_test.py index c6df4f01..f0200c84 100644 --- a/tests/backends/gstreamer_test.py +++ b/tests/backends/gstreamer_test.py @@ -7,6 +7,7 @@ from mopidy.backends.gstreamer import GStreamerBackend from mopidy import settings from tests.backends.base import * +from tests import SkipTest folder = os.path.dirname(__file__) folder = os.path.join(folder, '..', 'data') @@ -79,6 +80,19 @@ class GStreamerBackendStoredPlaylistsControllerTest(BaseStoredPlaylistsControlle self.assert_(not os.path.exists(file1)) self.assert_(os.path.exists(file2)) + def test_playlist_contents_get_written_to_disk(self): + track = Track(uri=generate_song(1)) + uri = track.uri[len('file:'):] + playlist = Playlist(tracks=[track], name='test') + file_path = os.path.join(settings.PLAYLIST_FOLDER, 'test.m3u') + + self.stored.save(playlist) + + with open(file_path) as file: + contents = file.read() + + self.assertEqual(uri, contents.strip()) + def test_santitising_of_playlist_filenames(self): raise SkipTest From f9bc9a44b1d8021a724f3b7835e0a6698d2a05c2 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Mon, 26 Apr 2010 23:46:48 +0200 Subject: [PATCH 3/8] Replace FIXME with test stub --- mopidy/backends/gstreamer.py | 1 - tests/backends/gstreamer_test.py | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mopidy/backends/gstreamer.py b/mopidy/backends/gstreamer.py index 0e9acd8e..3c081a1b 100644 --- a/mopidy/backends/gstreamer.py +++ b/mopidy/backends/gstreamer.py @@ -110,7 +110,6 @@ class GStreamerPlaybackController(BasePlaybackController): class GStreamerStoredPlaylistsController(BaseStoredPlaylistsController): def __init__(self, *args): super(GStreamerStoredPlaylistsController, self).__init__(*args) - # FIXME need test that ensures that folder is created self._folder = os.path.expanduser(settings.PLAYLIST_FOLDER) def create(self, name): diff --git a/tests/backends/gstreamer_test.py b/tests/backends/gstreamer_test.py index f0200c84..bdaece7f 100644 --- a/tests/backends/gstreamer_test.py +++ b/tests/backends/gstreamer_test.py @@ -96,6 +96,8 @@ class GStreamerBackendStoredPlaylistsControllerTest(BaseStoredPlaylistsControlle def test_santitising_of_playlist_filenames(self): raise SkipTest + def test_playlist_folder_is_createad(self): + raise SkipTest if __name__ == '__main__': unittest.main() From 7d8aa5c73035a3177dbe5377bab9f51793c3b0b1 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Mon, 26 Apr 2010 23:52:20 +0200 Subject: [PATCH 4/8] s/'''/"""/ for docstrings --- mopidy/backends/__init__.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mopidy/backends/__init__.py b/mopidy/backends/__init__.py index fc4eb6f4..f7705f64 100644 --- a/mopidy/backends/__init__.py +++ b/mopidy/backends/__init__.py @@ -46,10 +46,10 @@ class BaseBackend(object): uri_handlers = [] def destroy(self): - ''' + """ Call destroy on all sub-components in backend so that they can cleanup after themselves. - ''' + """ if self.current_playlist: self.current_playlist.destroy() @@ -227,7 +227,7 @@ class BaseCurrentPlaylistController(object): self.playlist = self.playlist.with_(tracks=before+shuffled+after) def destroy(self): - '''Cleanup after component''' + """Cleanup after component""" pass @@ -284,7 +284,7 @@ class BaseLibraryController(object): raise NotImplementedError def destroy(self): - '''Cleanup after component''' + """Cleanup after component""" pass @@ -604,7 +604,7 @@ class BasePlaybackController(object): raise NotImplementedError def destroy(self): - '''Cleanup after component''' + """Cleanup after component""" pass @@ -720,5 +720,5 @@ class BaseStoredPlaylistsController(object): return filter(lambda p: query in p.name, self._playlists) def destroy(self): - '''Cleanup after component''' + """Cleanup after component""" pass From 0f26329455fdb46c0cb417df1cbc85513be9fee9 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Mon, 26 Apr 2010 23:52:54 +0200 Subject: [PATCH 5/8] Sphinx fix --- mopidy/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mopidy/utils.py b/mopidy/utils.py index 0275e055..f0d972ee 100644 --- a/mopidy/utils.py +++ b/mopidy/utils.py @@ -97,7 +97,7 @@ def m3u_to_uris(file_path): """ Convert M3U file list of uris - Example M3U data: + Example M3U data:: # This is a comment Alternative\Band - Song.mp3 From 32dcabafc34b981fafa8c15ab7b74f8ef09d7915 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Tue, 27 Apr 2010 00:02:57 +0200 Subject: [PATCH 6/8] Load tracks when stored playlist is initialised --- mopidy/backends/gstreamer.py | 14 +++++++++++++- tests/backends/gstreamer_test.py | 21 +++++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/mopidy/backends/gstreamer.py b/mopidy/backends/gstreamer.py index 3c081a1b..2d515b0d 100644 --- a/mopidy/backends/gstreamer.py +++ b/mopidy/backends/gstreamer.py @@ -9,12 +9,14 @@ pygst.require('0.10') import gst import logging import os +import glob import shutil import threading from mopidy.backends import * -from mopidy.models import Playlist +from mopidy.models import Playlist, Track from mopidy import settings +from mopidy.utils import m3u_to_uris logger = logging.getLogger(u'backends.gstreamer') @@ -112,6 +114,16 @@ class GStreamerStoredPlaylistsController(BaseStoredPlaylistsController): super(GStreamerStoredPlaylistsController, self).__init__(*args) self._folder = os.path.expanduser(settings.PLAYLIST_FOLDER) + for m3u in glob.glob(os.path.join(self._folder, '*.m3u')): + name = os.path.basename(m3u)[:len('.m3u')] + track_uris = m3u_to_uris(m3u) + tracks = map(lambda u: Track(uri=u), track_uris) + playlist = Playlist(tracks=tracks, name=name) + + # FIXME playlist name needs better handling + + self._playlists.append(playlist) + def create(self, name): playlist = Playlist(name=name) self.save(playlist) diff --git a/tests/backends/gstreamer_test.py b/tests/backends/gstreamer_test.py index bdaece7f..8cddf451 100644 --- a/tests/backends/gstreamer_test.py +++ b/tests/backends/gstreamer_test.py @@ -2,9 +2,10 @@ import unittest import os import urllib -from mopidy.models import Playlist, Track -from mopidy.backends.gstreamer import GStreamerBackend from mopidy import settings +from mopidy.backends.gstreamer import GStreamerBackend +from mopidy.mixers.dummy import DummyMixer +from mopidy.models import Playlist, Track from tests.backends.base import * from tests import SkipTest @@ -93,6 +94,22 @@ class GStreamerBackendStoredPlaylistsControllerTest(BaseStoredPlaylistsControlle self.assertEqual(uri, contents.strip()) + def test_playlists_are_loaded_at_startup(self): + track = Track(uri=generate_song(1)) + uri = track.uri[len('file:'):] + playlist = Playlist(tracks=[track], name='test') + file_path = os.path.join(settings.PLAYLIST_FOLDER, 'test.m3u') + + self.stored.save(playlist) + + self.backend.destroy() + self.backend = self.backend_class(mixer=DummyMixer()) + self.stored = self.backend.stored_playlists + + self.assert_(self.stored.playlists) + self.assertEqual('test', self.stored.playlists[0].name) + self.assertEqual(track.uri, self.stored.playlists[0].tracks[0].uri) + def test_santitising_of_playlist_filenames(self): raise SkipTest From 5f5de20f2eac8f8eae3c8cc419fe7a0c8ad792b6 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Tue, 27 Apr 2010 00:04:38 +0200 Subject: [PATCH 7/8] Move loading code to refresh --- mopidy/backends/gstreamer.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mopidy/backends/gstreamer.py b/mopidy/backends/gstreamer.py index 2d515b0d..de595726 100644 --- a/mopidy/backends/gstreamer.py +++ b/mopidy/backends/gstreamer.py @@ -113,6 +113,10 @@ class GStreamerStoredPlaylistsController(BaseStoredPlaylistsController): def __init__(self, *args): super(GStreamerStoredPlaylistsController, self).__init__(*args) self._folder = os.path.expanduser(settings.PLAYLIST_FOLDER) + self.refresh() + + def refresh(self): + playlists = [] for m3u in glob.glob(os.path.join(self._folder, '*.m3u')): name = os.path.basename(m3u)[:len('.m3u')] @@ -122,7 +126,9 @@ class GStreamerStoredPlaylistsController(BaseStoredPlaylistsController): # FIXME playlist name needs better handling - self._playlists.append(playlist) + playlists.append(playlist) + + self.playlists = playlists def create(self, name): playlist = Playlist(name=name) From 80879f9f8600400354869cc5c6adcef58ab2440a Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Tue, 27 Apr 2010 00:06:25 +0200 Subject: [PATCH 8/8] Add more test stubs --- tests/backends/gstreamer_test.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/backends/gstreamer_test.py b/tests/backends/gstreamer_test.py index 8cddf451..f49d847c 100644 --- a/tests/backends/gstreamer_test.py +++ b/tests/backends/gstreamer_test.py @@ -116,5 +116,11 @@ class GStreamerBackendStoredPlaylistsControllerTest(BaseStoredPlaylistsControlle def test_playlist_folder_is_createad(self): raise SkipTest + def test_create_sets_playlist_uri(self): + raise SkipTest + + def test_save_sets_playlist_uri(self): + raise SkipTest + if __name__ == '__main__': unittest.main()