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)
|
super(Backends, self).__init__(backends)
|
||||||
|
|
||||||
self.with_library = collections.OrderedDict()
|
self.with_library = collections.OrderedDict()
|
||||||
|
self.with_browsable_library = collections.OrderedDict()
|
||||||
self.with_playback = collections.OrderedDict()
|
self.with_playback = collections.OrderedDict()
|
||||||
self.with_playlists = 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_playback, has_playback, scheme, backend)
|
||||||
self.add(self.with_playlists, has_playlists, 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):
|
def add(self, registry, supported, uri_scheme, backend):
|
||||||
if not supported:
|
if not supported:
|
||||||
return
|
return
|
||||||
|
|||||||
@ -64,15 +64,10 @@ class LibraryController(object):
|
|||||||
if not path.startswith('/'):
|
if not path.startswith('/'):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
backends = {
|
|
||||||
backend.library.root_directory_name.get(): backend
|
|
||||||
for backend in self.backends.with_library.values()
|
|
||||||
if backend.library.browse('/').get()}
|
|
||||||
|
|
||||||
if path == '/':
|
if path == '/':
|
||||||
return [
|
return [
|
||||||
Ref(uri='/%s' % name, name=name, type=Ref.DIRECTORY)
|
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()
|
groups = re.match('/(?P<library>[^/]+)(?P<path>.*)', path).groupdict()
|
||||||
library_name = groups['library']
|
library_name = groups['library']
|
||||||
@ -80,7 +75,7 @@ class LibraryController(object):
|
|||||||
if not backend_path.startswith('/'):
|
if not backend_path.startswith('/'):
|
||||||
backend_path = '/%s' % backend_path
|
backend_path = '/%s' % backend_path
|
||||||
|
|
||||||
backend = backends.get(library_name, None)
|
backend = self.backends.with_browsable_library.get(library_name, None)
|
||||||
if not backend:
|
if not backend:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|||||||
@ -30,22 +30,15 @@ class CoreLibraryTest(unittest.TestCase):
|
|||||||
self.core = Core(audio=None, backends=[
|
self.core = Core(audio=None, backends=[
|
||||||
self.backend1, self.backend2, self.backend3])
|
self.backend1, self.backend2, self.backend3])
|
||||||
|
|
||||||
def test_browse_root_returns_dir_ref_for_each_library_with_content(self):
|
def test_browse_root_returns_dir_ref_for_each_lib_with_root_dir_name(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()
|
|
||||||
|
|
||||||
result = self.core.library.browse('/')
|
result = self.core.library.browse('/')
|
||||||
|
|
||||||
self.assertEqual(result, [
|
self.assertEqual(result, [
|
||||||
Ref(uri='/dummy1', name='dummy1', type=Ref.DIRECTORY),
|
Ref(uri='/dummy1', name='dummy1', type=Ref.DIRECTORY),
|
||||||
|
Ref(uri='/dummy2', name='dummy2', type=Ref.DIRECTORY),
|
||||||
])
|
])
|
||||||
self.assertTrue(self.library1.browse.called)
|
self.assertFalse(self.library1.browse.called)
|
||||||
self.assertTrue(self.library2.browse.called)
|
self.assertFalse(self.library2.browse.called)
|
||||||
self.assertFalse(self.backend3.library.browse.called)
|
self.assertFalse(self.backend3.library.browse.called)
|
||||||
|
|
||||||
def test_browse_empty_string_returns_nothing(self):
|
def test_browse_empty_string_returns_nothing(self):
|
||||||
@ -64,8 +57,8 @@ class CoreLibraryTest(unittest.TestCase):
|
|||||||
|
|
||||||
self.core.library.browse('/dummy1/foo')
|
self.core.library.browse('/dummy1/foo')
|
||||||
|
|
||||||
self.assertEqual(self.library1.browse.call_count, 2)
|
self.assertEqual(self.library1.browse.call_count, 1)
|
||||||
self.assertEqual(self.library2.browse.call_count, 1)
|
self.assertEqual(self.library2.browse.call_count, 0)
|
||||||
self.library1.browse.assert_called_with('/foo')
|
self.library1.browse.assert_called_with('/foo')
|
||||||
|
|
||||||
def test_browse_dummy2_selects_dummy2_backend(self):
|
def test_browse_dummy2_selects_dummy2_backend(self):
|
||||||
@ -77,16 +70,16 @@ class CoreLibraryTest(unittest.TestCase):
|
|||||||
|
|
||||||
self.core.library.browse('/dummy2/bar')
|
self.core.library.browse('/dummy2/bar')
|
||||||
|
|
||||||
self.assertEqual(self.library1.browse.call_count, 1)
|
self.assertEqual(self.library1.browse.call_count, 0)
|
||||||
self.assertEqual(self.library2.browse.call_count, 2)
|
self.assertEqual(self.library2.browse.call_count, 1)
|
||||||
self.library2.browse.assert_called_with('/bar')
|
self.library2.browse.assert_called_with('/bar')
|
||||||
|
|
||||||
def test_browse_dummy3_returns_nothing(self):
|
def test_browse_dummy3_returns_nothing(self):
|
||||||
result = self.core.library.browse('/dummy3')
|
result = self.core.library.browse('/dummy3')
|
||||||
|
|
||||||
self.assertEqual(result, [])
|
self.assertEqual(result, [])
|
||||||
self.assertEqual(self.library1.browse.call_count, 1)
|
self.assertEqual(self.library1.browse.call_count, 0)
|
||||||
self.assertEqual(self.library2.browse.call_count, 1)
|
self.assertEqual(self.library2.browse.call_count, 0)
|
||||||
|
|
||||||
def test_browse_dir_returns_subdirs_and_tracks(self):
|
def test_browse_dir_returns_subdirs_and_tracks(self):
|
||||||
self.library1.browse().get.return_value = [
|
self.library1.browse().get.return_value = [
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user