From 33511d4400e7a5e1e64aec967c79043e66b0eaf5 Mon Sep 17 00:00:00 2001 From: tom roth Date: Fri, 3 Jul 2015 10:44:31 +0200 Subject: [PATCH] file-browser: Don't rely on configured media dir to be available --- mopidy/files/ext.conf | 3 ++- mopidy/files/library.py | 39 +++++++++++++++++++++++++-------------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/mopidy/files/ext.conf b/mopidy/files/ext.conf index 59cc362d..9bc229ff 100644 --- a/mopidy/files/ext.conf +++ b/mopidy/files/ext.conf @@ -1,7 +1,8 @@ [files] enabled = true media_dir = - $XDG_MUSIC_DIR + $XDG_MUSIC_DIR:Music + ~/:Home show_hidden = false follow_symlinks = true metadata_timeout = 1000 \ No newline at end of file diff --git a/mopidy/files/library.py b/mopidy/files/library.py index 0128cd85..8bd04272 100644 --- a/mopidy/files/library.py +++ b/mopidy/files/library.py @@ -37,18 +37,29 @@ class FilesLibraryProvider(backend.LibraryProvider): for entry in config['files']['media_dir']: media_dir = {} media_dict = entry.split(':') - local_path = path.expand_path( - media_dict[0].encode(sys.getfilesystemencoding())) - st = os.stat(local_path) - if not stat.S_ISDIR(st.st_mode): - logger.warn(u'%s is not a directory' % local_path) + try: + local_path = path.expand_path( + media_dict[0].encode(sys.getfilesystemencoding())) + except: + pass + if not local_path: + logger.warn('Could not expand path %s' % media_dict[0]) continue - media_dir['path'] = local_path - if len(media_dict) == 2: - media_dir['name'] = media_dict[1] else: - media_dir['name'] = media_dict[0].replace(os.sep, '+') - self._media_dirs.append(media_dir) + try: + st = os.stat(local_path) + except: + logger.warn('Could not open %s' % local_path) + continue + if not stat.S_ISDIR(st.st_mode): + logger.warn(u'%s is not a directory' % local_path) + continue + media_dir['path'] = local_path + if len(media_dict) == 2: + media_dir['name'] = media_dict[1] + else: + media_dir['name'] = media_dict[0].replace(os.sep, '+') + self._media_dirs.append(media_dir) self._follow_symlinks = config['files']['follow_symlinks'] self._show_hidden = config['files']['show_hidden'] self._scanner = scan.Scanner( @@ -81,7 +92,7 @@ class FilesLibraryProvider(backend.LibraryProvider): else: logger.warn(u'Ignored file: %s' % child.decode('ascii', 'ignore')) - pass + continue result.sort(key=operator.attrgetter('name')) return result @@ -118,11 +129,11 @@ class FilesLibraryProvider(backend.LibraryProvider): def _check_audiofile(self, uri): try: result = self._scanner.scan(uri) - logger.debug(u'got scan result playable: %s for %s' % ( - result.uri, str(result.playable))) + logger.debug(u'got scan result playable: %s for %s' % + (result.uri, str(result.playable))) res = result.playable except exceptions.ScannerError as e: - logger.warning(u'Problem looking up %s: %s', uri, e) + logger.warning(u'Problem scanning %s: %s', uri, e) res = False return res