diff --git a/dashboard-ui/mypreferencesdisplay.html b/dashboard-ui/mypreferencesdisplay.html
index 1736be01ba..c101e4b87a 100644
--- a/dashboard-ui/mypreferencesdisplay.html
+++ b/dashboard-ui/mypreferencesdisplay.html
@@ -43,6 +43,19 @@
+
+
+
${LabelSelectUserViewOrder}
+
+
+
+
+
+
+
+
diff --git a/dashboard-ui/scripts/chromecast.js b/dashboard-ui/scripts/chromecast.js
index 0ef68f2b18..0c35b29a25 100644
--- a/dashboard-ui/scripts/chromecast.js
+++ b/dashboard-ui/scripts/chromecast.js
@@ -122,14 +122,12 @@
this.session = e;
if (this.session) {
- console.log('sessionListener');
+ console.log('sessionListener ' + JSON.stringify(e));
if (this.session.media[0]) {
this.onMediaDiscovered('activeSession', this.session.media[0]);
}
- console.log(JSON.stringify(e));
-
this.onSessionConnected(e);
}
};
@@ -273,6 +271,7 @@
serverAddress: ApiClient.serverAddress()
};
+ // If the user is on localhost we need a different address to send to the receiver
var address = message.serverAddress.toLowerCase();
if (address.indexOf('localhost') != -1 || address.indexOf('127.0.0') != -1) {
@@ -706,18 +705,29 @@
// Stop polling here
};
+ function getCurrentVolume() {
+ var state = self.lastPlayerData || {};
+ state = state.PlayState || {};
+
+ return state.VolumeLevel == null ? 100 : state.VolumeLevel;
+ }
+
self.volumeDown = function () {
- var vol = castPlayer.volumeLevel - 0.02;
- castPlayer.setReceiverVolume(false, vol / 100);
+
+ self.setVolume(getCurrentVolume() - 2);
};
self.volumeUp = function () {
- var vol = castPlayer.volumeLevel + 0.02;
- castPlayer.setReceiverVolume(false, vol / 100);
+
+ self.setVolume(getCurrentVolume() + 2);
};
self.setVolume = function (vol) {
- castPlayer.setReceiverVolume(false, vol / 100);
+
+ vol = Math.min(vol, 100);
+ vol = Math.max(vol, 0);
+
+ castPlayer.setReceiverVolume(false, (vol / 100));
};
self.getPlayerState = function () {
diff --git a/dashboard-ui/scripts/itembynamedetailpage.js b/dashboard-ui/scripts/itembynamedetailpage.js
index fc6e2c7cbe..0e2766d50f 100644
--- a/dashboard-ui/scripts/itembynamedetailpage.js
+++ b/dashboard-ui/scripts/itembynamedetailpage.js
@@ -11,21 +11,7 @@
return ApiClient.getItem(Dashboard.getCurrentUserId(), id);
}
- var name = getParameterByName('person');
-
- if (name) {
- return ApiClient.getPerson(name, Dashboard.getCurrentUserId());
- }
-
- name = getParameterByName('studio');
-
- if (name) {
-
- return ApiClient.getStudio(name, Dashboard.getCurrentUserId());
-
- }
-
- name = getParameterByName('genre');
+ var name = getParameterByName('genre');
if (name) {
return ApiClient.getGenre(name, Dashboard.getCurrentUserId());
diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js
index 9efbede67d..5a117af34d 100644
--- a/dashboard-ui/scripts/itemdetailpage.js
+++ b/dashboard-ui/scripts/itemdetailpage.js
@@ -1380,7 +1380,7 @@
if (cast.PrimaryImageTag) {
- imgUrl = ApiClient.getPersonImageUrl(cast.Name, {
+ imgUrl = ApiClient.getScaledImageUrl(cast.Id, {
width: 100,
tag: cast.PrimaryImageTag,
type: "primary"
diff --git a/dashboard-ui/scripts/itemgallery.js b/dashboard-ui/scripts/itemgallery.js
index 03b8d494d3..b7670c0b87 100644
--- a/dashboard-ui/scripts/itemgallery.js
+++ b/dashboard-ui/scripts/itemgallery.js
@@ -2,42 +2,11 @@
var currentItem;
- function getPromise() {
-
- var name = getParameterByName('person');
-
- if (name) {
- return ApiClient.getPerson(name, Dashboard.getCurrentUserId());
- }
-
- name = getParameterByName('studio');
-
- if (name) {
-
- return ApiClient.getStudio(name, Dashboard.getCurrentUserId());
-
- }
-
- name = getParameterByName('genre');
-
- if (name) {
- return ApiClient.getGenre(name, Dashboard.getCurrentUserId());
- }
-
- name = getParameterByName('musicartist');
-
- if (name) {
- return ApiClient.getArtist(name, Dashboard.getCurrentUserId());
- }
-
- return ApiClient.getItem(Dashboard.getCurrentUserId(), getParameterByName('id'));
- }
-
function reload(page) {
Dashboard.showLoadingMsg();
- getPromise().done(function (item) {
+ ApiClient.getItem(Dashboard.getCurrentUserId(), getParameterByName('id')).done(function (item) {
currentItem = item;
diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js
index 76da41e2bf..c02e55f969 100644
--- a/dashboard-ui/scripts/librarybrowser.js
+++ b/dashboard-ui/scripts/librarybrowser.js
@@ -2119,16 +2119,8 @@
url = "css/images/items/detail/video.png";
}
- var identifierName = "id";
- var identifierValue = item.Id;
-
- if (item.Type == "Person" || item.Type == "Genre" || item.Type == "Studio" || item.Type == "MusicArtist" || item.Type == "MusicGenre" || item.Type == "GameGenre") {
- identifierName = item.Type;
- identifierValue = ApiClient.encodeName(item.Name);
- }
-
if (!href) {
- href = "itemgallery.html?" + identifierName + "=" + identifierValue;
+ href = "itemgallery.html?id=" + item.Id;
}
var linkToGallery = LibraryBrowser.shouldDisplayGallery(item);
diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js
index 0c0466bc57..ad1d3d5088 100644
--- a/dashboard-ui/scripts/mediaplayer.js
+++ b/dashboard-ui/scripts/mediaplayer.js
@@ -847,19 +847,21 @@
if (item.Type == "MusicArtist") {
- promise = ApiClient.getInstantMixFromArtist(name, {
+ promise = ApiClient.getInstantMixFromArtist({
UserId: Dashboard.getCurrentUserId(),
Fields: getItemFields,
- Limit: 50
+ Limit: 50,
+ Id: id
});
}
else if (item.Type == "MusicGenre") {
- promise = ApiClient.getInstantMixFromMusicGenre(name, {
+ promise = ApiClient.getInstantMixFromMusicGenre({
UserId: Dashboard.getCurrentUserId(),
Fields: getItemFields,
- Limit: 50
+ Limit: 50,
+ Id: id
});
}
diff --git a/dashboard-ui/scripts/metadataimagespage.js b/dashboard-ui/scripts/metadataimagespage.js
index c405bc064d..bf1f144da3 100644
--- a/dashboard-ui/scripts/metadataimagespage.js
+++ b/dashboard-ui/scripts/metadataimagespage.js
@@ -367,31 +367,25 @@
var plugin = plugins[i];
- if (i > 0) {
- html += '';
+ html += '';
+ if (i > 0) {
html += '' + plugin.Name + '';
html += '' + Globalize.translate('ButtonUp') + '';
-
- html += '';
}
else if (plugins.length > 1) {
- html += '';
html += '' + plugin.Name + '';
html += '' + Globalize.translate('ButtonDown') + '';
-
- html += '';
}
else {
- html += '';
html += plugin.Name;
- html += '';
}
+ html += '';
}
html += '';
diff --git a/dashboard-ui/scripts/mypreferencesdisplay.js b/dashboard-ui/scripts/mypreferencesdisplay.js
index 608b435ba0..d8966bc376 100644
--- a/dashboard-ui/scripts/mypreferencesdisplay.js
+++ b/dashboard-ui/scripts/mypreferencesdisplay.js
@@ -1,6 +1,101 @@
(function ($, window, document) {
- function loadForm(page, user) {
+ function renderViews(page, user, result) {
+
+ var folderHtml = '';
+
+ folderHtml += '';
+ folderHtml += result.Items.map(function (i) {
+
+ var currentHtml = '';
+
+ var id = 'chkGroupFolder' + i.Id;
+
+ currentHtml += '';
+
+ var isChecked = user.Configuration.ExcludeFoldersFromGrouping.indexOf(i.Id) == -1;
+ var checkedHtml = isChecked ? ' checked="checked"' : '';
+
+ currentHtml += '';
+
+ return currentHtml;
+
+ }).join('');
+
+ folderHtml += '
';
+
+ $('.folderGroupList', page).html(folderHtml).trigger('create');
+ }
+
+ function renderChannels(page, user, result) {
+
+ var folderHtml = '';
+
+ folderHtml += '';
+ folderHtml += result.Items.map(function (i) {
+
+ var currentHtml = '';
+
+ var id = 'chkGroupChannel' + i.Id;
+
+ currentHtml += '';
+
+ var isChecked = user.Configuration.DisplayChannelsWithinViews.indexOf(i.Id) != -1;
+ var checkedHtml = isChecked ? ' checked="checked"' : '';
+
+ currentHtml += '';
+
+ return currentHtml;
+
+ }).join('');
+
+ folderHtml += '
';
+
+ $('.channelGroupList', page).html(folderHtml).trigger('create');
+ }
+
+ function renderViewOrder(page, user, result) {
+
+ var html = '';
+
+ html += '';
+
+ $('.viewOrderList', page).html(html).trigger('create');
+ }
+
+ function loadForm(page, user, hideMsg) {
$('#chkDisplayMissingEpisodes', page).checked(user.Configuration.DisplayMissingEpisodes || false).checkboxradio("refresh");
$('#chkDisplayUnairedEpisodes', page).checked(user.Configuration.DisplayUnairedEpisodes || false).checkboxradio("refresh");
@@ -9,66 +104,24 @@
$('#chkDisplayCollectionView', page).checked(user.Configuration.DisplayCollectionsView || false).checkboxradio("refresh");
$('#chkDisplayFolderView', page).checked(user.Configuration.DisplayFoldersView || false).checkboxradio("refresh");
- ApiClient.getItems(user.Id, {}).done(function (result) {
-
- var folderHtml = '';
-
- folderHtml += '';
- folderHtml += result.Items.map(function (i) {
-
- var currentHtml = '';
-
- var id = 'chkGroupFolder' + i.Id;
-
- currentHtml += '';
-
- var isChecked = user.Configuration.ExcludeFoldersFromGrouping.indexOf(i.Id) == -1;
- var checkedHtml = isChecked ? ' checked="checked"' : '';
-
- currentHtml += '';
-
- return currentHtml;
-
- }).join('');
-
- folderHtml += '
';
-
- $('.folderGroupList', page).html(folderHtml).trigger('create');
-
- Dashboard.hideLoadingMsg();
+ var promise1 = ApiClient.getItems(user.Id, {
+ sortBy: "SortName"
});
-
- ApiClient.getJSON(ApiClient.getUrl("Channels", {
-
+ var promise2 = ApiClient.getJSON(ApiClient.getUrl("Channels", {
UserId: user.Id
+ }));
+ var promise3 = ApiClient.getUserViews(user.Id);
- })).done(function (result) {
+ $.when(promise1, promise2, promise3).done(function (r1, r2, r3) {
- var folderHtml = '';
+ renderViews(page, user, r1[0]);
+ renderChannels(page, user, r2[0]);
+ renderViewOrder(page, user, r3[0]);
- folderHtml += '';
- folderHtml += result.Items.map(function (i) {
-
- var currentHtml = '';
-
- var id = 'chkGroupChannel' + i.Id;
-
- currentHtml += '';
-
- var isChecked = user.Configuration.DisplayChannelsWithinViews.indexOf(i.Id) != -1;
- var checkedHtml = isChecked ? ' checked="checked"' : '';
-
- currentHtml += '';
-
- return currentHtml;
-
- }).join('');
-
- folderHtml += '
';
-
- $('.channelGroupList', page).html(folderHtml).trigger('create');
+ if (hideMsg !== false) {
+ Dashboard.hideLoadingMsg();
+ }
});
-
}
function saveUser(page, user) {
@@ -90,8 +143,16 @@
return i.getAttribute('data-channelid');
});
+ user.Configuration.OrderedViews = $(".viewItem", page).get().map(function (i) {
+
+ return i.getAttribute('data-viewid');
+ });
+
ApiClient.updateUser(user).done(function () {
Dashboard.alert(Globalize.translate('SettingsSaved'));
+
+ loadForm(page, user, false);
+
});
}
@@ -103,9 +164,9 @@
var userId = getParameterByName('userId') || Dashboard.getCurrentUserId();
- ApiClient.getUser(userId).done(function (result) {
+ ApiClient.getUser(userId).done(function (user) {
- saveUser(page, result);
+ saveUser(page, user);
});
@@ -118,6 +179,37 @@
var page = this;
+ $('.viewOrderList', page).on('click', '.btnViewItemMove', function () {
+
+ var li = $(this).parents('.viewItem');
+ var ul = li.parents('ul');
+
+ if ($(this).hasClass('btnViewItemDown')) {
+
+ var next = li.next();
+
+ li.remove().insertAfter(next);
+
+ } else {
+
+ var prev = li.prev();
+
+ li.remove().insertBefore(prev);
+ }
+
+ $('.viewItem', ul).each(function () {
+
+ if ($(this).prev('.viewItem').length) {
+ $('.btnViewItemMove', this).addClass('btnViewItemUp').removeClass('btnViewItemDown').attr('data-icon', 'arrow-u').removeClass('ui-icon-arrow-d').addClass('ui-icon-arrow-u');
+ } else {
+ $('.btnViewItemMove', this).addClass('btnViewItemDown').removeClass('btnViewItemUp').attr('data-icon', 'arrow-d').removeClass('ui-icon-arrow-u').addClass('ui-icon-arrow-d');
+ }
+
+ });
+
+ ul.listview('destroy').listview({});
+ });
+
}).on('pageshow', "#displayPreferencesPage", function () {
var page = this;
diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js
index cc85abba67..e28badfe1e 100644
--- a/dashboard-ui/scripts/site.js
+++ b/dashboard-ui/scripts/site.js
@@ -891,22 +891,22 @@ var Dashboard = {
var type = (cmd.ItemType || "").toLowerCase();
if (type == "genre") {
- url = "itembynamedetails.html?genre=" + ApiClient.encodeName(cmd.ItemName);
+ url = "itembynamedetails.html?id=" + cmd.ItemId;
}
else if (type == "musicgenre") {
- url = "itembynamedetails.html?musicgenre=" + ApiClient.encodeName(cmd.ItemName);
+ url = "itembynamedetails.html?id=" + cmd.ItemId;
}
else if (type == "gamegenre") {
- url = "itembynamedetails.html?gamegenre=" + ApiClient.encodeName(cmd.ItemName);
+ url = "itembynamedetails.html?id=" + cmd.ItemId;
}
else if (type == "studio") {
- url = "itembynamedetails.html?studio=" + ApiClient.encodeName(cmd.ItemName);
+ url = "itembynamedetails.html?id=" + cmd.ItemId;
}
else if (type == "person") {
- url = "itembynamedetails.html?person=" + ApiClient.encodeName(cmd.ItemName);
+ url = "itembynamedetails.html?id=" + cmd.ItemId;
}
else if (type == "musicartist") {
- url = "itembynamedetails.html?musicartist=" + ApiClient.encodeName(cmd.ItemName);
+ url = "itembynamedetails.html?id=" + cmd.ItemId;
}
if (url) {
diff --git a/dashboard-ui/thirdparty/mediabrowser.apiclient.js b/dashboard-ui/thirdparty/mediabrowser.apiclient.js
index 893fb5fc28..1e22291559 100644
--- a/dashboard-ui/thirdparty/mediabrowser.apiclient.js
+++ b/dashboard-ui/thirdparty/mediabrowser.apiclient.js
@@ -912,9 +912,9 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
});
};
- self.getInstantMixFromArtist = function (name, options) {
+ self.getInstantMixFromArtist = function (options) {
- var url = self.getUrl("Artists/" + self.encodeName(name) + "/InstantMix", options);
+ var url = self.getUrl("Artists/InstantMix", options);
return self.ajax({
type: "GET",
@@ -923,9 +923,9 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
});
};
- self.getInstantMixFromMusicGenre = function (name, options) {
+ self.getInstantMixFromMusicGenre = function (options) {
- var url = self.getUrl("MusicGenres/" + self.encodeName(name) + "/InstantMix", options);
+ var url = self.getUrl("MusicGenres/InstantMix", options);
return self.ajax({
type: "GET",
@@ -2059,30 +2059,6 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
});
};
- /**
- * Gets a year
- */
- self.getYear = function (yea, userId) {
-
- if (!name) {
- throw new Error("null name");
- }
-
- var options = {};
-
- if (userId) {
- options.userId = userId;
- }
-
- var url = self.getUrl("Years/" + self.encodeName(name), options);
-
- return self.ajax({
- type: "GET",
- url: url,
- dataType: "json"
- });
- };
-
/**
* Gets a Person
*/
@@ -2210,43 +2186,6 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
return self.getUrl(url, options);
};
- /**
- * Constructs a url for a person image
- * @param {String} name
- * @param {Object} options
- * Options supports the following properties:
- * width - download the image at a fixed width
- * height - download the image at a fixed height
- * maxWidth - download the image at a maxWidth
- * maxHeight - download the image at a maxHeight
- * quality - A scale of 0-100. This should almost always be omitted as the default will suffice.
- * For best results do not specify both width and height together, as aspect ratio might be altered.
- */
- self.getPersonImageUrl = function (name, options) {
-
- if (!name) {
- throw new Error("null name");
- }
-
- options = options || {
-
- };
-
- var url = "Persons/" + self.encodeName(name) + "/Images/" + options.type;
-
- if (options.index != null) {
- url += "/" + options.index;
- }
-
- normalizeImageOptions(options);
-
- // Don't put these on the query string
- delete options.type;
- delete options.index;
-
- return self.getUrl(url, options);
- };
-
/**
* Constructs a url for an item image
* @param {String} itemId