diff --git a/ApiClient.js b/ApiClient.js index 29bfb1068f..e9679c3f04 100644 --- a/ApiClient.js +++ b/ApiClient.js @@ -910,7 +910,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { * Removes a virtual folder from either the default view or a user view * @param {String} name */ - self.removeVirtualFolder = function (name, userId) { + self.removeVirtualFolder = function (name, userId, refreshLibrary) { if (!name) { throw new Error("null name"); @@ -919,7 +919,10 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { var url = userId ? "Users/" + userId + "/VirtualFolders" : "Library/VirtualFolders"; url += "/" + name; - url = self.getUrl(url); + + url = self.getUrl(url, { + refreshLibrary: refreshLibrary ? true : false + }); return self.ajax({ type: "DELETE", @@ -931,7 +934,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { * Adds a virtual folder to either the default view or a user view * @param {String} name */ - self.addVirtualFolder = function (name, type, userId) { + self.addVirtualFolder = function (name, type, userId, refreshLibrary) { if (!name) { throw new Error("null name"); @@ -943,6 +946,8 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { options.collectionType = type; } + options.refreshLibrary = refreshLibrary ? true : false; + var url = userId ? "Users/" + userId + "/VirtualFolders" : "Library/VirtualFolders"; url += "/" + name; @@ -958,7 +963,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { * Renames a virtual folder, within either the default view or a user view * @param {String} name */ - self.renameVirtualFolder = function (name, newName, userId) { + self.renameVirtualFolder = function (name, newName, userId, refreshLibrary) { if (!name) { throw new Error("null name"); @@ -968,7 +973,10 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { url += "/" + name + "/Name"; - url = self.getUrl(url, { newName: newName }); + url = self.getUrl(url, { + refreshLibrary: refreshLibrary ? true : false, + newName: newName + }); return self.ajax({ type: "POST", @@ -980,7 +988,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { * Adds an additional mediaPath to an existing virtual folder, within either the default view or a user view * @param {String} name */ - self.addMediaPath = function (virtualFolderName, mediaPath, userId) { + self.addMediaPath = function (virtualFolderName, mediaPath, userId, refreshLibrary) { if (!virtualFolderName) { throw new Error("null virtualFolderName"); @@ -994,7 +1002,11 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { url += "/" + virtualFolderName + "/Paths"; - url = self.getUrl(url, { path: mediaPath }); + url = self.getUrl(url, { + + refreshLibrary: refreshLibrary ? true : false, + path: mediaPath + }); return self.ajax({ type: "POST", @@ -1006,7 +1018,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { * Removes a media path from a virtual folder, within either the default view or a user view * @param {String} name */ - self.removeMediaPath = function (virtualFolderName, mediaPath, userId) { + self.removeMediaPath = function (virtualFolderName, mediaPath, userId, refreshLibrary) { if (!virtualFolderName) { throw new Error("null virtualFolderName"); @@ -1020,7 +1032,11 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { url += "/" + virtualFolderName + "/Paths"; - url = self.getUrl(url, { path: mediaPath }); + url = self.getUrl(url, { + + refreshLibrary: refreshLibrary ? true : false, + path: mediaPath + }); return self.ajax({ type: "DELETE", diff --git a/dashboard-ui/scripts/medialibrarypage.js b/dashboard-ui/scripts/medialibrarypage.js index 6b795dc53c..1e797cf426 100644 --- a/dashboard-ui/scripts/medialibrarypage.js +++ b/dashboard-ui/scripts/medialibrarypage.js @@ -55,6 +55,11 @@ } }, + shouldRefreshLibraryAfterChanges: function () { + + return $($.mobile.activePage).is('#mediaLibraryPage'); + }, + reloadVirtualFolders: function (page, virtualFolders) { if (virtualFolders) { @@ -86,7 +91,7 @@ html += '

' + virtualFolder.Name + '

'; - var typeName = MediaLibraryPage.getCollectionTypeOptions().filter(function(t) { + var typeName = MediaLibraryPage.getCollectionTypeOptions().filter(function (t) { return t.value == virtualFolder.CollectionType; @@ -151,7 +156,9 @@ MediaLibraryPage.lastVirtualFolderName = name; - ApiClient.addVirtualFolder(name, type, userId).done(MediaLibraryPage.processOperationResult); + var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); + + ApiClient.addVirtualFolder(name, type, userId, refreshAfterChange).done(MediaLibraryPage.processOperationResult); }); }, @@ -168,7 +175,9 @@ var userId = getParameterByName("userId"); - ApiClient.addMediaPath(virtualFolder.Name, path, userId).done(MediaLibraryPage.processOperationResult); + var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); + + ApiClient.addMediaPath(virtualFolder.Name, path, userId, refreshAfterChange).done(MediaLibraryPage.processOperationResult); } }); @@ -269,7 +278,9 @@ var userId = getParameterByName("userId"); - ApiClient.renameVirtualFolder(virtualFolder.Name, newName, userId).done(MediaLibraryPage.processOperationResult); + var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); + + ApiClient.renameVirtualFolder(virtualFolder.Name, newName, userId, refreshAfterChange).done(MediaLibraryPage.processOperationResult); } }); }, @@ -300,7 +311,9 @@ var userId = getParameterByName("userId"); - ApiClient.removeVirtualFolder(virtualFolder.Name, userId).done(MediaLibraryPage.processOperationResult); + var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); + + ApiClient.removeVirtualFolder(virtualFolder.Name, userId, refreshAfterChange).done(MediaLibraryPage.processOperationResult); } }); @@ -323,7 +336,9 @@ var userId = getParameterByName("userId"); - ApiClient.removeMediaPath(virtualFolder.Name, location, userId).done(MediaLibraryPage.processOperationResult); + var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); + + ApiClient.removeMediaPath(virtualFolder.Name, location, userId, refreshAfterChange).done(MediaLibraryPage.processOperationResult); } }); }, diff --git a/dashboard-ui/scripts/userprofilespage.js b/dashboard-ui/scripts/userprofilespage.js index 7e160987c7..5a8dd869ed 100644 --- a/dashboard-ui/scripts/userprofilespage.js +++ b/dashboard-ui/scripts/userprofilespage.js @@ -22,7 +22,7 @@ html += "
  • "; - html += ""; + html += ""; if (user.PrimaryImageTag) { diff --git a/dashboard-ui/scripts/wizardsettings.js b/dashboard-ui/scripts/wizardsettings.js new file mode 100644 index 0000000000..a2ad29e554 --- /dev/null +++ b/dashboard-ui/scripts/wizardsettings.js @@ -0,0 +1,56 @@ +(function ($, document) { + + function save(page) { + + Dashboard.showLoadingMsg(); + + ApiClient.getScheduledTasks().done(function (tasks) { + + var chapterTask = tasks.filter(function (t) { + return t.Name.toLowerCase() == 'chapter image extraction'; + })[0]; + + if (!chapterTask) { + throw new Error('Cannot find chapter scheduled task'); + } + + // First update the chapters scheduled task + var triggers = $('#chkChapters', page).checked() ? [{ + "Type": "DailyTrigger", + "TimeOfDayTicks": 144000000000 + }] : []; + + ApiClient.updateScheduledTaskTriggers(chapterTask.Id, triggers).done(function () { + + + // After saving chapter task, now save server config + ApiClient.getServerConfiguration().done(function (config) { + + config.SaveLocalMeta = $('#chkSaveLocalMetadata', page).checked(); + + ApiClient.updateServerConfiguration(config).done(function(result) { + + Dashboard.processServerConfigurationUpdateResult(result); + + Dashboard.navigate('wizardfinish.html'); + + }); + }); + + + }); + }); + + } + + $(document).on('pageinit', "#wizardSettingsPage", function () { + + var page = this; + + $('#btnNextPage', page).on('click', function () { + + save(page); + }); + }); + +})(jQuery, document, window); diff --git a/dashboard-ui/wizardlibrary.html b/dashboard-ui/wizardlibrary.html index 901d0ea7b8..39a0f314e1 100644 --- a/dashboard-ui/wizardlibrary.html +++ b/dashboard-ui/wizardlibrary.html @@ -65,7 +65,7 @@
    - +
    diff --git a/dashboard-ui/wizardsettings.html b/dashboard-ui/wizardsettings.html new file mode 100644 index 0000000000..5cd7f05a15 --- /dev/null +++ b/dashboard-ui/wizardsettings.html @@ -0,0 +1,37 @@ + + + + Media Browser + + +
    + +
    + +
    +

    + Configure settings

    + +
    +
    + + +
    Saving artwork and metadata directly into media folders will put them in a place where they can be easily edited and help reduce the size of the server's data folder.
    +
    + +
    + + +
    Extracting chapter images will allow clients to display graphical scene selection menus. The process can be cpu-intensive and on average will require 1-2GB of space. It runs as a nightly scheduled task at 4am, although this is configurable in the scheduled tasks area of the Dashboard once the wizard is completed.
    +
    + +
    + + +
    +
    + +
    +
    + + diff --git a/packages.config b/packages.config index 49180aa52e..2e19e0a123 100644 --- a/packages.config +++ b/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file