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

172 lines
5.5 KiB
JavaScript
Raw Normal View History

2016-02-12 23:34:47 -05:00
define(['paperdialoghelper', 'paper-checkbox', 'paper-input', 'paper-button'], function (paperDialogHelper) {
2016-02-26 01:36:03 -05:00
var extractedName;
var extractedYear;
var currentNewItem;
var existingSeriesHtml;
2016-02-12 23:34:47 -05:00
function onApiFailure(e) {
2016-02-12 23:34:47 -05:00
Dashboard.hideLoadingMsg();
2016-02-12 23:34:47 -05:00
Dashboard.alert({
title: Globalize.translate('AutoOrganizeError'),
message: Globalize.translate('ErrorOrganizingFileWithErrorCode', e.getResponseHeader("X-Application-Error-Code"))
});
}
2016-02-12 23:34:47 -05:00
function initEpisodeForm(context, item) {
2016-02-21 01:25:25 -05:00
if (!item.ExtractedName || item.ExtractedName.length < 4) {
context.querySelector('.fldRemember').classList.add('hide');
}
else {
context.querySelector('.fldRemember').classList.remove('hide');
}
2016-02-26 14:23:00 -05:00
context.querySelector('.inputFile').innerHTML = item.OriginalFileName;
2016-02-26 14:23:00 -05:00
context.querySelector('#txtSeason').value = item.ExtractedSeasonNumber;
context.querySelector('#txtEpisode').value = item.ExtractedEpisodeNumber;
context.querySelector('#txtEndingEpisode').value = item.ExtractedEndingEpisodeNumber;
context.querySelector('.extractedName').value = item.ExtractedName;
2016-02-26 01:36:03 -05:00
extractedName = item.ExtractedName;
extractedYear = item.ExtractedYear;
2016-02-26 14:23:00 -05:00
context.querySelector('#chkRememberCorrection').checked = false;
2016-02-26 14:23:00 -05:00
context.querySelector('#hfResultId').value = item.Id;
2016-02-12 23:34:47 -05:00
ApiClient.getItems(null, {
recursive: true,
includeItemTypes: 'Series',
sortBy: 'SortName'
2016-02-12 23:34:47 -05:00
}).then(function (result) {
2016-02-26 01:36:03 -05:00
existingSeriesHtml = result.Items.map(function (s) {
2016-02-12 23:34:47 -05:00
return '<option value="' + s.Id + '">' + s.Name + '</option>';
2016-02-12 23:34:47 -05:00
}).join('');
2016-02-26 01:36:03 -05:00
existingSeriesHtml = '<option value=""></option>' + existingSeriesHtml;
2016-02-26 14:23:00 -05:00
context.querySelector('#selectSeries').innerHTML = existingSeriesHtml;
}, onApiFailure);
}
2016-02-12 23:34:47 -05:00
function submitEpisodeForm(dlg) {
2016-02-12 23:34:47 -05:00
Dashboard.showLoadingMsg();
2016-02-26 14:23:00 -05:00
var resultId = dlg.querySelector('#hfResultId').value;
2016-02-12 23:34:47 -05:00
var options = {
2016-02-26 14:23:00 -05:00
SeriesId: dlg.querySelector('#selectSeries').value,
SeasonNumber: dlg.querySelector('#txtSeason').value,
EpisodeNumber: dlg.querySelector('#txtEpisode').value,
EndingEpisodeNumber: dlg.querySelector('#txtEndingEpisode').value,
RememberCorrection: dlg.querySelector('#chkRememberCorrection').checked
};
2016-02-12 23:34:47 -05:00
ApiClient.performEpisodeOrganization(resultId, options).then(function () {
Dashboard.hideLoadingMsg();
2016-02-12 23:34:47 -05:00
dlg.submitted = true;
paperDialogHelper.close(dlg);
}, onApiFailure);
}
2016-02-26 01:36:03 -05:00
function showNewSeriesDialog(dlg) {
require(['components/itemidentifier/itemidentifier'], function (itemidentifier) {
itemidentifier.showFindNew(extractedName, extractedYear, 'Series').then(function (newItem) {
2016-02-26 14:23:00 -05:00
if (newItem != null) {
currentNewItem = newItem;
var seriesHtml = existingSeriesHtml;
2016-02-26 01:36:03 -05:00
seriesHtml = seriesHtml + '<option selected value="##NEW##">' + currentNewItem.Name + '</option>';
2016-02-26 14:23:00 -05:00
dlg.querySelector('#selectSeries').innerHTML = seriesHtml;
2016-02-26 01:36:03 -05:00
}
});
});
}
2016-02-12 23:34:47 -05:00
return {
show: function (item) {
return new Promise(function (resolve, reject) {
2016-02-26 01:36:03 -05:00
extractedName = null;
extractedYear = null;
currentNewItem = null;
existingSeriesHtml = null;
2016-02-12 23:34:47 -05:00
var xhr = new XMLHttpRequest();
xhr.open('GET', 'components/fileorganizer/fileorganizer.template.html', true);
2016-02-12 23:34:47 -05:00
xhr.onload = function (e) {
2016-02-12 23:34:47 -05:00
var template = this.response;
var dlg = paperDialogHelper.createDialog({
removeOnClose: true,
size: 'small'
});
2016-02-12 23:34:47 -05:00
dlg.classList.add('ui-body-a');
dlg.classList.add('background-theme-a');
2016-02-12 23:34:47 -05:00
dlg.classList.add('formDialog');
2016-02-12 23:34:47 -05:00
var html = '';
2016-02-12 23:34:47 -05:00
html += Globalize.translateDocument(template);
2016-02-12 23:34:47 -05:00
dlg.innerHTML = html;
document.body.appendChild(dlg);
2016-02-12 23:34:47 -05:00
dlg.querySelector('.dialogHeaderTitle').innerHTML = Globalize.translate('FileOrganizeManually');
2016-02-12 23:34:47 -05:00
paperDialogHelper.open(dlg);
2016-02-12 23:34:47 -05:00
dlg.addEventListener('iron-overlay-closed', function () {
2016-02-12 23:34:47 -05:00
if (dlg.submitted) {
resolve();
} else {
reject();
}
});
2016-02-12 23:34:47 -05:00
dlg.querySelector('.btnCancel').addEventListener('click', function (e) {
2016-02-12 23:34:47 -05:00
paperDialogHelper.close(dlg);
});
2016-02-12 23:34:47 -05:00
dlg.querySelector('form').addEventListener('submit', function (e) {
2016-02-12 23:34:47 -05:00
submitEpisodeForm(dlg);
2016-02-12 23:34:47 -05:00
e.preventDefault();
return false;
});
2016-02-26 01:36:03 -05:00
dlg.querySelector('#btnNewSeries').addEventListener('click', function (e) {
showNewSeriesDialog(dlg);
});
2016-02-12 23:34:47 -05:00
initEpisodeForm(dlg, item);
}
2016-02-12 23:34:47 -05:00
xhr.send();
});
}
};
2016-02-12 23:34:47 -05:00
});