mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2024-11-17 19:08:18 -07:00
update metadata editor
This commit is contained in:
parent
40b4010ce4
commit
ee7c67b429
@ -4,41 +4,204 @@
|
|||||||
var metadataEditorInfo;
|
var metadataEditorInfo;
|
||||||
var currentItem;
|
var currentItem;
|
||||||
|
|
||||||
function onWebSocketMessageReceived(e, data) {
|
|
||||||
|
|
||||||
var msg = data;
|
|
||||||
|
|
||||||
if (msg.MessageType === "LibraryChanged") {
|
|
||||||
|
|
||||||
if (msg.Data.ItemsUpdated.indexOf(currentItem.Id) != -1) {
|
|
||||||
|
|
||||||
console.log('Item updated - reloading metadata');
|
|
||||||
reload(currentDialog, currentItem.Id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function bindItemChanged() {
|
|
||||||
|
|
||||||
Events.on(ApiClient, "websocketmessage", onWebSocketMessageReceived);
|
|
||||||
}
|
|
||||||
|
|
||||||
function unbindItemChanged() {
|
|
||||||
|
|
||||||
Events.off(ApiClient, "websocketmessage", onWebSocketMessageReceived);
|
|
||||||
}
|
|
||||||
|
|
||||||
function closeDialog(isSubmitted) {
|
function closeDialog(isSubmitted) {
|
||||||
|
|
||||||
paperDialogHelper.close(currentDialog);
|
paperDialogHelper.close(currentDialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function submitUpdatedItem(form, item) {
|
||||||
|
|
||||||
|
function afterContentTypeUpdated() {
|
||||||
|
|
||||||
|
Dashboard.alert(Globalize.translate('MessageItemSaved'));
|
||||||
|
|
||||||
|
Dashboard.hideLoadingMsg();
|
||||||
|
closeDialog(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiClient.updateItem(item).then(function () {
|
||||||
|
|
||||||
|
var newContentType = $('#selectContentType', form).val() || '';
|
||||||
|
|
||||||
|
if ((metadataEditorInfo.ContentType || '') != newContentType) {
|
||||||
|
|
||||||
|
ApiClient.ajax({
|
||||||
|
|
||||||
|
url: ApiClient.getUrl('Items/' + item.Id + '/ContentType', {
|
||||||
|
ContentType: newContentType
|
||||||
|
}),
|
||||||
|
|
||||||
|
type: 'POST'
|
||||||
|
|
||||||
|
}).then(function () {
|
||||||
|
afterContentTypeUpdated();
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
afterContentTypeUpdated();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSelectedAirDays(form) {
|
||||||
|
return $('.chkAirDay:checked', form).map(function () {
|
||||||
|
return this.getAttribute('data-day');
|
||||||
|
}).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAlbumArtists(form) {
|
||||||
|
|
||||||
|
return $('#txtAlbumArtist', form).val().trim().split(';').filter(function (s) {
|
||||||
|
|
||||||
|
return s.length > 0;
|
||||||
|
|
||||||
|
}).map(function (a) {
|
||||||
|
|
||||||
|
return {
|
||||||
|
Name: a
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getArtists(form) {
|
||||||
|
|
||||||
|
return $('#txtArtist', form).val().trim().split(';').filter(function (s) {
|
||||||
|
|
||||||
|
return s.length > 0;
|
||||||
|
|
||||||
|
}).map(function (a) {
|
||||||
|
|
||||||
|
return {
|
||||||
|
Name: a
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDateFromForm(form, element, property) {
|
||||||
|
|
||||||
|
var val = $(element, form).val();
|
||||||
|
|
||||||
|
if (!val) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentItem[property]) {
|
||||||
|
|
||||||
|
var date = parseISO8601Date(currentItem[property], { toLocal: true });
|
||||||
|
|
||||||
|
var parts = date.toISOString().split('T');
|
||||||
|
|
||||||
|
// If the date is the same, preserve the time
|
||||||
|
if (parts[0].indexOf(val) == 0) {
|
||||||
|
|
||||||
|
var iso = parts[1];
|
||||||
|
|
||||||
|
val += 'T' + iso;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
function onSubmit() {
|
function onSubmit() {
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
Dashboard.showLoadingMsg();
|
||||||
|
|
||||||
var form = this;
|
var form = this;
|
||||||
|
|
||||||
|
try {
|
||||||
|
var item = {
|
||||||
|
Id: currentItem.Id,
|
||||||
|
Name: $('#txtName', form).val(),
|
||||||
|
ForcedSortName: $('#txtSortName', form).val(),
|
||||||
|
DisplayMediaType: $('#txtDisplayMediaType', form).val(),
|
||||||
|
CommunityRating: $('#txtCommunityRating', form).val(),
|
||||||
|
VoteCount: $('#txtCommunityVoteCount', form).val(),
|
||||||
|
HomePageUrl: $('#txtHomePageUrl', form).val(),
|
||||||
|
Budget: $('#txtBudget', form).val(),
|
||||||
|
Revenue: $('#txtRevenue', form).val(),
|
||||||
|
CriticRating: $('#txtCriticRating', form).val(),
|
||||||
|
CriticRatingSummary: $('#txtCriticRatingSummary', form).val(),
|
||||||
|
IndexNumber: $('#txtIndexNumber', form).val() || null,
|
||||||
|
DisplaySpecialsWithSeasons: form.querySelector('#chkDisplaySpecialsInline').checked,
|
||||||
|
AbsoluteEpisodeNumber: $('#txtAbsoluteEpisodeNumber', form).val(),
|
||||||
|
DvdEpisodeNumber: $('#txtDvdEpisodeNumber', form).val(),
|
||||||
|
DvdSeasonNumber: $('#txtDvdSeasonNumber', form).val(),
|
||||||
|
AirsBeforeSeasonNumber: $('#txtAirsBeforeSeason', form).val(),
|
||||||
|
AirsAfterSeasonNumber: $('#txtAirsAfterSeason', form).val(),
|
||||||
|
AirsBeforeEpisodeNumber: $('#txtAirsBeforeEpisode', form).val(),
|
||||||
|
ParentIndexNumber: $('#txtParentIndexNumber', form).val() || null,
|
||||||
|
DisplayOrder: $('#selectDisplayOrder', form).val(),
|
||||||
|
Players: $('#txtPlayers', form).val(),
|
||||||
|
Album: $('#txtAlbum', form).val(),
|
||||||
|
AlbumArtist: getAlbumArtists(form),
|
||||||
|
ArtistItems: getArtists(form),
|
||||||
|
Metascore: $('#txtMetascore', form).val(),
|
||||||
|
AwardSummary: $('#txtAwardSummary', form).val(),
|
||||||
|
Overview: $('#txtOverview', form).val(),
|
||||||
|
ShortOverview: $('#txtShortOverview', form).val(),
|
||||||
|
Status: $('#selectStatus', form).val(),
|
||||||
|
AirDays: getSelectedAirDays(form),
|
||||||
|
AirTime: $('#txtAirTime', form).val(),
|
||||||
|
Genres: editableListViewValues($("#listGenres", form)),
|
||||||
|
ProductionLocations: editableListViewValues($("#listCountries", form)),
|
||||||
|
Tags: editableListViewValues($("#listTags", form)),
|
||||||
|
Keywords: editableListViewValues($("#listKeywords", form)),
|
||||||
|
Studios: editableListViewValues($("#listStudios", form)).map(function (element) { return { Name: element }; }),
|
||||||
|
|
||||||
|
PremiereDate: getDateFromForm(form, '#txtPremiereDate', 'PremiereDate'),
|
||||||
|
DateCreated: getDateFromForm(form, '#txtDateAdded', 'DateCreated'),
|
||||||
|
EndDate: getDateFromForm(form, '#txtEndDate', 'EndDate'),
|
||||||
|
ProductionYear: $('#txtProductionYear', form).val(),
|
||||||
|
AspectRatio: $('#txtOriginalAspectRatio', form).val(),
|
||||||
|
Video3DFormat: $('#select3dFormat', form).val(),
|
||||||
|
|
||||||
|
OfficialRating: $('#selectOfficialRating', form).val(),
|
||||||
|
CustomRating: $('#selectCustomRating', form).val(),
|
||||||
|
People: currentItem.People,
|
||||||
|
LockData: form.querySelector("#chkLockData").checked,
|
||||||
|
LockedFields: $('.selectLockedField', form).get().filter(function (c) {
|
||||||
|
return !c.checked;
|
||||||
|
}).map(function (c) {
|
||||||
|
return c.getAttribute('data-value');
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
item.ProviderIds = $.extend({}, currentItem.ProviderIds || {});
|
||||||
|
|
||||||
|
$('.txtExternalId', form).each(function () {
|
||||||
|
|
||||||
|
var providerkey = this.getAttribute('data-providerkey');
|
||||||
|
|
||||||
|
item.ProviderIds[providerkey] = this.value;
|
||||||
|
});
|
||||||
|
|
||||||
|
item.PreferredMetadataLanguage = $('#selectLanguage', form).val();
|
||||||
|
item.PreferredMetadataCountryCode = $('#selectCountry', form).val();
|
||||||
|
|
||||||
|
if (currentItem.Type == "Person") {
|
||||||
|
|
||||||
|
var placeOfBirth = $('#txtPlaceOfBirth', form).val();
|
||||||
|
|
||||||
|
item.ProductionLocations = placeOfBirth ? [placeOfBirth] : [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentItem.Type == "Series") {
|
||||||
|
|
||||||
|
// 600000000
|
||||||
|
var seriesRuntime = $('#txtSeriesRuntime', form).val();
|
||||||
|
item.RunTimeTicks = seriesRuntime ? (seriesRuntime * 600000000) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var tagline = $('#txtTagline', form).val();
|
||||||
|
item.Taglines = tagline ? [tagline] : [];
|
||||||
|
|
||||||
|
submitUpdatedItem(form, item);
|
||||||
|
} catch (err) {
|
||||||
|
alert(err);
|
||||||
|
}
|
||||||
|
|
||||||
// Disable default form submission
|
// Disable default form submission
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -103,6 +266,11 @@
|
|||||||
closeDialog(false);
|
closeDialog(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
context.querySelector('.btnHeaderSave').addEventListener('click', function (e) {
|
||||||
|
|
||||||
|
context.querySelector('.btnSave').click();
|
||||||
|
});
|
||||||
|
|
||||||
context.querySelector('#chkLockData').addEventListener('click', function (e) {
|
context.querySelector('#chkLockData').addEventListener('click', function (e) {
|
||||||
|
|
||||||
if (!e.target.checked) {
|
if (!e.target.checked) {
|
||||||
@ -831,7 +999,6 @@
|
|||||||
|
|
||||||
function reload(context, itemId) {
|
function reload(context, itemId) {
|
||||||
|
|
||||||
unbindItemChanged();
|
|
||||||
Dashboard.showLoadingMsg();
|
Dashboard.showLoadingMsg();
|
||||||
|
|
||||||
Promise.all([getItem(itemId), getEditorConfig(itemId)]).then(function (responses) {
|
Promise.all([getItem(itemId), getEditorConfig(itemId)]).then(function (responses) {
|
||||||
@ -875,7 +1042,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
Dashboard.hideLoadingMsg();
|
||||||
bindItemChanged(context);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,10 @@
|
|||||||
<div class="dialogHeaderTitle">
|
<div class="dialogHeaderTitle">
|
||||||
${ButtonEdit}
|
${ButtonEdit}
|
||||||
</div>
|
</div>
|
||||||
|
<paper-button class="btnHeaderSave accent" tabindex="-1" style="margin-left:auto;">
|
||||||
|
<iron-icon icon="check"></iron-icon>
|
||||||
|
<span>${ButtonSave}</span>
|
||||||
|
</paper-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form class="editItemMetadataForm editMetadataForm ">
|
<form class="editItemMetadataForm editMetadataForm ">
|
||||||
|
Loading…
Reference in New Issue
Block a user