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) {
hasChanges && reloadLibrary(page);
})
})
}
function editVirtualFolder(page, virtualFolder) {
require(["medialibraryeditor"], function(medialibraryeditor) {
(new medialibraryeditor).show({
refresh: shouldRefreshLibraryAfterChanges(page),
library: virtualFolder
}).then(function(hasChanges) {
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(msg, globalize.translate("HeaderRemoveMediaFolder")).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];
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("MovieLibraryHelp", "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://web.archive.org/web/20181216120305/https://github.com/MediaBrowser/Wiki/wiki/Book-naming")
}, {
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 = "";
page.classList.contains("wizardPage") && (style += "min-width:33.3%;");
html += '