core: Check if library is browsable at startup
This commit is contained in:
parent
69836d2e16
commit
252f4792a0
@ -88,6 +88,7 @@ class Backends(list):
|
||||
super(Backends, self).__init__(backends)
|
||||
|
||||
self.with_library = collections.OrderedDict()
|
||||
self.with_browsable_library = collections.OrderedDict()
|
||||
self.with_playback = collections.OrderedDict()
|
||||
self.with_playlists = collections.OrderedDict()
|
||||
|
||||
@ -101,6 +102,13 @@ class Backends(list):
|
||||
self.add(self.with_playback, has_playback, scheme, backend)
|
||||
self.add(self.with_playlists, has_playlists, scheme, backend)
|
||||
|
||||
if has_library:
|
||||
root_dir_name = backend.library.root_directory_name.get()
|
||||
has_browsable_library = root_dir_name is not None
|
||||
self.add(
|
||||
self.with_browsable_library, has_browsable_library,
|
||||
root_dir_name, backend)
|
||||
|
||||
def add(self, registry, supported, uri_scheme, backend):
|
||||
if not supported:
|
||||
return
|
||||
|
||||
@ -64,15 +64,10 @@ class LibraryController(object):
|
||||
if not path.startswith('/'):
|
||||
return []
|
||||
|
||||
backends = {
|
||||
backend.library.root_directory_name.get(): backend
|
||||
for backend in self.backends.with_library.values()
|
||||
if backend.library.browse('/').get()}
|
||||
|
||||
if path == '/':
|
||||
return [
|
||||
Ref(uri='/%s' % name, name=name, type=Ref.DIRECTORY)
|
||||
for name in backends.keys()]
|
||||
for name in self.backends.with_browsable_library.keys()]
|
||||
|
||||
groups = re.match('/(?P<library>[^/]+)(?P<path>.*)', path).groupdict()
|
||||
library_name = groups['library']
|
||||
@ -80,7 +75,7 @@ class LibraryController(object):
|
||||
if not backend_path.startswith('/'):
|
||||
backend_path = '/%s' % backend_path
|
||||
|
||||
backend = backends.get(library_name, None)
|
||||
backend = self.backends.with_browsable_library.get(library_name, None)
|
||||
if not backend:
|
||||
return []
|
||||
|
||||
|
||||
@ -30,22 +30,15 @@ class CoreLibraryTest(unittest.TestCase):
|
||||
self.core = Core(audio=None, backends=[
|
||||
self.backend1, self.backend2, self.backend3])
|
||||
|
||||
def test_browse_root_returns_dir_ref_for_each_library_with_content(self):
|
||||
self.library1.browse().get.return_value = [
|
||||
Ref(uri='/foo/bar', name='bar', type=Ref.DIRECTORY),
|
||||
Ref(uri='dummy1:/foo/baz.mp3', name='Baz', type=Ref.TRACK),
|
||||
]
|
||||
self.library1.browse.reset_mock()
|
||||
self.library2.browse().get.return_value = []
|
||||
self.library2.browse.reset_mock()
|
||||
|
||||
def test_browse_root_returns_dir_ref_for_each_lib_with_root_dir_name(self):
|
||||
result = self.core.library.browse('/')
|
||||
|
||||
self.assertEqual(result, [
|
||||
Ref(uri='/dummy1', name='dummy1', type=Ref.DIRECTORY),
|
||||
Ref(uri='/dummy2', name='dummy2', type=Ref.DIRECTORY),
|
||||
])
|
||||
self.assertTrue(self.library1.browse.called)
|
||||
self.assertTrue(self.library2.browse.called)
|
||||
self.assertFalse(self.library1.browse.called)
|
||||
self.assertFalse(self.library2.browse.called)
|
||||
self.assertFalse(self.backend3.library.browse.called)
|
||||
|
||||
def test_browse_empty_string_returns_nothing(self):
|
||||
@ -64,8 +57,8 @@ class CoreLibraryTest(unittest.TestCase):
|
||||
|
||||
self.core.library.browse('/dummy1/foo')
|
||||
|
||||
self.assertEqual(self.library1.browse.call_count, 2)
|
||||
self.assertEqual(self.library2.browse.call_count, 1)
|
||||
self.assertEqual(self.library1.browse.call_count, 1)
|
||||
self.assertEqual(self.library2.browse.call_count, 0)
|
||||
self.library1.browse.assert_called_with('/foo')
|
||||
|
||||
def test_browse_dummy2_selects_dummy2_backend(self):
|
||||
@ -77,16 +70,16 @@ class CoreLibraryTest(unittest.TestCase):
|
||||
|
||||
self.core.library.browse('/dummy2/bar')
|
||||
|
||||
self.assertEqual(self.library1.browse.call_count, 1)
|
||||
self.assertEqual(self.library2.browse.call_count, 2)
|
||||
self.assertEqual(self.library1.browse.call_count, 0)
|
||||
self.assertEqual(self.library2.browse.call_count, 1)
|
||||
self.library2.browse.assert_called_with('/bar')
|
||||
|
||||
def test_browse_dummy3_returns_nothing(self):
|
||||
result = self.core.library.browse('/dummy3')
|
||||
|
||||
self.assertEqual(result, [])
|
||||
self.assertEqual(self.library1.browse.call_count, 1)
|
||||
self.assertEqual(self.library2.browse.call_count, 1)
|
||||
self.assertEqual(self.library1.browse.call_count, 0)
|
||||
self.assertEqual(self.library2.browse.call_count, 0)
|
||||
|
||||
def test_browse_dir_returns_subdirs_and_tracks(self):
|
||||
self.library1.browse().get.return_value = [
|
||||
|
||||
Loading…
Reference in New Issue
Block a user