define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "globalize", "dom", "indicators", "scripts/imagehelper", "cardStyle", "emby-itemrefreshindicator"], function ($, appHost, taskButton, loading, libraryMenu, globalize, dom, indicators, imageHelper) { "use strict"; function addVirtualFolder(page) { require(["medialibrarycreator"], function (medialibrarycreator) { new medialibrarycreator().show({ collectionTypeOptions: getCollectionTypeOptions().filter(function (f) { return !f.hidden; }), refresh: shouldRefreshLibraryAfterChanges(page) }).then(function (hasChanges) { if (hasChanges) { reloadLibrary(page); } }); }); } function editVirtualFolder(page, virtualFolder) { require(["medialibraryeditor"], function (medialibraryeditor) { new medialibraryeditor().show({ refresh: shouldRefreshLibraryAfterChanges(page), library: virtualFolder }).then(function (hasChanges) { if (hasChanges) { reloadLibrary(page); } }); }); } function deleteVirtualFolder(page, virtualFolder) { var msg = globalize.translate("MessageAreYouSureYouWishToRemoveMediaFolder"); if (virtualFolder.Locations.length) { msg += "

" + globalize.translate("MessageTheFollowingLocationWillBeRemovedFromLibrary") + "

"; msg += virtualFolder.Locations.join("
"); } require(["confirm"], function (confirm) { confirm({ text: msg, title: globalize.translate('HeaderRemoveMediaFolder'), confirmText: globalize.translate('Delete'), primary: 'delete' }).then(function () { var refreshAfterChange = shouldRefreshLibraryAfterChanges(page); ApiClient.removeVirtualFolder(virtualFolder.Name, refreshAfterChange).then(function () { reloadLibrary(page); }); }); }); } function refreshVirtualFolder(page, virtualFolder) { require(["refreshDialog"], function (refreshDialog) { new refreshDialog({ itemIds: [virtualFolder.ItemId], serverId: ApiClient.serverId(), mode: "scan" }).show(); }); } function renameVirtualFolder(page, virtualFolder) { require(["prompt"], function (prompt) { prompt({ label: globalize.translate("LabelNewName"), confirmText: globalize.translate("ButtonRename") }).then(function (newName) { if (newName && newName != virtualFolder.Name) { var refreshAfterChange = shouldRefreshLibraryAfterChanges(page); ApiClient.renameVirtualFolder(virtualFolder.Name, newName, refreshAfterChange).then(function () { reloadLibrary(page); }); } }); }); } function showCardMenu(page, elem, virtualFolders) { var card = dom.parentWithClass(elem, "card"); var index = parseInt(card.getAttribute("data-index")); var virtualFolder = virtualFolders[index]; var menuItems = []; menuItems.push({ name: globalize.translate("ButtonEditImages"), id: "editimages", ironIcon: "photo" }); menuItems.push({ name: globalize.translate("ManageLibrary"), id: "edit", ironIcon: "folder_open" }); menuItems.push({ name: globalize.translate("ButtonRemove"), id: "delete", ironIcon: "remove" }); menuItems.push({ name: globalize.translate("ButtonRename"), id: "rename", ironIcon: "mode_edit" }); menuItems.push({ name: globalize.translate("ScanLibrary"), id: "refresh", ironIcon: "refresh" }); require(["actionsheet"], function (actionsheet) { actionsheet.show({ items: menuItems, positionTo: elem, callback: function (resultId) { switch (resultId) { case "edit": editVirtualFolder(page, virtualFolder); break; case "editimages": editImages(page, virtualFolder); break; case "rename": renameVirtualFolder(page, virtualFolder); break; case "delete": deleteVirtualFolder(page, virtualFolder); break; case "refresh": refreshVirtualFolder(page, virtualFolder); } } }); }); } function reloadLibrary(page) { loading.show(); ApiClient.getVirtualFolders().then(function (result) { reloadVirtualFolders(page, result); }); } function shouldRefreshLibraryAfterChanges(page) { return "mediaLibraryPage" === page.id; } function reloadVirtualFolders(page, virtualFolders) { var html = ""; virtualFolders.push({ Name: globalize.translate("ButtonAddMediaLibrary"), icon: "add_circle", Locations: [], showType: false, showLocations: false, showMenu: false, showNameWithIcon: true }); for (var i = 0; i < virtualFolders.length; i++) { var virtualFolder = virtualFolders[i]; html += getVirtualFolderHtml(page, virtualFolder, i); } var divVirtualFolders = page.querySelector("#divVirtualFolders"); divVirtualFolders.innerHTML = html; divVirtualFolders.classList.add("itemsContainer"); divVirtualFolders.classList.add("vertical-wrap"); $(".btnCardMenu", divVirtualFolders).on("click", function () { showCardMenu(page, this, virtualFolders); }); divVirtualFolders.querySelector(".addLibrary").addEventListener("click", function () { addVirtualFolder(page); }); $(".editLibrary", divVirtualFolders).on("click", function () { var card = $(this).parents(".card")[0]; var index = parseInt(card.getAttribute("data-index")); var virtualFolder = virtualFolders[index]; if (virtualFolder.ItemId) { editVirtualFolder(page, virtualFolder); } }); loading.hide(); } function editImages(page, virtualFolder) { require(["imageEditor"], function (imageEditor) { imageEditor.show({ itemId: virtualFolder.ItemId, serverId: ApiClient.serverId() }).then(function () { reloadLibrary(page); }); }); } function getLink(text, url) { return globalize.translate(text, '', ""); } function getCollectionTypeOptions() { return [{ name: "", value: "" }, { name: globalize.translate("FolderTypeMovies"), value: "movies", message: getLink("MovieLibraryHelp", "https://jellyfin.readthedocs.io/en/latest/media/movies/") }, { name: globalize.translate("FolderTypeMusic"), value: "music", message: getLink("MusicLibraryHelp", "https://jellyfin.readthedocs.io/en/latest/media/music/") }, { name: globalize.translate("FolderTypeTvShows"), value: "tvshows", message: getLink("TvLibraryHelp", "https://jellyfin.readthedocs.io/en/latest/media/shows/") }, { name: globalize.translate("FolderTypeBooks"), value: "books", message: getLink("BookLibraryHelp", "https://jellyfin.readthedocs.io/en/latest/media/books/") }, { name: globalize.translate("OptionHomeVideos"), value: "homevideos" }, { name: globalize.translate("FolderTypeMusicVideos"), value: "musicvideos" }, { name: globalize.translate("FolderTypeUnset"), value: "mixed", message: globalize.translate("MessageUnsetContentHelp") }]; } function getVirtualFolderHtml(page, virtualFolder, index) { var html = ""; var style = ""; if (page.classList.contains("wizardPage")) { style += "min-width:33.3%;"; } html += '
'; html += '
'; html += '
'; html += '
'; html += '
'; var imgUrl = ""; if (virtualFolder.PrimaryImageItemId) { imgUrl = ApiClient.getScaledImageUrl(virtualFolder.PrimaryImageItemId, { type: "Primary" }); } var hasCardImageContainer; if (imgUrl) { html += '
"; hasCardImageContainer = true; } else if (!virtualFolder.showNameWithIcon) { html += '
'; html += '' + (virtualFolder.icon || imageHelper.getLibraryIcon(virtualFolder.CollectionType)) + ""; hasCardImageContainer = true; } if (hasCardImageContainer) { html += '
'; html += '
'; html += "
"; html += "
"; } if (!imgUrl && virtualFolder.showNameWithIcon) { html += '

'; html += '' + (virtualFolder.icon || imageHelper.getLibraryIcon(virtualFolder.CollectionType)) + ""; if (virtualFolder.showNameWithIcon) { html += '
'; html += virtualFolder.Name; html += "
"; } html += "

"; } html += "
"; html += "
"; html += '
'; // always show menu unless explicitly hidden if (virtualFolder.showMenu !== false) { html += '
'; html += ''; html += "
"; } html += "
"; if (virtualFolder.showNameWithIcon) { html += " "; } else { html += virtualFolder.Name; } html += "
"; var typeName = getCollectionTypeOptions().filter(function (t) { return t.value == virtualFolder.CollectionType; })[0]; typeName = typeName ? typeName.name : globalize.translate("FolderTypeUnset"); html += "
"; if (virtualFolder.showType === false) { html += " "; } else { html += typeName; } html += "
"; if (virtualFolder.showLocations === false) { html += "
"; html += " "; html += "
"; } else if (virtualFolder.Locations.length && virtualFolder.Locations.length === 1) { html += "
"; html += virtualFolder.Locations[0]; html += "
"; } else { html += "
"; html += globalize.translate("NumLocationsValue", virtualFolder.Locations.length); html += "
"; } html += "
"; html += "
"; html += "
"; return html; } function getTabs() { return [{ href: "library.html", name: globalize.translate("HeaderLibraries") }, { href: "librarydisplay.html", name: globalize.translate("TabDisplay") }, { href: "metadataimages.html", name: globalize.translate("TabMetadata") }, { href: "metadatanfo.html", name: globalize.translate("TabNfoSettings") }]; } window.WizardLibraryPage = { next: function () { Dashboard.navigate("wizardsettings.html"); } }; pageClassOn("pageshow", "mediaLibraryPage", function () { reloadLibrary(this); }); pageIdOn("pageshow", "mediaLibraryPage", function () { libraryMenu.setTabs("librarysetup", 0, getTabs); var page = this; taskButton({ mode: "on", progressElem: page.querySelector(".refreshProgress"), taskKey: "RefreshLibrary", button: page.querySelector(".btnRefresh") }); }); pageIdOn("pagebeforehide", "mediaLibraryPage", function () { var page = this; taskButton({ mode: "off", progressElem: page.querySelector(".refreshProgress"), taskKey: "RefreshLibrary", button: page.querySelector(".btnRefresh") }); }); });