mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2024-11-18 03:18:19 -07:00
182 lines
7.1 KiB
JavaScript
182 lines
7.1 KiB
JavaScript
define([], function () {
|
|
'use strict';
|
|
|
|
function getEpisodeFileName(value, enableMultiEpisode) {
|
|
|
|
var seriesName = "Series Name";
|
|
var episodeTitle = "Episode Four";
|
|
|
|
var result = value.replace('%sn', seriesName)
|
|
.replace('%s.n', seriesName.replace(' ', '.'))
|
|
.replace('%s_n', seriesName.replace(' ', '_'))
|
|
.replace('%s', '1')
|
|
.replace('%0s', '01')
|
|
.replace('%00s', '001')
|
|
.replace('%ext', 'mkv')
|
|
.replace('%en', episodeTitle)
|
|
.replace('%e.n', episodeTitle.replace(' ', '.'))
|
|
.replace('%e_n', episodeTitle.replace(' ', '_'));
|
|
|
|
if (enableMultiEpisode) {
|
|
result = result
|
|
.replace('%ed', '5')
|
|
.replace('%0ed', '05')
|
|
.replace('%00ed', '005');
|
|
}
|
|
|
|
return result
|
|
.replace('%e', '4')
|
|
.replace('%0e', '04')
|
|
.replace('%00e', '004');
|
|
}
|
|
|
|
function loadPage(view, config) {
|
|
|
|
var tvOptions = config.TvOptions;
|
|
|
|
view.querySelector('#chkEnableTvSorting').checked = tvOptions.IsEnabled;
|
|
view.querySelector('#chkOverwriteExistingEpisodes').checked = tvOptions.OverwriteExistingEpisodes;
|
|
view.querySelector('#chkDeleteEmptyFolders').checked = tvOptions.DeleteEmptyFolders;
|
|
|
|
view.querySelector('#txtMinFileSize').value = tvOptions.MinFileSizeMb;
|
|
view.querySelector('#txtSeasonFolderPattern').value = tvOptions.SeasonFolderPattern;
|
|
view.querySelector('#txtSeasonZeroName').value = tvOptions.SeasonZeroFolderName;
|
|
view.querySelector('#txtWatchFolder').value = tvOptions.WatchLocations[0] || '';
|
|
|
|
view.querySelector('#txtEpisodePattern').value = tvOptions.EpisodeNamePattern;
|
|
view.querySelector('#txtMultiEpisodePattern').value = tvOptions.MultiEpisodeNamePattern;
|
|
|
|
view.querySelector('#txtDeleteLeftOverFiles').value = tvOptions.LeftOverFileExtensionsToDelete.join(';');
|
|
|
|
view.querySelector('#copyOrMoveFile').value = tvOptions.CopyOriginalFile.toString();
|
|
}
|
|
|
|
function onSubmit(view) {
|
|
|
|
ApiClient.getNamedConfiguration('autoorganize').then(function (config) {
|
|
|
|
var tvOptions = config.TvOptions;
|
|
|
|
tvOptions.IsEnabled = view.querySelector('#chkEnableTvSorting').checked;
|
|
tvOptions.OverwriteExistingEpisodes = view.querySelector('#chkOverwriteExistingEpisodes').checked;
|
|
tvOptions.DeleteEmptyFolders = view.querySelector('#chkDeleteEmptyFolders').checked;
|
|
|
|
tvOptions.MinFileSizeMb = view.querySelector('#txtMinFileSize').value;
|
|
tvOptions.SeasonFolderPattern = view.querySelector('#txtSeasonFolderPattern').value;
|
|
tvOptions.SeasonZeroFolderName = view.querySelector('#txtSeasonZeroName').value;
|
|
|
|
tvOptions.EpisodeNamePattern = view.querySelector('#txtEpisodePattern').value;
|
|
tvOptions.MultiEpisodeNamePattern = view.querySelector('#txtMultiEpisodePattern').value;
|
|
|
|
tvOptions.LeftOverFileExtensionsToDelete = view.querySelector('#txtDeleteLeftOverFiles').value.split(';');
|
|
|
|
var watchLocation = view.querySelector('#txtWatchFolder').value;
|
|
tvOptions.WatchLocations = watchLocation ? [watchLocation] : [];
|
|
|
|
tvOptions.CopyOriginalFile = view.querySelector('#copyOrMoveFile').value;
|
|
|
|
ApiClient.updateNamedConfiguration('autoorganize', config).then(Dashboard.processServerConfigurationUpdateResult, Dashboard.processErrorResponse);
|
|
});
|
|
|
|
return false;
|
|
}
|
|
|
|
function getTabs() {
|
|
return [
|
|
{
|
|
href: 'autoorganizelog.html',
|
|
name: Globalize.translate('TabActivityLog')
|
|
},
|
|
{
|
|
href: 'autoorganizetv.html',
|
|
name: Globalize.translate('TabTV')
|
|
},
|
|
{
|
|
href: 'autoorganizesmart.html',
|
|
name: Globalize.translate('TabSmartMatches')
|
|
}];
|
|
}
|
|
|
|
return function (view, params) {
|
|
|
|
|
|
function updateSeasonPatternHelp() {
|
|
|
|
var value = view.querySelector('#txtSeasonFolderPattern').value;
|
|
value = value.replace('%s', '1').replace('%0s', '01').replace('%00s', '001');
|
|
|
|
var replacementHtmlResult = Globalize.translate('OrganizePatternResult').replace('{0}', value);
|
|
|
|
view.querySelector('.seasonFolderFieldDescription').innerHTML = replacementHtmlResult;
|
|
}
|
|
|
|
function updateEpisodePatternHelp() {
|
|
|
|
var value = view.querySelector('#txtEpisodePattern').value;
|
|
var fileName = getEpisodeFileName(value, false);
|
|
|
|
var replacementHtmlResult = Globalize.translate('OrganizePatternResult').replace('{0}', fileName);
|
|
|
|
view.querySelector('.episodePatternDescription').innerHTML = replacementHtmlResult;
|
|
}
|
|
|
|
function updateMultiEpisodePatternHelp() {
|
|
|
|
var value = view.querySelector('#txtMultiEpisodePattern').value;
|
|
var fileName = getEpisodeFileName(value, true);
|
|
|
|
var replacementHtmlResult = Globalize.translate('OrganizePatternResult').replace('{0}', fileName);
|
|
|
|
view.querySelector('.multiEpisodePatternDescription').innerHTML = replacementHtmlResult;
|
|
}
|
|
|
|
function selectWatchFolder(e) {
|
|
|
|
require(['directorybrowser'], function (directoryBrowser) {
|
|
|
|
var picker = new directoryBrowser();
|
|
|
|
picker.show({
|
|
|
|
callback: function (path) {
|
|
|
|
if (path) {
|
|
|
|
view.querySelector('#txtWatchFolder').value = path;
|
|
}
|
|
picker.close();
|
|
},
|
|
header: Globalize.translate('HeaderSelectWatchFolder'),
|
|
instruction: Globalize.translate('HeaderSelectWatchFolderHelp')
|
|
});
|
|
});
|
|
}
|
|
|
|
view.querySelector('#txtSeasonFolderPattern').addEventListener('change', updateSeasonPatternHelp);
|
|
view.querySelector('#txtSeasonFolderPattern').addEventListener('keyup', updateSeasonPatternHelp);
|
|
view.querySelector('#txtEpisodePattern').addEventListener('change', updateEpisodePatternHelp);
|
|
view.querySelector('#txtEpisodePattern').addEventListener('keyup', updateEpisodePatternHelp);
|
|
view.querySelector('#txtMultiEpisodePattern').addEventListener('change', updateMultiEpisodePatternHelp);
|
|
view.querySelector('#txtMultiEpisodePattern').addEventListener('keyup', updateMultiEpisodePatternHelp);
|
|
view.querySelector('#btnSelectWatchFolder').addEventListener('click', selectWatchFolder);
|
|
|
|
view.querySelector('.libraryFileOrganizerForm').addEventListener('submit', function (e) {
|
|
|
|
e.preventDefault();
|
|
onSubmit(view);
|
|
return false;
|
|
});
|
|
|
|
view.addEventListener('viewshow', function (e) {
|
|
|
|
LibraryMenu.setTabs('autoorganize', 1, getTabs);
|
|
|
|
ApiClient.getNamedConfiguration('autoorganize').then(function (config) {
|
|
loadPage(view, config);
|
|
updateSeasonPatternHelp();
|
|
updateEpisodePatternHelp();
|
|
updateMultiEpisodePatternHelp();
|
|
});
|
|
});
|
|
};
|
|
}); |