From 32dcabafc34b981fafa8c15ab7b74f8ef09d7915 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Tue, 27 Apr 2010 00:02:57 +0200 Subject: [PATCH] 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