var MediaLibraryPage = { onPageShow: function () { var page = this; MediaLibraryPage.lastVirtualFolderName = ""; MediaLibraryPage.reloadLibrary(page); }, reloadLibrary: function (page) { Dashboard.showLoadingMsg(); ApiClient.getVirtualFolders().done(function (result) { MediaLibraryPage.reloadVirtualFolders(page, result); }); $('#divMediaLibrary', page).show(); }, shouldRefreshLibraryAfterChanges: function () { return $($.mobile.activePage).is('#mediaLibraryPage'); }, reloadVirtualFolders: function (page, virtualFolders) { if (virtualFolders) { MediaLibraryPage.virtualFolders = virtualFolders; } else { virtualFolders = MediaLibraryPage.virtualFolders; } var html = ''; var addPathMappingInfo = $(page).is('#mediaLibraryPage'); for (var i = 0, length = virtualFolders.length; i < length; i++) { var virtualFolder = virtualFolders[i]; var isCollapsed = MediaLibraryPage.lastVirtualFolderName != virtualFolder.Name; html += MediaLibraryPage.getVirtualFolderHtml(virtualFolder, isCollapsed, i, addPathMappingInfo); } $('#divVirtualFolders', page).html(html).trigger('create'); Dashboard.hideLoadingMsg(); }, changeCollectionType: function () { Dashboard.alert({ message: Globalize.translate('HeaderChangeFolderTypeHelp'), title: Globalize.translate('HeaderChangeFolderType') }); }, getVirtualFolderHtml: function (virtualFolder, isCollapsed, index, addPathMappingInfo) { isCollapsed = isCollapsed ? "true" : "false"; var html = '
'; html += '

' + virtualFolder.Name + '

'; var typeName = MediaLibraryPage.getCollectionTypeOptions().filter(function (t) { return t.value == virtualFolder.CollectionType; })[0]; typeName = typeName ? typeName.name : Globalize.translate('FolderTypeMixed'); html += '

'; html += Globalize.translate('LabelFolderTypeValue').replace('{0}', '' + typeName + ''); html += '

'; if (addPathMappingInfo) { html += '

'+Globalize.translate('LabelPathSubstitutionHelp')+'

'; } html += '

'; html += ''; html += ''; html += ''; html += '

'; html += '
'; return html; }, addVirtualFolder: function () { $('.collectionTypeFieldDescription').show(); MediaLibraryPage.getTextValue(Globalize.translate('HeaderAddMediaFolder'), Globalize.translate('HeaderAddMediaFolderHelp'), "", true, function (name, type) { MediaLibraryPage.lastVirtualFolderName = name; var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); ApiClient.addVirtualFolder(name, type, refreshAfterChange).done(MediaLibraryPage.processOperationResult); }); }, addMediaLocation: function (virtualFolderIndex) { MediaLibraryPage.selectDirectory(function (path) { if (path) { var virtualFolder = MediaLibraryPage.virtualFolders[virtualFolderIndex]; MediaLibraryPage.lastVirtualFolderName = virtualFolder.Name; var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); ApiClient.addMediaPath(virtualFolder.Name, path, refreshAfterChange).done(MediaLibraryPage.processOperationResult); } }); }, selectDirectory: function (callback) { var picker = new DirectoryBrowser($.mobile.activePage); picker.show({ callback: callback }); MediaLibraryPage.directoryPicker = picker; }, getTextValue: function (header, label, initialValue, showCollectionType, callback) { var page = $.mobile.activePage; var popup = $('#popupEnterText', page); $('h3', popup).html(header); $('#lblValue', popup).html(label); $('#txtValue', popup).val(initialValue); if (showCollectionType) { $('#fldCollectionType', popup).show(); $('#selectCollectionType', popup).attr('required', 'required').selectmenu('refresh'); } else { $('#fldCollectionType', popup).hide(); $('#selectCollectionType', popup).removeAttr('required').selectmenu('refresh'); } $('#selectCollectionType', popup).html(MediaLibraryPage.getCollectionTypeOptionsHtml()).val('').selectmenu('refresh'); popup.on("popupafteropen", function () { $('#textEntryForm input:first', this).focus(); }).on("popupafterclose", function () { $(this).off("popupafterclose").off("click"); $('#textEntryForm', this).off("submit"); }).popup("open"); $('#textEntryForm', popup).on('submit', function () { if (callback) { if (showCollectionType) { var collectionType = $('#selectCollectionType', popup).val(); // The server expects an empty value for mixed if (collectionType == 'mixed') { collectionType = ''; } callback($('#txtValue', popup).val(), collectionType); } else { callback($('#txtValue', popup).val()); } } return false; }); }, getCollectionTypeOptionsHtml: function () { return MediaLibraryPage.getCollectionTypeOptions().filter(function (i) { return i.isSelectable !== false; }).map(function (i) { return ''; }).join(""); }, getCollectionTypeOptions: function () { return [ { name: "", value: "" }, { name: Globalize.translate('FolderTypeMovies'), value: "movies" }, { name: Globalize.translate('FolderTypeMusic'), value: "music" }, { name: Globalize.translate('FolderTypeTvShows'), value: "tvshows" }, { name: Globalize.translate('FolderTypeBooks') + '*', value: "books" }, { name: Globalize.translate('FolderTypeGames') + '*', value: "games" }, { name: Globalize.translate('FolderTypeHomeVideos'), value: "homevideos" }, { name: Globalize.translate('FolderTypeMusicVideos'), value: "musicvideos" }, { name: Globalize.translate('FolderTypePhotos'), value: "photos" }, { name: Globalize.translate('FolderTypeAdultVideos'), value: "adultvideos" }, { name: Globalize.translate('FolderTypeMixed'), value: "mixed" } ]; }, renameVirtualFolder: function (button) { var folderIndex = button.getAttribute('data-folderindex'); var virtualFolder = MediaLibraryPage.virtualFolders[folderIndex]; MediaLibraryPage.lastVirtualFolderName = virtualFolder.Name; $('.collectionTypeFieldDescription').hide(); MediaLibraryPage.getTextValue(Globalize.translate('HeaderRenameMediaFolder'), Globalize.translate('LabelNewName'), virtualFolder.Name, false, function (newName) { if (virtualFolder.Name != newName) { var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); ApiClient.renameVirtualFolder(virtualFolder.Name, newName, refreshAfterChange).done(MediaLibraryPage.processOperationResult); } }); }, deleteVirtualFolder: function (button) { var folderIndex = button.getAttribute('data-folderindex'); var virtualFolder = MediaLibraryPage.virtualFolders[folderIndex]; var parent = $(button).parents('.collapsibleVirtualFolder'); var locations = $('.lnkMediaLocation', parent).map(function () { return this.innerHTML; }).get(); var msg = Globalize.translate('MessageAreYouSureYouWishToRemoveMediaFolder'); if (locations.length) { msg += "

"+Globalize.translate("MessageTheFollowingLocationWillBeRemovedFromLibrary")+"

"; msg += locations.join("
"); } MediaLibraryPage.lastVirtualFolderName = virtualFolder.Name; Dashboard.confirm(msg, Globalize.translate('HeaderRemoveMediaFolder'), function (confirmResult) { if (confirmResult) { var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); ApiClient.removeVirtualFolder(virtualFolder.Name, refreshAfterChange).done(MediaLibraryPage.processOperationResult); } }); }, deleteMediaLocation: function (button) { var folderIndex = button.getAttribute('data-folderindex'); var index = parseInt(button.getAttribute('data-index')); var virtualFolder = MediaLibraryPage.virtualFolders[folderIndex]; MediaLibraryPage.lastVirtualFolderName = virtualFolder.Name; var location = virtualFolder.Locations[index]; Dashboard.confirm(Globalize.translate('MessageConfirmRemoveMediaLocation'), Globalize.translate('HeaderRemoveMediaLocation'), function (confirmResult) { if (confirmResult) { var refreshAfterChange = MediaLibraryPage.shouldRefreshLibraryAfterChanges(); ApiClient.removeMediaPath(virtualFolder.Name, location, refreshAfterChange).done(MediaLibraryPage.processOperationResult); } }); }, processOperationResult: function (result) { Dashboard.hideLoadingMsg(); var page = $.mobile.activePage; $('#popupEnterText', page).popup("close"); if (MediaLibraryPage.directoryPicker) { MediaLibraryPage.directoryPicker.close(); MediaLibraryPage.directoryPicker = null; } MediaLibraryPage.reloadLibrary(page); } }; $(document).on('pageshow', ".mediaLibraryPage", MediaLibraryPage.onPageShow); var WizardLibraryPage = { next: function () { Dashboard.showLoadingMsg(); ApiClient.ajax({ type: "POST", url: ApiClient.getUrl('System/Configuration/MetadataPlugins/Autoset') }).done(function () { Dashboard.hideLoadingMsg(); Dashboard.navigate('wizardsettings.html'); }); } }; (function ($, document, window) { function pollTasks(page) { ApiClient.getScheduledTasks().done(function (tasks) { updateTasks(page, tasks); }); } function updateTasks(page, tasks) { $('.refreshLibraryPanel', page).removeClass('hide'); var task = tasks.filter(function (t) { return t.Name == 'Scan media library'; })[0]; $('.btnRefresh', page).buttonEnabled(task.State == 'Idle').attr('data-taskid', task.Id); var progress = (task.CurrentProgressPercentage || 0).toFixed(1); var progressElem = $('.refreshProgress', page).val(progress); if (task.State == 'Running') { progressElem.show(); } else { progressElem.hide(); } var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : ''; if (lastResult == "Failed") { $('.lastRefreshResult', page).html('' + Globalize.translate('LabelFailed') + ''); } else if (lastResult == "Cancelled") { $('.lastRefreshResult', page).html('' + Globalize.translate('LabelCancelled') + ''); } else if (lastResult == "Aborted") { $('.lastRefreshResult', page).html('' + Globalize.translate('LabelAbortedByServerShutdown') + ''); } else { $('.lastRefreshResult', page).html(lastResult); } } function onWebSocketMessage(e, msg) { if (msg.MessageType == "ScheduledTasksInfo") { var tasks = msg.Data; var page = $.mobile.activePage; updateTasks(page, tasks); } } $(document).on('pageinit', "#mediaLibraryPage", function () { var page = this; $('.btnRefresh', page).on('click', function () { var button = this; var id = button.getAttribute('data-taskid'); ApiClient.startScheduledTask(id).done(function () { pollTasks(page); }); }); }).on('pageshow', "#mediaLibraryPage", function () { var page = this; $('.refreshLibraryPanel', page).addClass('hide'); pollTasks(page); if (ApiClient.isWebSocketOpen()) { ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1000,1000"); } $(ApiClient).on("websocketmessage", onWebSocketMessage).on('websocketopen', function () { if (ApiClient.isWebSocketOpen()) { ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1000,1000"); } }); }).on('pagehide', "#mediaLibraryPage", function () { var page = this; if (ApiClient.isWebSocketOpen()) { ApiClient.sendWebSocketMessage("ScheduledTasksInfoStop"); } $(ApiClient).off("websocketmessage", onWebSocketMessage); }); })(jQuery, document, window);