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 @@

+
+ ${HeaderViewOrder} +
+
+

${LabelSelectUserViewOrder}

+
+ +
+
+ +
+
+
${HeaderOtherDisplaySettings}
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