diff --git a/ApiClient.js b/ApiClient.js index e989d8ff17..a0d4b399d6 100644 --- a/ApiClient.js +++ b/ApiClient.js @@ -319,6 +319,50 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { }); }; + self.getInstantMixFromSong = function (itemId, options) { + + var url = self.getUrl("Songs/" + itemId + "/InstantMix", options); + + return self.ajax({ + type: "GET", + url: url, + dataType: "json" + }); + }; + + self.getInstantMixFromAlbum = function (itemId, options) { + + var url = self.getUrl("Albums/" + itemId + "/InstantMix", options); + + return self.ajax({ + type: "GET", + url: url, + dataType: "json" + }); + }; + + self.getInstantMixFromArtist = function (name, options) { + + var url = self.getUrl("Artists/" + self.encodeName(name) + "/InstantMix", options); + + return self.ajax({ + type: "GET", + url: url, + dataType: "json" + }); + }; + + self.getInstantMixFromMusicGenre = function (name, options) { + + var url = self.getUrl("MusicGenres/" + self.encodeName(name) + "/InstantMix", options); + + return self.ajax({ + type: "GET", + url: url, + dataType: "json" + }); + }; + self.getSimilarMovies = function (itemId, options) { var url = self.getUrl("Movies/" + itemId + "/Similar", options); diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 4d7617060b..d1d50ae34a 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -331,10 +331,23 @@ if (itemType == "Artist") { html += '
  • Play
  • '; - } else { + } else if (itemType != "MusicGenre") { html += '
  • Play
  • '; } + if (itemType == "Audio") { + html += '
  • Instant Mix
  • '; + } + else if (itemType == "MusicAlbum") { + html += '
  • Instant Mix
  • '; + } + else if (itemType == "Artist") { + html += '
  • Instant Mix
  • '; + } + else if (itemType == "MusicGenre") { + html += '
  • Instant Mix
  • '; + } + if (resumePositionTicks) { html += '
  • Resume
  • '; } @@ -342,7 +355,7 @@ if (isPlaying) { if (itemType == "Artist") { html += '
  • Queue
  • '; - } else { + } else if (itemType != "MusicGenre") { html += '
  • Queue
  • '; } } diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js index 06aa5ab7b1..f4faa3f06f 100644 --- a/dashboard-ui/scripts/mediaplayer.js +++ b/dashboard-ui/scripts/mediaplayer.js @@ -58,10 +58,10 @@ var item = currentItem; var media = currentMediaElement; - + // Try to report playback stopped before the browser closes if (item && media && currentProgressInterval) { - + var endTime = currentMediaElement.currentTime; var position = Math.floor(10000000 * endTime) + startTimeTicksOffset; @@ -727,7 +727,7 @@ self.canPlay = function (item) { - if (item.Type == "MusicAlbum" || item.Type == "MusicArtist" || item.Type == "Artist") { + if (item.Type == "MusicAlbum" || item.Type == "MusicArtist" || item.Type == "Artist" || item.Type == "MusicGenre") { return true; } return self.canPlayMediaType(item.MediaType); @@ -796,7 +796,7 @@ } } else if ($.browser.msie && videoType) { - + self.playWithWarning(items, startPosition, user, "iewebmplugin", "Internet Explorer Playback", "For optimal video playback of Internet Explorer desktop edition, please install google's webm plugin for IE.

    https://tools.google.com/dlpage/webmmf"); return; @@ -936,12 +936,14 @@ $('.nowPlayingMediaInfo', nowPlayingBar).html(html); }; + var getItemFields = "MediaStreams,UserData,DisplayMediaType,Chapters,Path"; + self.getItemsForPlayback = function (query) { var userId = Dashboard.getCurrentUserId(); query.Limit = query.Limit || 100; - query.Fields = "MediaStreams,UserData,DisplayMediaType,SeriesInfo,AudioInfo,Chapters,Path"; + query.Fields = getItemFields; return ApiClient.getItems(userId, query); }; @@ -972,6 +974,66 @@ }; + self.playInstantMixFromSong = function (id) { + + ApiClient.getInstantMixFromSong(id, { + + UserId: Dashboard.getCurrentUserId(), + Fields: getItemFields, + Limit: 50 + + }).done(function (result) { + + self.play(result.Items); + }); + + }; + + self.playInstantMixFromAlbum = function (id) { + + ApiClient.getInstantMixFromAlbum(id, { + + UserId: Dashboard.getCurrentUserId(), + Fields: getItemFields, + Limit: 50 + + }).done(function (result) { + + self.play(result.Items); + }); + + }; + + self.playInstantMixFromArtist = function (name) { + + ApiClient.getInstantMixFromArtist(name, { + + UserId: Dashboard.getCurrentUserId(), + Fields: getItemFields, + Limit: 50 + + }).done(function (result) { + + self.play(result.Items); + }); + + }; + + self.playInstantMixFromMusicGenre = function (name) { + + ApiClient.getInstantMixFromMusicGenre(name, { + + UserId: Dashboard.getCurrentUserId(), + Fields: getItemFields, + Limit: 50 + + }).done(function (result) { + + self.play(result.Items); + }); + + }; + self.playArtist = function (artist) { self.getItemsForPlayback({ @@ -1039,7 +1101,7 @@ }); } }; - + self.previousTrack = function () { var newIndex = currentPlaylistIndex - 1; if (newIndex >= 0) { @@ -1124,7 +1186,7 @@ changeStream(position); }; - + self.mute = function () { currentMediaElement.volume = 0; }; diff --git a/packages.config b/packages.config index 8fdd0ef058..07f45e242f 100644 --- a/packages.config +++ b/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file