diff --git a/docs/changelog.rst b/docs/changelog.rst index 5dd3aa67..115d4d26 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -18,6 +18,10 @@ v0.17.0 (UNRELEASED) - When scanning, we no longer default the album artist to be the same as the track artist. Album artist is now only populated if the scanned file got an explicit album artist set. +- Library scanning has been switched back to custom code due to various issues + with GStreamer's built in scanner in 0.10. This also fixes the scanner slowdown. + (Fixes: :issue:`565`) +- Fix scanner so that mtime is respected when deciding which files can be skipped. **Sub-commands** diff --git a/mopidy/backends/local/library.py b/mopidy/backends/local/library.py index 86d960c1..9791c518 100644 --- a/mopidy/backends/local/library.py +++ b/mopidy/backends/local/library.py @@ -8,7 +8,7 @@ from mopidy.backends import base from mopidy.frontends.mpd import translator as mpd_translator from mopidy.models import Album, SearchResult -from .translator import parse_mpd_tag_cache +from .translator import local_to_file_uri, parse_mpd_tag_cache logger = logging.getLogger('mopidy.backends.local') @@ -189,7 +189,10 @@ class LocalLibraryUpdateProvider(base.BaseLibraryProvider): def load(self): tracks = parse_mpd_tag_cache(self._tag_cache_file, self._media_dir) for track in tracks: - self._tracks[track.uri] = track + # TODO: this should use uris as is, i.e. hack that should go away + # with tag caches. + uri = local_to_file_uri(track.uri, self._media_dir) + self._tracks[uri] = track.copy(uri=uri) return tracks def add(self, track): diff --git a/mopidy/backends/local/playback.py b/mopidy/backends/local/playback.py index 98c92a85..b264dac7 100644 --- a/mopidy/backends/local/playback.py +++ b/mopidy/backends/local/playback.py @@ -1,10 +1,10 @@ from __future__ import unicode_literals import logging -import os from mopidy.backends import base -from mopidy.utils import path + +from . import translator logger = logging.getLogger('mopidy.backends.local') @@ -12,8 +12,6 @@ logger = logging.getLogger('mopidy.backends.local') class LocalPlaybackProvider(base.BasePlaybackProvider): def change_track(self, track): media_dir = self.backend.config['local']['media_dir'] - # TODO: check that type is correct. - file_path = path.uri_to_path(track.uri).split(b':', 1)[1] - file_path = os.path.join(media_dir, file_path) - track = track.copy(uri=path.path_to_uri(file_path)) + uri = translator.local_to_file_uri(track.uri, media_dir) + track = track.copy(uri=uri) return super(LocalPlaybackProvider, self).change_track(track) diff --git a/mopidy/backends/local/translator.py b/mopidy/backends/local/translator.py index 3a02a8af..3c6b8151 100644 --- a/mopidy/backends/local/translator.py +++ b/mopidy/backends/local/translator.py @@ -6,11 +6,18 @@ import urlparse from mopidy.models import Track, Artist, Album from mopidy.utils.encoding import locale_decode -from mopidy.utils.path import path_to_uri +from mopidy.utils.path import path_to_uri, uri_to_path logger = logging.getLogger('mopidy.backends.local') +def local_to_file_uri(uri, media_dir): + # TODO: check that type is correct. + file_path = uri_to_path(uri).split(b':', 1)[1] + file_path = os.path.join(media_dir, file_path) + return path_to_uri(file_path) + + def parse_m3u(file_path, media_dir): r""" Convert M3U file list of uris