From 97c88173351e67c862991e80bd0bfbe15a55a607 Mon Sep 17 00:00:00 2001 From: Nick Steel Date: Thu, 4 Feb 2016 01:33:45 +0000 Subject: [PATCH] Gracefully handle a disabled m3u extension. --- .../static/js/controls.js | 30 +++++++++++++++---- .../static/js/functionsvars.js | 1 + mopidy_musicbox_webclient/static/js/gui.js | 4 ++- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/mopidy_musicbox_webclient/static/js/controls.js b/mopidy_musicbox_webclient/static/js/controls.js index a670101..32a521e 100644 --- a/mopidy_musicbox_webclient/static/js/controls.js +++ b/mopidy_musicbox_webclient/static/js/controls.js @@ -504,22 +504,35 @@ function getCurrentlyPlaying() { return true; } +function getUriSchemes() { + uriSchemes = {}; + return mopidy.getUriSchemes().then(function(schemes) { + for (var i = 0; i < schemes.length; i++) { + uriSchemes[schemes[i].toLowerCase()] = true; + } + }); +} + function getPlaylistByName(name, scheme, create) { var uri_scheme = scheme || ''; var uri = ''; + if (uri_scheme && !uriSchemes[uri_scheme]) { + return Mopidy.when(false); + } return mopidy.playlists.asList().catch(console.error.bind(console)).then(function(plists) { for (var i = 0; i < plists.length; i++) { - if ((plists[i].name === name) && (scheme === '' || getScheme(plists[i].uri) === scheme)) { + if ((plists[i].name === name) && (uri_scheme === '' || getScheme(plists[i].uri) === uri_scheme)) { return plists[i]; } } if (create) { - return mopidy.playlists.create({'name': name, 'uri_scheme': scheme}).done(function(plist) { + return mopidy.playlists.create({'name': name, 'uri_scheme': uri_scheme}).done(function(plist) { console.log("Created playlist '%s'", plist.name); return plist; }); } console.log("Can't find playist '%s", name); + return Mopidy.when(false); }); } @@ -534,12 +547,15 @@ function getFavourites() { return getPlaylistByName(STREAMS_PLAYLIST_NAME, STREAMS_PLAYLIST_SCHEME, true).then(function(playlist) { - return getPlaylistFull(playlist.uri); + if (playlist) { + return getPlaylistFull(playlist.uri); + } + return Mopidy.when(false); }); } function addToFavourites(newTracks) { - getFavourites().then(function(favourites) { + getFavourites().catch(console.error.bind(console)).then(function(favourites) { if (favourites) { if (favourites.tracks) { Array.prototype.push.apply(favourites.tracks, newTracks) @@ -591,12 +607,16 @@ function deleteFavourite(index) { function showFavourites() { $('#streamuristable').empty(); getFavourites().then(function(favourites) { + if (!favourites) { + return; + } var tmp = ''; + $.cookie.json = true; if ($.cookie('streamUris')) { tmp = '' } - if (favourites && favourites.tracks) { + if (favourites.tracks) { var child = ''; for (var i = 0; i < favourites.tracks.length; i++) { child = '
  •  ' + diff --git a/mopidy_musicbox_webclient/static/js/functionsvars.js b/mopidy_musicbox_webclient/static/js/functionsvars.js index 2e3f55e..97bf743 100644 --- a/mopidy_musicbox_webclient/static/js/functionsvars.js +++ b/mopidy_musicbox_webclient/static/js/functionsvars.js @@ -36,6 +36,7 @@ var playlistslistScroll; var STREAMS_PLAYLIST_NAME = '[Radio Streams]'; var STREAMS_PLAYLIST_SCHEME = 'm3u'; +var uriSchemes = {}; //array of cached playlists (not only user-playlists, also search, artist, album-playlists) var playlists = {}; diff --git a/mopidy_musicbox_webclient/static/js/gui.js b/mopidy_musicbox_webclient/static/js/gui.js index e5c99fa..d4ab846 100644 --- a/mopidy_musicbox_webclient/static/js/gui.js +++ b/mopidy_musicbox_webclient/static/js/gui.js @@ -231,7 +231,9 @@ function initSocketevents() { getCurrentPlaylist(); updateStatusOfAll(); getPlaylists(); - showFavourites(); + getUriSchemes().then(function() { + showFavourites(); + }); getBrowseDir(); getSearchSchemes(); showLoading(false);