1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/components/libraryoptionseditor/libraryoptionseditor.js

594 lines
32 KiB
JavaScript
Raw Normal View History

2020-05-04 12:44:12 +02:00
define(['globalize', 'dom', 'emby-checkbox', 'emby-select', 'emby-input'], function(globalize, dom) {
'use strict';
2018-10-23 01:05:09 +03:00
function populateLanguages(parent) {
return ApiClient.getCultures().then(function(languages) {
2020-05-04 12:44:12 +02:00
populateLanguagesIntoSelect(parent.querySelector('#selectLanguage'), languages);
populateLanguagesIntoList(parent.querySelector('.subtitleDownloadLanguages'), languages);
2019-05-06 17:26:18 -07:00
});
2018-10-23 01:05:09 +03:00
}
function populateLanguagesIntoSelect(select, languages) {
2020-05-04 12:44:12 +02:00
var html = '';
2018-10-23 01:05:09 +03:00
html += "<option value=''></option>";
2019-05-06 17:26:18 -07:00
for (var i = 0; i < languages.length; i++) {
2018-10-23 01:05:09 +03:00
var culture = languages[i];
2020-05-04 12:44:12 +02:00
html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + '</option>';
2018-10-23 01:05:09 +03:00
}
2019-05-06 17:26:18 -07:00
select.innerHTML = html;
2018-10-23 01:05:09 +03:00
}
function populateLanguagesIntoList(element, languages) {
2020-05-04 12:44:12 +02:00
var html = '';
2019-05-06 17:26:18 -07:00
for (var i = 0; i < languages.length; i++) {
2018-10-23 01:05:09 +03:00
var culture = languages[i];
2020-05-04 12:44:12 +02:00
html += '<label><input type="checkbox" is="emby-checkbox" class="chkSubtitleLanguage" data-lang="' + culture.ThreeLetterISOLanguageName.toLowerCase() + '" /><span>' + culture.DisplayName + '</span></label>';
2018-10-23 01:05:09 +03:00
}
2019-05-06 17:26:18 -07:00
element.innerHTML = html;
2018-10-23 01:05:09 +03:00
}
function populateCountries(select) {
return ApiClient.getCountries().then(function(allCountries) {
2020-05-04 12:44:12 +02:00
var html = '';
2018-10-23 01:05:09 +03:00
html += "<option value=''></option>";
2019-05-06 17:26:18 -07:00
for (var i = 0; i < allCountries.length; i++) {
2018-10-23 01:05:09 +03:00
var culture = allCountries[i];
2020-05-04 12:44:12 +02:00
html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + '</option>';
2018-10-23 01:05:09 +03:00
}
2019-05-06 17:26:18 -07:00
select.innerHTML = html;
});
2018-10-23 01:05:09 +03:00
}
function populateRefreshInterval(select) {
2020-05-04 12:44:12 +02:00
var html = '';
html += "<option value='0'>" + globalize.translate('Never') + '</option>';
2019-05-06 17:26:18 -07:00
html += [30, 60, 90].map(function(val) {
2020-05-04 12:44:12 +02:00
return "<option value='" + val + "'>" + globalize.translate('EveryNDays', val) + '</option>';
}).join('');
2019-05-06 17:26:18 -07:00
select.innerHTML = html;
2018-10-23 01:05:09 +03:00
}
function renderMetadataReaders(page, plugins) {
2020-05-04 12:44:12 +02:00
var html = '';
var elem = page.querySelector('.metadataReaders');
2019-05-06 17:26:18 -07:00
2020-05-04 12:44:12 +02:00
if (plugins.length < 1) return elem.innerHTML = '', elem.classList.add('hide'), !1;
html += '<h3 class="checkboxListLabel">' + globalize.translate('LabelMetadataReaders') + '</h3>';
2019-05-06 17:26:18 -07:00
html += '<div class="checkboxList paperList checkboxList-paperList">';
for (var i = 0; i < plugins.length; i++) {
2018-10-23 01:05:09 +03:00
var plugin = plugins[i];
2019-05-06 17:26:18 -07:00
html += '<div class="listItem localReaderOption sortableOption" data-pluginname="' + plugin.Name + '">';
2020-04-26 02:37:28 +03:00
html += '<span class="listItemIcon material-icons live_tv"></span>';
2019-05-06 17:26:18 -07:00
html += '<div class="listItemBody">';
html += '<h3 class="listItemBodyText">';
html += plugin.Name;
2020-05-04 12:44:12 +02:00
html += '</h3>';
html += '</div>';
2019-05-06 17:26:18 -07:00
if (i > 0) {
2020-05-04 12:44:12 +02:00
html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate('ButtonUp') + '" class="btnSortableMoveUp btnSortable" data-pluginindex="' + i + '"><span class="material-icons keyboard_arrow_up"></span></button>';
2019-05-06 17:26:18 -07:00
} else if (plugins.length > 1) {
2020-05-04 12:44:12 +02:00
html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate('ButtonDown') + '" class="btnSortableMoveDown btnSortable" data-pluginindex="' + i + '"><span class="material-icons keyboard_arrow_down"></span></button>';
2019-05-06 17:26:18 -07:00
}
2020-05-04 12:44:12 +02:00
html += '</div>';
2019-05-06 17:26:18 -07:00
}
2020-05-04 12:44:12 +02:00
html += '</div>';
html += '<div class="fieldDescription">' + globalize.translate('LabelMetadataReadersHelp') + '</div>';
2019-05-06 17:26:18 -07:00
if (plugins.length < 2) {
2020-05-04 12:44:12 +02:00
elem.classList.add('hide');
2019-05-06 17:26:18 -07:00
} else {
2020-05-04 12:44:12 +02:00
elem.classList.remove('hide');
2018-10-23 01:05:09 +03:00
}
2019-05-06 17:26:18 -07:00
elem.innerHTML = html;
return true;
2018-10-23 01:05:09 +03:00
}
function renderMetadataSavers(page, metadataSavers) {
2020-05-04 12:44:12 +02:00
var html = '';
var elem = page.querySelector('.metadataSavers');
if (!metadataSavers.length) return elem.innerHTML = '', elem.classList.add('hide'), false;
html += '<h3 class="checkboxListLabel">' + globalize.translate('LabelMetadataSavers') + '</h3>';
2019-05-06 17:26:18 -07:00
html += '<div class="checkboxList paperList checkboxList-paperList">';
for (var i = 0; i < metadataSavers.length; i++) {
2018-10-23 01:05:09 +03:00
var plugin = metadataSavers[i];
2020-05-04 12:44:12 +02:00
html += '<label><input type="checkbox" data-defaultenabled="' + plugin.DefaultEnabled + '" is="emby-checkbox" class="chkMetadataSaver" data-pluginname="' + plugin.Name + '" ' + false + '><span>' + plugin.Name + '</span></label>';
2018-10-23 01:05:09 +03:00
}
2020-05-04 12:44:12 +02:00
html += '</div>';
html += '<div class="fieldDescription" style="margin-top:.25em;">' + globalize.translate('LabelMetadataSaversHelp') + '</div>';
2019-05-06 17:26:18 -07:00
elem.innerHTML = html;
2020-05-04 12:44:12 +02:00
elem.classList.remove('hide');
2019-05-06 17:26:18 -07:00
return true;
2018-10-23 01:05:09 +03:00
}
function getMetadataFetchersForTypeHtml(availableTypeOptions, libraryOptionsForType) {
2020-05-04 12:44:12 +02:00
var html = '';
2019-05-06 17:26:18 -07:00
var plugins = availableTypeOptions.MetadataFetchers;
plugins = getOrderedPlugins(plugins, libraryOptionsForType.MetadataFetcherOrder || []);
if (!plugins.length) return html;
html += '<div class="metadataFetcher" data-type="' + availableTypeOptions.Type + '">';
2020-05-04 12:44:12 +02:00
html += '<h3 class="checkboxListLabel">' + globalize.translate('LabelTypeMetadataDownloaders', globalize.translate(availableTypeOptions.Type)) + '</h3>';
2019-05-06 17:26:18 -07:00
html += '<div class="checkboxList paperList checkboxList-paperList">';
2020-04-14 07:00:47 +02:00
plugins.array.forEach((plugin, index) => {
2018-10-23 01:05:09 +03:00
html += '<div class="listItem metadataFetcherItem sortableOption" data-pluginname="' + plugin.Name + '">';
2019-05-06 17:26:18 -07:00
var isChecked = libraryOptionsForType.MetadataFetchers ? -1 !== libraryOptionsForType.MetadataFetchers.indexOf(plugin.Name) : plugin.DefaultEnabled;
2020-05-04 12:44:12 +02:00
var checkedHtml = isChecked ? ' checked="checked"' : '';
html += '<label class="listItemCheckboxContainer"><input type="checkbox" is="emby-checkbox" class="chkMetadataFetcher" data-pluginname="' + plugin.Name + '" ' + checkedHtml + '><span></span></label>';
2019-05-06 17:26:18 -07:00
html += '<div class="listItemBody">';
html += '<h3 class="listItemBodyText">';
html += plugin.Name;
2020-05-04 12:44:12 +02:00
html += '</h3>';
html += '</div>';
2020-04-25 22:37:06 +02:00
index > 0 ? html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate('ButtonUp') + '" class="btnSortableMoveUp btnSortable" data-pluginindex="' + index + '"><span class="material-icons keyboard_arrow_up"></span></button>' : plugins.length > 1 && (html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate('ButtonDown') + '" class="btnSortableMoveDown btnSortable" data-pluginindex="' + index + '"><span class="material-icons keyboard_arrow_down"></span></button>'), html += '</div>';
2020-04-14 07:00:47 +02:00
});
2020-05-04 12:44:12 +02:00
html += '</div>';
html += '<div class="fieldDescription">' + globalize.translate('LabelMetadataDownloadersHelp') + '</div>';
html += '</div>';
2019-05-06 17:26:18 -07:00
return html;
2018-10-23 01:05:09 +03:00
}
function getTypeOptions(allOptions, type) {
2019-05-06 17:26:18 -07:00
var allTypeOptions = allOptions.TypeOptions || [];
for (var i = 0; i < allTypeOptions.length; i++) {
2018-10-23 01:05:09 +03:00
var typeOptions = allTypeOptions[i];
2019-05-06 17:26:18 -07:00
if (typeOptions.Type === type) return typeOptions;
2018-10-23 01:05:09 +03:00
}
2019-05-06 17:26:18 -07:00
return null;
2018-10-23 01:05:09 +03:00
}
function renderMetadataFetchers(page, availableOptions, libraryOptions) {
2020-05-04 12:44:12 +02:00
var html = '';
var elem = page.querySelector('.metadataFetchers');
2019-05-06 17:26:18 -07:00
for (var i = 0; i < availableOptions.TypeOptions.length; i++) {
2018-10-23 01:05:09 +03:00
var availableTypeOptions = availableOptions.TypeOptions[i];
2019-05-06 17:26:18 -07:00
html += getMetadataFetchersForTypeHtml(availableTypeOptions, getTypeOptions(libraryOptions, availableTypeOptions.Type) || {});
}
elem.innerHTML = html;
if (html) {
2020-05-04 12:44:12 +02:00
elem.classList.remove('hide');
page.querySelector('.fldAutoRefreshInterval').classList.remove('hide');
page.querySelector('.fldMetadataLanguage').classList.remove('hide');
page.querySelector('.fldMetadataCountry').classList.remove('hide');
2019-05-06 17:26:18 -07:00
} else {
2020-05-04 12:44:12 +02:00
elem.classList.add('hide');
page.querySelector('.fldAutoRefreshInterval').classList.add('hide');
page.querySelector('.fldMetadataLanguage').classList.add('hide');
page.querySelector('.fldMetadataCountry').classList.add('hide');
2018-10-23 01:05:09 +03:00
}
2019-05-06 17:26:18 -07:00
return true;
2018-10-23 01:05:09 +03:00
}
function renderSubtitleFetchers(page, availableOptions, libraryOptions) {
2020-05-04 12:44:12 +02:00
var html = '';
var elem = page.querySelector('.subtitleFetchers');
2019-05-06 17:26:18 -07:00
var plugins = availableOptions.SubtitleFetchers;
plugins = getOrderedPlugins(plugins, libraryOptions.SubtitleFetcherOrder || []);
if (!plugins.length) return html;
2020-05-04 12:44:12 +02:00
html += '<h3 class="checkboxListLabel">' + globalize.translate('LabelSubtitleDownloaders') + '</h3>';
2019-05-06 17:26:18 -07:00
html += '<div class="checkboxList paperList checkboxList-paperList">';
for (var i = 0; i < plugins.length; i++) {
var plugin = plugins[i];
html += '<div class="listItem subtitleFetcherItem sortableOption" data-pluginname="' + plugin.Name + '">';
var isChecked = libraryOptions.DisabledSubtitleFetchers ? -1 === libraryOptions.DisabledSubtitleFetchers.indexOf(plugin.Name) : plugin.DefaultEnabled;
2020-05-04 12:44:12 +02:00
var checkedHtml = isChecked ? ' checked="checked"' : '';
html += '<label class="listItemCheckboxContainer"><input type="checkbox" is="emby-checkbox" class="chkSubtitleFetcher" data-pluginname="' + plugin.Name + '" ' + checkedHtml + '><span></span></label>';
2019-05-06 17:26:18 -07:00
html += '<div class="listItemBody">';
html += '<h3 class="listItemBodyText">';
html += plugin.Name;
2020-05-04 12:44:12 +02:00
html += '</h3>';
html += '</div>';
2019-05-06 17:26:18 -07:00
if (i > 0) {
2020-05-04 12:44:12 +02:00
html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate('ButtonUp') + '" class="btnSortableMoveUp btnSortable" data-pluginindex="' + i + '"><span class="material-icons keyboard_arrow_up"></span></button>';
2019-05-06 17:26:18 -07:00
} else if (plugins.length > 1) {
2020-05-04 12:44:12 +02:00
html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate('ButtonDown') + '" class="btnSortableMoveDown btnSortable" data-pluginindex="' + i + '"><span class="material-icons keyboard_arrow_down"></span></button>';
2018-10-23 01:05:09 +03:00
}
2020-05-04 12:44:12 +02:00
html += '</div>';
2018-10-23 01:05:09 +03:00
}
2020-05-04 12:44:12 +02:00
html += '</div>';
html += '<div class="fieldDescription">' + globalize.translate('SubtitleDownloadersHelp') + '</div>';
2019-05-06 17:26:18 -07:00
elem.innerHTML = html;
2018-10-23 01:05:09 +03:00
}
function getImageFetchersForTypeHtml(availableTypeOptions, libraryOptionsForType) {
2020-05-04 12:44:12 +02:00
var html = '';
2019-05-06 17:26:18 -07:00
var plugins = availableTypeOptions.ImageFetchers;
plugins = getOrderedPlugins(plugins, libraryOptionsForType.ImageFetcherOrder || []);
if (!plugins.length) return html;
html += '<div class="imageFetcher" data-type="' + availableTypeOptions.Type + '">';
html += '<div class="flex align-items-center" style="margin:1.5em 0 .5em;">';
2020-05-04 12:44:12 +02:00
html += '<h3 class="checkboxListLabel" style="margin:0;">' + globalize.translate('HeaderTypeImageFetchers', availableTypeOptions.Type) + '</h3>';
2018-10-23 01:05:09 +03:00
var supportedImageTypes = availableTypeOptions.SupportedImageTypes || [];
2020-05-04 12:44:12 +02:00
if (supportedImageTypes.length > 1 || 1 === supportedImageTypes.length && 'Primary' !== supportedImageTypes[0]) {
html += '<button is="emby-button" class="raised btnImageOptionsForType" type="button" style="margin-left:1.5em;font-size:90%;"><span>' + globalize.translate('HeaderFetcherSettings') + '</span></button>';
2019-05-06 17:26:18 -07:00
}
2020-05-04 12:44:12 +02:00
html += '</div>';
2019-05-06 17:26:18 -07:00
html += '<div class="checkboxList paperList checkboxList-paperList">';
for (var i = 0; i < plugins.length; i++) {
2018-10-23 01:05:09 +03:00
var plugin = plugins[i];
html += '<div class="listItem imageFetcherItem sortableOption" data-pluginname="' + plugin.Name + '">';
2019-05-06 17:26:18 -07:00
var isChecked = libraryOptionsForType.ImageFetchers ? -1 !== libraryOptionsForType.ImageFetchers.indexOf(plugin.Name) : plugin.DefaultEnabled;
2020-05-04 12:44:12 +02:00
var checkedHtml = isChecked ? ' checked="checked"' : '';
html += '<label class="listItemCheckboxContainer"><input type="checkbox" is="emby-checkbox" class="chkImageFetcher" data-pluginname="' + plugin.Name + '" ' + checkedHtml + '><span></span></label>';
2019-05-06 17:26:18 -07:00
html += '<div class="listItemBody">';
html += '<h3 class="listItemBodyText">';
html += plugin.Name;
2020-05-04 12:44:12 +02:00
html += '</h3>';
html += '</div>';
2019-05-06 17:26:18 -07:00
if (i > 0) {
2020-05-04 12:44:12 +02:00
html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate('ButtonUp') + '" class="btnSortableMoveUp btnSortable" data-pluginindex="' + i + '"><span class="material-icons keyboard_arrow_up"></span></button>';
2019-05-06 17:26:18 -07:00
} else if (plugins.length > 1) {
2020-05-04 12:44:12 +02:00
html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate('ButtonDown') + '" class="btnSortableMoveDown btnSortable" data-pluginindex="' + i + '"><span class="material-icons keyboard_arrow_down"></span></button>';
2019-05-06 17:26:18 -07:00
}
2020-05-04 12:44:12 +02:00
html += '</div>';
2018-10-23 01:05:09 +03:00
}
2020-05-04 12:44:12 +02:00
html += '</div>';
html += '<div class="fieldDescription">' + globalize.translate('LabelImageFetchersHelp') + '</div>';
html += '</div>';
2019-05-06 17:26:18 -07:00
return html;
2018-10-23 01:05:09 +03:00
}
function renderImageFetchers(page, availableOptions, libraryOptions) {
2020-05-04 12:44:12 +02:00
var html = '';
var elem = page.querySelector('.imageFetchers');
2019-05-06 17:26:18 -07:00
for (var i = 0; i < availableOptions.TypeOptions.length; i++) {
2018-10-23 01:05:09 +03:00
var availableTypeOptions = availableOptions.TypeOptions[i];
2019-05-06 17:26:18 -07:00
html += getImageFetchersForTypeHtml(availableTypeOptions, getTypeOptions(libraryOptions, availableTypeOptions.Type) || {});
}
elem.innerHTML = html;
if (html) {
2020-05-04 12:44:12 +02:00
elem.classList.remove('hide');
page.querySelector('.chkDownloadImagesInAdvanceContainer').classList.remove('hide');
page.querySelector('.chkSaveLocalContainer').classList.remove('hide');
2019-05-06 17:26:18 -07:00
} else {
2020-05-04 12:44:12 +02:00
elem.classList.add('hide');
page.querySelector('.chkDownloadImagesInAdvanceContainer').classList.add('hide');
page.querySelector('.chkSaveLocalContainer').classList.add('hide');
2018-10-23 01:05:09 +03:00
}
2019-05-06 17:26:18 -07:00
return true;
2018-10-23 01:05:09 +03:00
}
function populateMetadataSettings(parent, contentType, isNewLibrary) {
2020-05-04 12:44:12 +02:00
var isNewLibrary = parent.classList.contains('newlibrary');
return ApiClient.getJSON(ApiClient.getUrl('Libraries/AvailableOptions', {
2018-10-23 01:05:09 +03:00
LibraryContentType: contentType,
IsNewLibrary: isNewLibrary
})).then(function(availableOptions) {
2019-05-06 17:26:18 -07:00
currentAvailableOptions = availableOptions;
parent.availableOptions = availableOptions;
renderMetadataSavers(parent, availableOptions.MetadataSavers);
renderMetadataReaders(parent, availableOptions.MetadataReaders);
renderMetadataFetchers(parent, availableOptions, {});
renderSubtitleFetchers(parent, availableOptions, {});
renderImageFetchers(parent, availableOptions, {});
2020-05-04 12:44:12 +02:00
availableOptions.SubtitleFetchers.length ? parent.querySelector('.subtitleDownloadSettings').classList.remove('hide') : parent.querySelector('.subtitleDownloadSettings').classList.add('hide');
2018-10-23 01:05:09 +03:00
}).catch(function() {
2019-05-06 17:26:18 -07:00
return Promise.resolve();
});
2018-10-23 01:05:09 +03:00
}
function adjustSortableListElement(elem) {
2020-05-04 12:44:12 +02:00
var btnSortable = elem.querySelector('.btnSortable');
var inner = btnSortable.querySelector('.material-icons');
2019-05-06 17:26:18 -07:00
if (elem.previousSibling) {
2020-05-04 12:44:12 +02:00
btnSortable.title = globalize.translate('ButtonUp');
btnSortable.classList.add('btnSortableMoveUp');
btnSortable.classList.remove('btnSortableMoveDown');
inner.classList.remove('keyboard_arrow_down');
inner.classList.add('keyboard_arrow_up');
2019-05-06 17:26:18 -07:00
} else {
2020-05-04 12:44:12 +02:00
btnSortable.title = globalize.translate('ButtonDown');
btnSortable.classList.remove('btnSortableMoveUp');
btnSortable.classList.add('btnSortableMoveDown');
inner.classList.remove('keyboard_arrow_up');
inner.classList.add('keyboard_arrow_down');
2019-05-06 17:26:18 -07:00
}
2018-10-23 01:05:09 +03:00
}
function showImageOptionsForType(type) {
2020-05-04 12:44:12 +02:00
require(['imageoptionseditor'], function(ImageOptionsEditor) {
2018-10-23 01:05:09 +03:00
var typeOptions = getTypeOptions(currentLibraryOptions, type);
2020-04-14 07:00:47 +02:00
if (!typeOptions) {
typeOptions = {
Type: type
};
2020-04-25 22:37:06 +02:00
currentLibraryOptions.TypeOptions.push(typeOptions);
2020-04-14 07:00:47 +02:00
}
2018-10-23 01:05:09 +03:00
var availableOptions = getTypeOptions(currentAvailableOptions || {}, type);
2020-04-14 07:00:47 +02:00
var imageOptionsEditor = new ImageOptionsEditor();
imageOptionsEditor.show(type, typeOptions, availableOptions);
});
2018-10-23 01:05:09 +03:00
}
function onImageFetchersContainerClick(e) {
2020-05-04 12:44:12 +02:00
var btnImageOptionsForType = dom.parentWithClass(e.target, 'btnImageOptionsForType');
2018-10-23 01:05:09 +03:00
if (btnImageOptionsForType) {
2020-05-04 12:44:12 +02:00
return void showImageOptionsForType(dom.parentWithClass(btnImageOptionsForType, 'imageFetcher').getAttribute('data-type'));
2018-10-23 01:05:09 +03:00
}
2019-05-06 17:26:18 -07:00
onSortableContainerClick.call(this, e);
2018-10-23 01:05:09 +03:00
}
function onSortableContainerClick(e) {
2020-05-04 12:44:12 +02:00
var btnSortable = dom.parentWithClass(e.target, 'btnSortable');
2018-10-23 01:05:09 +03:00
if (btnSortable) {
2020-05-04 12:44:12 +02:00
var li = dom.parentWithClass(btnSortable, 'sortableOption');
var list = dom.parentWithClass(li, 'paperList');
if (btnSortable.classList.contains('btnSortableMoveDown')) {
2018-10-23 01:05:09 +03:00
var next = li.nextSibling;
2020-04-14 07:00:47 +02:00
if (next) {
li.parentNode.removeChild(li);
next.parentNode.insertBefore(li, next.nextSibling);
}
2018-10-23 01:05:09 +03:00
} else {
var prev = li.previousSibling;
2020-04-14 07:00:47 +02:00
if (prev) {
li.parentNode.removeChild(li);
prev.parentNode.insertBefore(li, prev);
2020-04-25 22:37:06 +02:00
}
2018-10-23 01:05:09 +03:00
}
2020-05-04 12:44:12 +02:00
Array.prototype.forEach.call(list.querySelectorAll('.sortableOption'), adjustSortableListElement);
2018-10-23 01:05:09 +03:00
}
}
function bindEvents(parent) {
2020-05-04 12:44:12 +02:00
parent.querySelector('.metadataReaders').addEventListener('click', onSortableContainerClick);
parent.querySelector('.subtitleFetchers').addEventListener('click', onSortableContainerClick);
parent.querySelector('.metadataFetchers').addEventListener('click', onSortableContainerClick);
parent.querySelector('.imageFetchers').addEventListener('click', onImageFetchersContainerClick);
2018-10-23 01:05:09 +03:00
}
function embed(parent, contentType, libraryOptions) {
currentLibraryOptions = {
TypeOptions: []
2019-05-06 17:26:18 -07:00
};
currentAvailableOptions = null;
var isNewLibrary = null === libraryOptions;
2020-05-04 12:44:12 +02:00
isNewLibrary && parent.classList.add('newlibrary');
2019-05-06 17:26:18 -07:00
return new Promise(function(resolve, reject) {
2018-10-23 01:05:09 +03:00
var xhr = new XMLHttpRequest;
2020-05-04 12:44:12 +02:00
xhr.open('GET', 'components/libraryoptionseditor/libraryoptionseditor.template.html', true);
2019-05-06 17:26:18 -07:00
xhr.onload = function(e) {
2018-10-23 01:05:09 +03:00
var template = this.response;
2019-05-06 17:26:18 -07:00
parent.innerHTML = globalize.translateDocument(template);
2020-05-04 12:44:12 +02:00
populateRefreshInterval(parent.querySelector('#selectAutoRefreshInterval'));
var promises = [populateLanguages(parent), populateCountries(parent.querySelector('#selectCountry'))];
2018-10-23 01:05:09 +03:00
Promise.all(promises).then(function() {
return setContentType(parent, contentType).then(function() {
2019-05-06 17:26:18 -07:00
libraryOptions && setLibraryOptions(parent, libraryOptions);
bindEvents(parent);
resolve();
});
});
};
xhr.send();
});
2018-10-23 01:05:09 +03:00
}
function setAdvancedVisible(parent, visible) {
2020-05-04 12:44:12 +02:00
var elems = parent.querySelectorAll('.advanced');
2019-05-06 17:26:18 -07:00
for (var i = 0; i < elems.length; i++) {
2020-05-04 12:44:12 +02:00
visible ? elems[i].classList.remove('advancedHide') : elems[i].classList.add('advancedHide');
2019-05-06 17:26:18 -07:00
}
2018-10-23 01:05:09 +03:00
}
function setContentType(parent, contentType) {
2020-05-04 12:44:12 +02:00
if (contentType === 'homevideos' || contentType === 'photos') {
parent.querySelector('.chkEnablePhotosContainer').classList.remove('hide');
2019-05-06 17:26:18 -07:00
} else {
2020-05-04 12:44:12 +02:00
parent.querySelector('.chkEnablePhotosContainer').classList.add('hide');
2019-05-06 17:26:18 -07:00
}
2020-05-04 12:44:12 +02:00
if (contentType !== 'tvshows' && contentType !== 'movies' && contentType !== 'homevideos' && contentType !== 'musicvideos' && contentType !== 'mixed') {
parent.querySelector('.chapterSettingsSection').classList.add('hide');
2019-05-06 17:26:18 -07:00
} else {
2020-05-04 12:44:12 +02:00
parent.querySelector('.chapterSettingsSection').classList.remove('hide');
2019-05-06 17:26:18 -07:00
}
2020-05-04 12:44:12 +02:00
if (contentType === 'tvshows') {
parent.querySelector('.chkImportMissingEpisodesContainer').classList.remove('hide');
parent.querySelector('.chkAutomaticallyGroupSeriesContainer').classList.remove('hide');
parent.querySelector('.fldSeasonZeroDisplayName').classList.remove('hide');
parent.querySelector('#txtSeasonZeroName').setAttribute('required', 'required');
2019-05-06 17:26:18 -07:00
} else {
2020-05-04 12:44:12 +02:00
parent.querySelector('.chkImportMissingEpisodesContainer').classList.add('hide');
parent.querySelector('.chkAutomaticallyGroupSeriesContainer').classList.add('hide');
parent.querySelector('.fldSeasonZeroDisplayName').classList.add('hide');
parent.querySelector('#txtSeasonZeroName').removeAttribute('required');
2019-05-06 17:26:18 -07:00
}
2020-05-04 12:44:12 +02:00
if (contentType === 'books' || contentType === 'boxsets' || contentType === 'playlists' || contentType === 'music') {
parent.querySelector('.chkEnableEmbeddedTitlesContainer').classList.add('hide');
2019-05-06 17:26:18 -07:00
} else {
2020-05-04 12:44:12 +02:00
parent.querySelector('.chkEnableEmbeddedTitlesContainer').classList.remove('hide');
2019-05-06 17:26:18 -07:00
}
2020-05-04 12:44:12 +02:00
if (contentType === 'tvshows') {
parent.querySelector('.chkEnableEmbeddedEpisodeInfosContainer').classList.remove('hide');
} else {
2020-05-04 12:44:12 +02:00
parent.querySelector('.chkEnableEmbeddedEpisodeInfosContainer').classList.add('hide');
}
2019-05-06 17:26:18 -07:00
return populateMetadataSettings(parent, contentType);
2018-10-23 01:05:09 +03:00
}
function setSubtitleFetchersIntoOptions(parent, options) {
2020-05-04 12:44:12 +02:00
options.DisabledSubtitleFetchers = Array.prototype.map.call(Array.prototype.filter.call(parent.querySelectorAll('.chkSubtitleFetcher'), function(elem) {
return !elem.checked;
2018-10-23 01:05:09 +03:00
}), function(elem) {
2020-05-04 12:44:12 +02:00
return elem.getAttribute('data-pluginname');
2019-05-06 17:26:18 -07:00
});
2020-05-04 12:44:12 +02:00
options.SubtitleFetcherOrder = Array.prototype.map.call(parent.querySelectorAll('.subtitleFetcherItem'), function(elem) {
return elem.getAttribute('data-pluginname');
2019-05-06 17:26:18 -07:00
});
2018-10-23 01:05:09 +03:00
}
function setMetadataFetchersIntoOptions(parent, options) {
2020-05-04 12:44:12 +02:00
var sections = parent.querySelectorAll('.metadataFetcher');
2019-05-06 17:26:18 -07:00
for (var i = 0; i < sections.length; i++) {
var section = sections[i];
2020-05-04 12:44:12 +02:00
var type = section.getAttribute('data-type');
2019-05-06 17:26:18 -07:00
var typeOptions = getTypeOptions(options, type);
if (!typeOptions) {
typeOptions = {
Type: type
};
options.TypeOptions.push(typeOptions);
}
2020-05-04 12:44:12 +02:00
typeOptions.MetadataFetchers = Array.prototype.map.call(Array.prototype.filter.call(section.querySelectorAll('.chkMetadataFetcher'), function(elem) {
2019-05-06 17:26:18 -07:00
return elem.checked;
2018-10-23 01:05:09 +03:00
}), function(elem) {
2020-05-04 12:44:12 +02:00
return elem.getAttribute('data-pluginname');
2019-05-06 17:26:18 -07:00
});
2020-05-04 12:44:12 +02:00
typeOptions.MetadataFetcherOrder = Array.prototype.map.call(section.querySelectorAll('.metadataFetcherItem'), function(elem) {
return elem.getAttribute('data-pluginname');
2019-05-06 17:26:18 -07:00
});
2018-10-23 01:05:09 +03:00
}
}
function setImageFetchersIntoOptions(parent, options) {
2020-05-04 12:44:12 +02:00
var sections = parent.querySelectorAll('.imageFetcher');
2019-05-06 17:26:18 -07:00
for (var i = 0; i < sections.length; i++) {
var section = sections[i];
2020-05-04 12:44:12 +02:00
var type = section.getAttribute('data-type');
2019-05-06 17:26:18 -07:00
var typeOptions = getTypeOptions(options, type);
if (!typeOptions) {
typeOptions = {
Type: type
};
options.TypeOptions.push(typeOptions);
}
2020-05-04 12:44:12 +02:00
typeOptions.ImageFetchers = Array.prototype.map.call(Array.prototype.filter.call(section.querySelectorAll('.chkImageFetcher'), function(elem) {
return elem.checked;
2018-10-23 01:05:09 +03:00
}), function(elem) {
2020-05-04 12:44:12 +02:00
return elem.getAttribute('data-pluginname');
2019-05-06 17:26:18 -07:00
});
2020-05-04 12:44:12 +02:00
typeOptions.ImageFetcherOrder = Array.prototype.map.call(section.querySelectorAll('.imageFetcherItem'), function(elem) {
return elem.getAttribute('data-pluginname');
2019-05-06 17:26:18 -07:00
});
2018-10-23 01:05:09 +03:00
}
}
function setImageOptionsIntoOptions(parent, options) {
2019-05-06 17:26:18 -07:00
var originalTypeOptions = (currentLibraryOptions || {}).TypeOptions || [];
for (var i = 0; i < originalTypeOptions.length; i++) {
var originalTypeOption = originalTypeOptions[i];
var typeOptions = getTypeOptions(options, originalTypeOption.Type);
if (!typeOptions) {
typeOptions = {
Type: originalTypeOption.Type
2019-05-06 17:26:18 -07:00
};
options.TypeOptions.push(typeOptions);
}
originalTypeOption.ImageOptions && (typeOptions.ImageOptions = originalTypeOption.ImageOptions);
2018-10-23 01:05:09 +03:00
}
}
function getLibraryOptions(parent) {
var options = {
2019-05-06 17:26:18 -07:00
EnableArchiveMediaFiles: false,
2020-05-04 12:44:12 +02:00
EnablePhotos: parent.querySelector('.chkEnablePhotos').checked,
EnableRealtimeMonitor: parent.querySelector('.chkEnableRealtimeMonitor').checked,
ExtractChapterImagesDuringLibraryScan: parent.querySelector('.chkExtractChaptersDuringLibraryScan').checked,
EnableChapterImageExtraction: parent.querySelector('.chkExtractChapterImages').checked,
DownloadImagesInAdvance: parent.querySelector('#chkDownloadImagesInAdvance').checked,
2019-05-06 17:26:18 -07:00
EnableInternetProviders: true,
2020-05-04 12:44:12 +02:00
ImportMissingEpisodes: parent.querySelector('#chkImportMissingEpisodes').checked,
SaveLocalMetadata: parent.querySelector('#chkSaveLocal').checked,
EnableAutomaticSeriesGrouping: parent.querySelector('.chkAutomaticallyGroupSeries').checked,
PreferredMetadataLanguage: parent.querySelector('#selectLanguage').value,
MetadataCountryCode: parent.querySelector('#selectCountry').value,
SeasonZeroDisplayName: parent.querySelector('#txtSeasonZeroName').value,
AutomaticRefreshIntervalDays: parseInt(parent.querySelector('#selectAutoRefreshInterval').value),
EnableEmbeddedTitles: parent.querySelector('#chkEnableEmbeddedTitles').checked,
EnableEmbeddedEpisodeInfos: parent.querySelector('#chkEnableEmbeddedEpisodeInfos').checked,
SkipSubtitlesIfEmbeddedSubtitlesPresent: parent.querySelector('#chkSkipIfGraphicalSubsPresent').checked,
SkipSubtitlesIfAudioTrackMatches: parent.querySelector('#chkSkipIfAudioTrackPresent').checked,
SaveSubtitlesWithMedia: parent.querySelector('#chkSaveSubtitlesLocally').checked,
RequirePerfectSubtitleMatch: parent.querySelector('#chkRequirePerfectMatch').checked,
MetadataSavers: Array.prototype.map.call(Array.prototype.filter.call(parent.querySelectorAll('.chkMetadataSaver'), function(elem) {
return elem.checked;
2018-10-23 01:05:09 +03:00
}), function(elem) {
2020-05-04 12:44:12 +02:00
return elem.getAttribute('data-pluginname');
2018-10-23 01:05:09 +03:00
}),
TypeOptions: []
};
2019-05-06 17:26:18 -07:00
2020-05-04 12:44:12 +02:00
options.LocalMetadataReaderOrder = Array.prototype.map.call(parent.querySelectorAll('.localReaderOption'), function(elem) {
return elem.getAttribute('data-pluginname');
2019-05-06 17:26:18 -07:00
});
2020-05-04 12:44:12 +02:00
options.SubtitleDownloadLanguages = Array.prototype.map.call(Array.prototype.filter.call(parent.querySelectorAll('.chkSubtitleLanguage'), function(elem) {
return elem.checked;
2018-10-23 01:05:09 +03:00
}), function(elem) {
2020-05-04 12:44:12 +02:00
return elem.getAttribute('data-lang');
2019-05-06 17:26:18 -07:00
});
setSubtitleFetchersIntoOptions(parent, options);
setMetadataFetchersIntoOptions(parent, options);
setImageFetchersIntoOptions(parent, options);
setImageOptionsIntoOptions(parent, options);
return options;
2018-10-23 01:05:09 +03:00
}
function getOrderedPlugins(plugins, configuredOrder) {
2019-05-06 17:26:18 -07:00
plugins = plugins.slice(0);
plugins.sort(function(a, b) {
return a = configuredOrder.indexOf(a.Name), b = configuredOrder.indexOf(b.Name), a < b ? -1 : a > b ? 1 : 0;
2019-05-06 17:26:18 -07:00
});
return plugins;
2018-10-23 01:05:09 +03:00
}
function setLibraryOptions(parent, options) {
2019-05-06 17:26:18 -07:00
currentLibraryOptions = options;
currentAvailableOptions = parent.availableOptions;
2020-05-04 12:44:12 +02:00
parent.querySelector('#selectLanguage').value = options.PreferredMetadataLanguage || '';
parent.querySelector('#selectCountry').value = options.MetadataCountryCode || '';
parent.querySelector('#selectAutoRefreshInterval').value = options.AutomaticRefreshIntervalDays || '0';
parent.querySelector('#txtSeasonZeroName').value = options.SeasonZeroDisplayName || 'Specials';
parent.querySelector('.chkEnablePhotos').checked = options.EnablePhotos;
parent.querySelector('.chkEnableRealtimeMonitor').checked = options.EnableRealtimeMonitor;
parent.querySelector('.chkExtractChaptersDuringLibraryScan').checked = options.ExtractChapterImagesDuringLibraryScan;
parent.querySelector('.chkExtractChapterImages').checked = options.EnableChapterImageExtraction;
parent.querySelector('#chkDownloadImagesInAdvance').checked = options.DownloadImagesInAdvance;
parent.querySelector('#chkSaveLocal').checked = options.SaveLocalMetadata;
parent.querySelector('#chkImportMissingEpisodes').checked = options.ImportMissingEpisodes;
parent.querySelector('.chkAutomaticallyGroupSeries').checked = options.EnableAutomaticSeriesGrouping;
parent.querySelector('#chkEnableEmbeddedTitles').checked = options.EnableEmbeddedTitles;
parent.querySelector('#chkEnableEmbeddedEpisodeInfos').checked = options.EnableEmbeddedEpisodeInfos;
parent.querySelector('#chkSkipIfGraphicalSubsPresent').checked = options.SkipSubtitlesIfEmbeddedSubtitlesPresent;
parent.querySelector('#chkSaveSubtitlesLocally').checked = options.SaveSubtitlesWithMedia;
parent.querySelector('#chkSkipIfAudioTrackPresent').checked = options.SkipSubtitlesIfAudioTrackMatches;
parent.querySelector('#chkRequirePerfectMatch').checked = options.RequirePerfectSubtitleMatch;
Array.prototype.forEach.call(parent.querySelectorAll('.chkMetadataSaver'), function(elem) {
elem.checked = options.MetadataSavers ? -1 !== options.MetadataSavers.indexOf(elem.getAttribute('data-pluginname')) : 'true' === elem.getAttribute('data-defaultenabled');
2019-05-06 17:26:18 -07:00
});
2020-05-04 12:44:12 +02:00
Array.prototype.forEach.call(parent.querySelectorAll('.chkSubtitleLanguage'), function(elem) {
elem.checked = !!options.SubtitleDownloadLanguages && -1 !== options.SubtitleDownloadLanguages.indexOf(elem.getAttribute('data-lang'));
2019-05-06 17:26:18 -07:00
});
renderMetadataReaders(parent, getOrderedPlugins(parent.availableOptions.MetadataReaders, options.LocalMetadataReaderOrder || []));
renderMetadataFetchers(parent, parent.availableOptions, options);
renderImageFetchers(parent, parent.availableOptions, options);
renderSubtitleFetchers(parent, parent.availableOptions, options);
2018-10-23 01:05:09 +03:00
}
2019-05-06 17:26:18 -07:00
var currentLibraryOptions;
var currentAvailableOptions;
2018-10-23 01:05:09 +03:00
return {
embed: embed,
setContentType: setContentType,
getLibraryOptions: getLibraryOptions,
setLibraryOptions: setLibraryOptions,
setAdvancedVisible: setAdvancedVisible
};
2019-01-27 22:10:07 +01:00
});