diff --git a/ApiClient.js b/ApiClient.js index 375aacbce6..97c26ec78a 100644 --- a/ApiClient.js +++ b/ApiClient.js @@ -1300,7 +1300,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi }; /** - * Gets the virtual folder for a view. Specify a userId to get a user view, or omit for the default view. + * Gets the virtual folder list */ self.getVirtualFolders = function (userId) { @@ -1477,16 +1477,16 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi }; /** - * Removes a virtual folder from either the default view or a user view + * Removes a virtual folder * @param {String} name */ - self.removeVirtualFolder = function (name, userId, refreshLibrary) { + self.removeVirtualFolder = function (name, refreshLibrary) { if (!name) { throw new Error("null name"); } - var url = userId ? "Users/" + userId + "/VirtualFolders" : "Library/VirtualFolders"; + var url = "Library/VirtualFolders"; url = self.getUrl(url, { refreshLibrary: refreshLibrary ? true : false, @@ -1500,10 +1500,10 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi }; /** - * Adds a virtual folder to either the default view or a user view + * Adds a virtual folder * @param {String} name */ - self.addVirtualFolder = function (name, type, userId, refreshLibrary) { + self.addVirtualFolder = function (name, type, refreshLibrary) { if (!name) { throw new Error("null name"); @@ -1518,7 +1518,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi options.refreshLibrary = refreshLibrary ? true : false; options.name = name; - var url = userId ? "Users/" + userId + "/VirtualFolders" : "Library/VirtualFolders"; + var url = "Library/VirtualFolders"; url = self.getUrl(url, options); @@ -1529,18 +1529,16 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi }; /** - * Renames a virtual folder, within either the default view or a user view + * Renames a virtual folder * @param {String} name */ - self.renameVirtualFolder = function (name, newName, userId, refreshLibrary) { + self.renameVirtualFolder = function (name, newName, refreshLibrary) { if (!name) { throw new Error("null name"); } - var url = userId ? "Users/" + userId + "/VirtualFolders" : "Library/VirtualFolders"; - - url += "/Name"; + var url = "Library/VirtualFolders/Name"; url = self.getUrl(url, { refreshLibrary: refreshLibrary ? true : false, @@ -1555,10 +1553,10 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi }; /** - * Adds an additional mediaPath to an existing virtual folder, within either the default view or a user view + * Adds an additional mediaPath to an existing virtual folder * @param {String} name */ - self.addMediaPath = function (virtualFolderName, mediaPath, userId, refreshLibrary) { + self.addMediaPath = function (virtualFolderName, mediaPath, refreshLibrary) { if (!virtualFolderName) { throw new Error("null virtualFolderName"); @@ -1568,9 +1566,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi throw new Error("null mediaPath"); } - var url = userId ? "Users/" + userId + "/VirtualFolders" : "Library/VirtualFolders"; - - url += "/Paths"; + var url = "Library/VirtualFolders/Paths"; url = self.getUrl(url, { refreshLibrary: refreshLibrary ? true : false, @@ -1585,10 +1581,10 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi }; /** - * Removes a media path from a virtual folder, within either the default view or a user view + * Removes a media path from a virtual folder * @param {String} name */ - self.removeMediaPath = function (virtualFolderName, mediaPath, userId, refreshLibrary) { + self.removeMediaPath = function (virtualFolderName, mediaPath, refreshLibrary) { if (!virtualFolderName) { throw new Error("null virtualFolderName"); @@ -1598,9 +1594,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi throw new Error("null mediaPath"); } - var url = userId ? "Users/" + userId + "/VirtualFolders" : "Library/VirtualFolders"; - - url += "/Paths"; + var url = "Library/VirtualFolders/Paths"; url = self.getUrl(url, { refreshLibrary: refreshLibrary ? true : false, diff --git a/dashboard-ui/library.html b/dashboard-ui/library.html index 7307a2850c..7276ad89f3 100644 --- a/dashboard-ui/library.html +++ b/dashboard-ui/library.html @@ -9,19 +9,11 @@
-

- - -

-

Refer to the media library wiki. for suggested folder structures.

diff --git a/dashboard-ui/librarypathmapping.html b/dashboard-ui/librarypathmapping.html index 03d465f385..8a0ee4f0de 100644 --- a/dashboard-ui/librarypathmapping.html +++ b/dashboard-ui/librarypathmapping.html @@ -9,7 +9,7 @@

diff --git a/dashboard-ui/librarysettings.html b/dashboard-ui/librarysettings.html index 299b6d34d3..d8cc11b8e2 100644 --- a/dashboard-ui/librarysettings.html +++ b/dashboard-ui/librarysettings.html @@ -9,7 +9,7 @@
diff --git a/dashboard-ui/login.html b/dashboard-ui/login.html index 2af6db5c69..b375636c17 100644 --- a/dashboard-ui/login.html +++ b/dashboard-ui/login.html @@ -27,9 +27,9 @@
diff --git a/dashboard-ui/scripts/edititemmetadata.js b/dashboard-ui/scripts/edititemmetadata.js index 30f789b299..fdc151581d 100644 --- a/dashboard-ui/scripts/edititemmetadata.js +++ b/dashboard-ui/scripts/edititemmetadata.js @@ -69,21 +69,25 @@ function loadChildrenOfRootNode(callback) { - - var promise1 = ApiClient.getRootFolder(Dashboard.getCurrentUserId()); + var promise1 = $.getJSON(ApiClient.getUrl("Library/MediaFolders")); var promise2 = ApiClient.getLiveTvInfo(); $.when(promise1, promise2).done(function (response1, response2) { - var rootFolder = response1[0]; + var mediaFolders = response1[0].Items; var liveTvInfo = response2[0]; var nodes = []; - nodes.push(getNode(rootFolder, 'open')); + var i, length; - for (var i = 0, length = liveTvInfo.Services.length; i < length; i++) { + for (i = 0, length = mediaFolders.length; i < length; i++) { + + nodes.push(getNode(mediaFolders[i], 'closed')); + } + + for (i = 0, length = liveTvInfo.Services.length; i < length; i++) { var service = liveTvInfo.Services[i]; diff --git a/dashboard-ui/scripts/itemlistpage.js b/dashboard-ui/scripts/itemlistpage.js index feab5d30ca..f9c0cd1318 100644 --- a/dashboard-ui/scripts/itemlistpage.js +++ b/dashboard-ui/scripts/itemlistpage.js @@ -97,7 +97,7 @@ Dashboard.getCurrentUser().done(function (user) { - if (user.Configuration.IsAdministrator) { + if (user.Configuration.IsAdministrator && query.ParentId) { $('#editButtonContainer', page).show(); } else { $('#editButtonContainer', page).hide(); diff --git a/dashboard-ui/scripts/loginpage.js b/dashboard-ui/scripts/loginpage.js index 8512009c4e..736c9f8a6c 100644 --- a/dashboard-ui/scripts/loginpage.js +++ b/dashboard-ui/scripts/loginpage.js @@ -1,10 +1,19 @@ var LoginPage = { onPageShow: function () { + Dashboard.showLoadingMsg(); + var isLocalhost = window.location.toString().toLowerCase().indexOf('localhost') != -1; + + if (isLocalhost) { + $('.localhostMessage', this).show(); + } else { + $('.localhostMessage', this).hide(); + } + // Show all users on localhost - var promise1 = window.location.toString().toLowerCase().indexOf('localhost') == -1 ? ApiClient.getPublicUsers() : ApiClient.getUsers({ IsDisabled: false }); + var promise1 = !isLocalhost ? ApiClient.getPublicUsers() : ApiClient.getUsers({ IsDisabled: false }); var promise2 = ApiClient.getServerConfiguration(); $.when(promise1, promise2).done(function (response1, response2) { diff --git a/dashboard-ui/scripts/medialibrarypage.js b/dashboard-ui/scripts/medialibrarypage.js index 6280b2c7e6..0ebff6a68f 100644 --- a/dashboard-ui/scripts/medialibrarypage.js +++ b/dashboard-ui/scripts/medialibrarypage.js @@ -5,84 +5,20 @@ var page = this; MediaLibraryPage.lastVirtualFolderName = ""; - MediaLibraryPage.reloadUsers(page); - - $('#selectUser', page).on('change.reloadLibrary', function() { - - MediaLibraryPage.reloadLibrary(page); - - }); + MediaLibraryPage.reloadLibrary(page); }, - onPageHide: function() { - - var page = this; - $('#selectUser', page).off('click.reloadLibrary'); - }, - - reloadUsers: function (page) { - - ApiClient.getUsers().done(function (users) { - - - var html = users.map(function (u) { - - return ''; - - }); - - html = '' + html; - - $('#selectUser', page).html(html).val('').selectmenu('refresh'); - - MediaLibraryPage.reloadLibrary(page); - }); - }, - - getCurrentUserId: function(page) { - - return $('#selectUser', page).val(); - }, - reloadLibrary: function (page) { Dashboard.showLoadingMsg(); - var userId = MediaLibraryPage.getCurrentUserId(page); + ApiClient.getVirtualFolders().done(function (result) { + MediaLibraryPage.reloadVirtualFolders(page, result); + }); - if (userId) { - - ApiClient.getUser(userId).done(function (user) { - - $('#fldUseDefaultLibrary', page).show(); - - $('#chkUseDefaultLibrary', page).checked(!user.Configuration.UseCustomLibrary).checkboxradio("refresh"); - - if (user.Configuration.UseCustomLibrary) { - - ApiClient.getVirtualFolders(userId).done(function (result) { - MediaLibraryPage.reloadVirtualFolders(page, result); - }); - - $(".editing_default", page).hide(); - $('#divMediaLibrary', page).show(); - } else { - $('#divMediaLibrary', page).hide(); - Dashboard.hideLoadingMsg(); - } - - }); - - } else { - - ApiClient.getVirtualFolders().done(function (result) { - MediaLibraryPage.reloadVirtualFolders(page, result); - }); - - $('#fldUseDefaultLibrary', page).hide(); - $('#divMediaLibrary', page).show(); - Dashboard.setPageTitle("Media Library"); - } + $('#fldUseDefaultLibrary', page).hide(); + $('#divMediaLibrary', page).show(); + Dashboard.setPageTitle("Media Library"); }, shouldRefreshLibraryAfterChanges: function () { @@ -152,14 +88,14 @@ var location = virtualFolder.Locations[i]; html += '
  • '; - html += '' + location + ''; + html += '' + location + ''; html += ''; html += '
  • '; } html += ''; if (addPathMappingInfo) { - html += '

    Use path substitution to map server paths to network shares that clients are able to access.

    '; + html += '

    Optional: Path substitution can map server paths to network shares that clients can access for direct playback.

    '; } html += '

    '; @@ -173,38 +109,17 @@ return html; }, - setUseDefaultMediaLibrary: function (useDefaultLibrary) { - - Dashboard.showLoadingMsg(); - - var page = $.mobile.activePage; - var userId = MediaLibraryPage.getCurrentUserId(page); - - ApiClient.getUser(userId).done(function (user) { - - user.Configuration.UseCustomLibrary = !useDefaultLibrary; - - ApiClient.updateUser(user).done(function () { - MediaLibraryPage.reloadLibrary(page); - }); - - $(".editing_default", page).hide(); - }); - }, - addVirtualFolder: function () { $('.collectionTypeFieldDescription').show(); MediaLibraryPage.getTextValue("Add Media Folder", "Name (Movies, Music, TV, etc):", "", true, function (name, type) { - var userId = MediaLibraryPage.getCurrentUserId($.mobile.activePage); - MediaLibraryPage.lastVirtualFolderName = name; var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); - ApiClient.addVirtualFolder(name, type, userId, refreshAfterChange).done(MediaLibraryPage.processOperationResult); + ApiClient.addVirtualFolder(name, type, refreshAfterChange).done(MediaLibraryPage.processOperationResult); }); }, @@ -219,11 +134,9 @@ MediaLibraryPage.lastVirtualFolderName = virtualFolder.Name; - var userId = MediaLibraryPage.getCurrentUserId($.mobile.activePage); - var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); - ApiClient.addMediaPath(virtualFolder.Name, path, userId, refreshAfterChange).done(MediaLibraryPage.processOperationResult); + ApiClient.addMediaPath(virtualFolder.Name, path, refreshAfterChange).done(MediaLibraryPage.processOperationResult); } }); @@ -336,11 +249,9 @@ if (virtualFolder.Name != newName) { - var userId = MediaLibraryPage.getCurrentUserId($.mobile.activePage); - var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); - ApiClient.renameVirtualFolder(virtualFolder.Name, newName, userId, refreshAfterChange).done(MediaLibraryPage.processOperationResult); + ApiClient.renameVirtualFolder(virtualFolder.Name, newName, refreshAfterChange).done(MediaLibraryPage.processOperationResult); } }); }, @@ -369,11 +280,9 @@ if (confirmResult) { - var userId = MediaLibraryPage.getCurrentUserId($.mobile.activePage); - var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); - ApiClient.removeVirtualFolder(virtualFolder.Name, userId, refreshAfterChange).done(MediaLibraryPage.processOperationResult); + ApiClient.removeVirtualFolder(virtualFolder.Name, refreshAfterChange).done(MediaLibraryPage.processOperationResult); } }); @@ -394,11 +303,9 @@ if (confirmResult) { - var userId = MediaLibraryPage.getCurrentUserId($.mobile.activePage); - var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); - ApiClient.removeMediaPath(virtualFolder.Name, location, userId, refreshAfterChange).done(MediaLibraryPage.processOperationResult); + ApiClient.removeMediaPath(virtualFolder.Name, location, refreshAfterChange).done(MediaLibraryPage.processOperationResult); } }); }, @@ -419,4 +326,4 @@ } }; -$(document).on('pageshow', ".mediaLibraryPage", MediaLibraryPage.onPageShow).on('pagehide', ".mediaLibraryPage", MediaLibraryPage.onPageHide); \ No newline at end of file +$(document).on('pageshow', ".mediaLibraryPage", MediaLibraryPage.onPageShow); \ No newline at end of file diff --git a/dashboard-ui/scripts/userparentalcontrol.js b/dashboard-ui/scripts/userparentalcontrol.js index b6f2e6b772..c6752e3ba6 100644 --- a/dashboard-ui/scripts/userparentalcontrol.js +++ b/dashboard-ui/scripts/userparentalcontrol.js @@ -38,10 +38,37 @@ $('#selectMaxParentalRating', page).html(html).selectmenu("refresh"); } - function loadUser(page, user, loggedInUser, allParentalRatings) { + function loadMediaFolders(page, user, mediaFolders) { + + var html = ''; + + html += '

    '; + + html += 'Media Folders'; + + for (var i = 0, length = mediaFolders.length; i < length; i++) { + + var folder = mediaFolders[i]; + + var id = 'mediaFolder' + i; + + var checkedAttribute = user.Configuration.BlockedMediaFolders.indexOf(folder.Name) == -1 ? ' checked="checked"' : ''; + + html += ''; + html += ''; + } + + html += '
    '; + + $('.libraryAccess', page).html(html).trigger('create'); + } + + function loadUser(page, user, loggedInUser, allParentalRatings, mediaFolders) { Dashboard.setPageTitle(user.Name); + loadMediaFolders(page, user, mediaFolders); + populateRatings(allParentalRatings, page); var ratingValue = ""; @@ -61,7 +88,7 @@ $('#selectMaxParentalRating', page).val(ratingValue).selectmenu("refresh"); $('#chkBlockNotRated', page).checked(user.Configuration.BlockNotRated || false).checkboxradio("refresh"); - + $('#chkHideUnratedMovies', page).checked(user.Configuration.BlockUnratedMovies || false).checkboxradio("refresh"); $('#chkHideUnratedTrailers', page).checked(user.Configuration.BlockUnratedTrailers || false).checkboxradio("refresh"); $('#chkHideUnratedSeries', page).checked(user.Configuration.BlockUnratedSeries || false).checkboxradio("refresh"); @@ -94,6 +121,12 @@ user.Configuration.BlockUnratedGames = $('#chkHideUnratedGames', page).checked(); user.Configuration.BlockUnratedBooks = $('#chkHideUnratedBooks', page).checked(); + user.Configuration.BlockedMediaFolders = $('.chkMediaFolder:not(:checked)', page).map(function () { + + return this.getAttribute('data-foldername'); + + }).get(); + ApiClient.updateUser(user).done(function () { onSaveComplete(page); }); @@ -146,9 +179,11 @@ var promise3 = ApiClient.getParentalRatings(); - $.when(promise1, promise2, promise3).done(function (response1, response2, response3) { + var promise4 = $.getJSON(ApiClient.getUrl("Library/MediaFolders")); - loadUser(page, response1[0] || response1, response2[0], response3[0]); + $.when(promise1, promise2, promise3, promise4).done(function (response1, response2, response3, response4) { + + loadUser(page, response1[0] || response1, response2[0], response3[0], response4[0].Items); }); }); diff --git a/dashboard-ui/useredit.html b/dashboard-ui/useredit.html index 0b627558a2..3e1f718c19 100644 --- a/dashboard-ui/useredit.html +++ b/dashboard-ui/useredit.html @@ -11,7 +11,7 @@ diff --git a/dashboard-ui/userimage.html b/dashboard-ui/userimage.html index 753d5c07e5..141c222a8d 100644 --- a/dashboard-ui/userimage.html +++ b/dashboard-ui/userimage.html @@ -11,7 +11,7 @@ diff --git a/dashboard-ui/userparentalcontrol.html b/dashboard-ui/userparentalcontrol.html index 01c6fb9fed..fcd75d1af8 100644 --- a/dashboard-ui/userparentalcontrol.html +++ b/dashboard-ui/userparentalcontrol.html @@ -11,17 +11,23 @@
    - +
    +
    +
    +
    Select the media folders to share with this user. Administrators will be able to edit all folders using the metadata manager.
    +
    +
    +
    • - +
      Content with a higher rating will be hidden from this user.
    diff --git a/dashboard-ui/userpassword.html b/dashboard-ui/userpassword.html index fcff11c393..7f4a78e2d5 100644 --- a/dashboard-ui/userpassword.html +++ b/dashboard-ui/userpassword.html @@ -11,7 +11,7 @@ diff --git a/dashboard-ui/usersettings.html b/dashboard-ui/usersettings.html index 237895bc18..a7b3c6e627 100644 --- a/dashboard-ui/usersettings.html +++ b/dashboard-ui/usersettings.html @@ -11,7 +11,7 @@ diff --git a/packages.config b/packages.config index 4957f35637..0bdea523e3 100644 --- a/packages.config +++ b/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file