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