diff --git a/mopidy_musicbox_webclient/static/js/functionsvars.js b/mopidy_musicbox_webclient/static/js/functionsvars.js index c3d2629..a2d7dfc 100644 --- a/mopidy_musicbox_webclient/static/js/functionsvars.js +++ b/mopidy_musicbox_webclient/static/js/functionsvars.js @@ -94,6 +94,11 @@ var uriClassList = [ ['subsonic', 'fa-folder-open'] ] +// TODO: It should be possible to retrieve a user-friendly name for a given Mopidy scheme dynamically by +// calling mopidy.library.browse() on the root dir: +// 1. each backend contained in the result will have a 'name' attribute that can be shown as-is in the UI. +// 2. the URI prefix of the backend result should === mopidy.getUriSchemes(), which can be used for the mapping. +// 3. only backends that cannot be 'browsed' (e.g. youtube) should have a static mapping defined here. var uriHumanList = [ ['spotify', 'Spotify'], ['spotifytunigo', 'Spotify browse'], @@ -510,7 +515,7 @@ function getMediaHuman (uri) { return uriHumanList[i][1] } } - return uri + return '' } function isServiceUri (uri) { diff --git a/mopidy_musicbox_webclient/static/js/library.js b/mopidy_musicbox_webclient/static/js/library.js index 13e63e8..682174f 100644 --- a/mopidy_musicbox_webclient/static/js/library.js +++ b/mopidy_musicbox_webclient/static/js/library.js @@ -337,7 +337,10 @@ }) for (var i = 0; i < schemesArray.length; i++) { backendName = getMediaHuman(schemesArray[i]) - backendName = backendName.charAt(0).toUpperCase() + backendName.slice(1) + if (!backendName) { + // No mapping defined, revert to just showing the scheme with first letter capitalized. + backendName = schemesArray[i].charAt(0).toUpperCase() + schemesArray[i].slice(1) + } $('#selectSearchService').append(new Option(backendName, schemesArray[i])) } $('#selectSearchService').val(searchScheme) diff --git a/tests/js/test_library.js b/tests/js/test_library.js index 47c2637..3b4b789 100644 --- a/tests/js/test_library.js +++ b/tests/js/test_library.js @@ -17,17 +17,22 @@ describe('Library', function () { $(document.body).append('') $('#selectSearchService').selectmenu() }) + + beforeEach(function () { + uriHumanList = [ + ['mockScheme1', 'mockUriHuman1'], + ['mockScheme2', 'mockUriHuman2'] + ] + }) describe('#getSearchSchemes()', function () { beforeEach(function () { $(selectID).empty() }) it('should add human-readable options for backend schemes', function () { - uriHumanList = [['mockScheme2', 'mockUriHuman2']] - library.getSearchSchemes([], mopidy) assert.equal($(selectID).children().length, schemesArray.length + 1) - expect($(selectID).children(':eq(2)')).to.have.text('MockUriHuman2') + expect($(selectID).children(':eq(2)')).to.have.text('mockUriHuman2') }) it('should get default value from cookie', function () { @@ -42,9 +47,9 @@ describe('Library', function () { expect($(selectID + ' option:selected')).to.have.value('all') }) - it('should capitalize first character of backend schema', function () { + it('should capitalize first character of backend schema if no mapping is provided', function () { library.getSearchSchemes([], mopidy) - expect($(selectID).children(':eq(1)')).to.have.text('MockScheme1') + expect($(selectID).children(':eq(3)')).to.have.text('MockScheme3') }) it('should blacklist services that should not be searched', function () {