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

Merge pull request #1450 from MediaBrowser/dev

Dev
This commit is contained in:
Luke 2016-02-13 10:59:44 -05:00
commit 33ee3d8ee3
29 changed files with 269 additions and 185 deletions

View file

@ -1,11 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/metadataeditor.css">
<title>${TitleAutoOrganize}</title>
</head>
<body>
<div id="libraryFileOrganizerLogPage" data-role="page" class="page type-interior organizePage" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Auto-Organize" data-require="jqmtable,jqmpopup,scripts/autoorganizelog,scripts/taskbutton,detailtablecss,paper-input,paper-checkbox">
<div id="libraryFileOrganizerLogPage" data-role="page" class="page type-interior organizePage" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Auto-Organize" data-require="jqmtable,scripts/autoorganizelog,scripts/taskbutton,detailtablecss">
<div data-role="content">
<div class="content-primary">
@ -52,48 +52,6 @@
</div>
</div>
</div>
<div data-role="popup" class="popup episodeCorrectionPopup">
<div class="ui-bar-a" style="text-align: center; padding: 0 1em;">
<h3>${HeaderEpisodeOrganization}</h3>
</div>
<div data-role="content">
<form class="episodeCorrectionForm" style="padding:0 .5em;">
<p><span class="inputFile"></span></p>
<div style="margin: 1em 0 1em; min-width: 250px;">
<label for="selectSeries" class="selectLabel">${LabelSeries}</label>
<select id="selectSeries" data-mini="true" required="required"></select>
</div>
<div style="margin: 1em 0;">
<paper-input id="txtSeason" type="number" pattern="[0-9]*" required min="0" label="${LabelSeasonNumber}"></paper-input>
</div>
<div style="margin: 1em 0;">
<paper-input id="txtEpisode" type="number" pattern="[0-9]*" required min="0" label="${LabelEpisodeNumber}"></paper-input>
</div>
<div style="margin: 1em 0;">
<paper-input id="txtEndingEpisode" type="number" pattern="[0-9]*" min="0" label="${LabelEndingEpisodeNumber}"></paper-input>
<div class="fieldDescription">${LabelEndingEpisodeNumberHelp}</div>
</div>
<br/>
<div>
<paper-checkbox type="checkbox" id="chkRememberCorrection">${OptionRememberOrganizeCorrection}</paper-checkbox>
</div>
<br />
<button type="submit" data-theme="b" data-icon="check" data-mini="true">
${ButtonOk}
</button>
<button type="button" data-icon="delete" onclick="$(this).parents('.popup').popup('close');" data-mini="true">
${ButtonCancel}
</button>
<input id="hfResultId" type="hidden" />
</form>
</div>
</div>
</div>
</body>
</html>

View file

@ -4,7 +4,7 @@
<title>${TitleAutoOrganize}</title>
</head>
<body>
<div id="libraryFileOrganizerSmartMatchPage" data-role="page" class="page type-interior organizePage" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Auto-Organize" data-require="scripts/autoorganizesmart,jqmlistview">
<div id="libraryFileOrganizerSmartMatchPage" data-role="page" class="page type-interior organizePage" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Auto-Organize" data-require="scripts/autoorganizesmart,paper-icon-item,paper-fab,paper-item-body">
<div data-role="content">
<div class="content-primary">

View file

@ -16,12 +16,12 @@
},
"devDependencies": {},
"ignore": [],
"version": "1.0.35",
"_release": "1.0.35",
"version": "1.0.37",
"_release": "1.0.37",
"_resolution": {
"type": "version",
"tag": "1.0.35",
"commit": "d84b62c2a98faed179e07ef805e54cd7e6d2e036"
"tag": "1.0.37",
"commit": "b383fff379b92417525a3295ebbe3b7db9e0b1a4"
},
"_source": "git://github.com/MediaBrowser/Emby.ApiClient.Javascript.git",
"_target": "~1.0.3",

View file

@ -3428,12 +3428,12 @@
});
};
self.deleteSmartMatchEntry = function (name, options) {
self.deleteSmartMatchEntries = function (entries) {
var url = self.getUrl("Library/FileOrganizations/SmartMatches", options || {});
var url = self.getUrl("Library/FileOrganizations/SmartMatches/Delete");
var postData = {
Name: name
Entries: entries
};
return self.ajax({

View file

@ -200,7 +200,7 @@
var title = items.length ? Globalize.translate('HeaderAddToCollection') : Globalize.translate('HeaderNewCollection');
html += '<div class="dialogHeader">';
html += '<paper-icon-button icon="close" class="btnCancel" tabindex="-1"></paper-icon-button>';
html += '<paper-icon-button icon="arrow-back" class="btnCancel" tabindex="-1"></paper-icon-button>';
html += '<div class="dialogHeaderTitle">';
html += title;
html += '</div>';

View file

@ -0,0 +1,130 @@
define(['paperdialoghelper', 'paper-checkbox', 'paper-input', 'paper-button'], function (paperDialogHelper) {
function onApiFailure(e) {
Dashboard.hideLoadingMsg();
Dashboard.alert({
title: Globalize.translate('AutoOrganizeError'),
message: Globalize.translate('ErrorOrganizingFileWithErrorCode', e.getResponseHeader("X-Application-Error-Code"))
});
}
function initEpisodeForm(context, item) {
$('.inputFile', context).html(item.OriginalFileName);
$('#txtSeason', context).val(item.ExtractedSeasonNumber);
$('#txtEpisode', context).val(item.ExtractedEpisodeNumber);
$('#txtEndingEpisode', context).val(item.ExtractedEndingEpisodeNumber);
$('#chkRememberCorrection', context).val(false);
$('#hfResultId', context).val(item.Id);
ApiClient.getItems(null, {
recursive: true,
includeItemTypes: 'Series',
sortBy: 'SortName'
}).then(function (result) {
var seriesHtml = result.Items.map(function (s) {
return '<option value="' + s.Id + '">' + s.Name + '</option>';
}).join('');
seriesHtml = '<option value=""></option>' + seriesHtml;
$('#selectSeries', context).html(seriesHtml);
}, onApiFailure);
}
function submitEpisodeForm(dlg) {
Dashboard.showLoadingMsg();
var resultId = $('#hfResultId', dlg).val();
var options = {
SeriesId: $('#selectSeries', dlg).val(),
SeasonNumber: $('#txtSeason', dlg).val(),
EpisodeNumber: $('#txtEpisode', dlg).val(),
EndingEpisodeNumber: $('#txtEndingEpisode', dlg).val(),
RememberCorrection: $('#chkRememberCorrection', dlg).checked()
};
ApiClient.performEpisodeOrganization(resultId, options).then(function () {
Dashboard.hideLoadingMsg();
dlg.submitted = true;
paperDialogHelper.close(dlg);
}, onApiFailure);
}
return {
show: function (item) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'components/fileorganizer/fileorganizer.template.html', true);
xhr.onload = function (e) {
var template = this.response;
var dlg = paperDialogHelper.createDialog({
removeOnClose: true,
size: 'small'
});
dlg.classList.add('ui-body-a');
dlg.classList.add('background-theme-a');
dlg.classList.add('formDialog');
var html = '';
html += Globalize.translateDocument(template);
dlg.innerHTML = html;
document.body.appendChild(dlg);
dlg.querySelector('.dialogHeaderTitle').innerHTML = Globalize.translate('FileOrganizeManually');
paperDialogHelper.open(dlg);
dlg.addEventListener('iron-overlay-closed', function () {
if (dlg.submitted) {
resolve();
} else {
reject();
}
});
dlg.querySelector('.btnCancel').addEventListener('click', function (e) {
paperDialogHelper.close(dlg);
});
dlg.querySelector('form').addEventListener('submit', function (e) {
submitEpisodeForm(dlg);
e.preventDefault();
return false;
});
initEpisodeForm(dlg, item);
}
xhr.send();
});
}
};
});

View file

@ -0,0 +1,34 @@
<div class="dialogHeader">
<paper-icon-button icon="arrow-back" class="btnCancel" tabindex="-1"></paper-icon-button>
<div class="dialogHeaderTitle">
</div>
</div>
<form class="episodeCorrectionForm" style="margin:auto;">
<p><span class="inputFile"></span></p>
<div style="margin: 1em 0 1em; min-width: 250px;">
<label for="selectSeries" class="selectLabel">${LabelSeries}</label>
<select id="selectSeries" data-mini="true" required="required"></select>
</div>
<div style="margin: 1em 0;">
<paper-input id="txtSeason" type="number" pattern="[0-9]*" required min="0" label="${LabelSeasonNumber}"></paper-input>
</div>
<div style="margin: 1em 0;">
<paper-input id="txtEpisode" type="number" pattern="[0-9]*" required min="0" label="${LabelEpisodeNumber}"></paper-input>
</div>
<div style="margin: 1em 0;">
<paper-input id="txtEndingEpisode" type="number" pattern="[0-9]*" min="0" label="${LabelEndingEpisodeNumber}"></paper-input>
<div class="fieldDescription">${LabelEndingEpisodeNumberHelp}</div>
</div>
<br />
<div>
<paper-checkbox type="checkbox" id="chkRememberCorrection">${OptionRememberOrganizeCorrection}</paper-checkbox>
</div>
<br />
<button type="submit" data-role="none" class="clearButton">
<paper-button raised class="submit block"><iron-icon icon="check"></iron-icon><span>${ButtonOk}</span></paper-button>
</button>
<input id="hfResultId" type="hidden" />
</form>

View file

@ -109,8 +109,8 @@
html += Globalize.translateDocument(template);
dlg.innerHTML = html;
// needed for the collapsible
document.body.appendChild(dlg);
// needed for the collapsible
$(dlg.querySelector('form')).trigger('create');
paperDialogHelper.open(dlg);

View file

@ -1,5 +1,5 @@
<div class="dialogHeader">
<paper-icon-button icon="close" class="btnCancel" tabindex="-1"></paper-icon-button>
<paper-icon-button icon="arrow-back" class="btnCancel" tabindex="-1"></paper-icon-button>
<div class="dialogHeaderTitle">
${HeaderInviteUser}
</div>

View file

@ -333,7 +333,7 @@
currentDeferred.resolveWith(null, [hasChanges]);
}
window.ItemIdentifier = {
return {
show: function (itemId) {
var deferred = DeferredBuilder.Deferred();

View file

@ -1,5 +1,5 @@
<div class="dialogHeader">
<paper-icon-button icon="close" class="btnCancel" tabindex="-1"></paper-icon-button>
<paper-icon-button icon="arrow-back" class="btnCancel" tabindex="-1"></paper-icon-button>
<div class="dialogHeaderTitle">
</div>
</div>

View file

@ -1,5 +1,5 @@
<div class="dialogHeader">
<paper-icon-button icon="close" class="btnCancel" tabindex="-1"></paper-icon-button>
<paper-icon-button icon="arrow-back" class="btnCancel" tabindex="-1"></paper-icon-button>
<div class="dialogHeaderTitle">
${ButtonEdit}
</div>

View file

@ -1,5 +1,5 @@
<div class="dialogHeader">
<paper-icon-button icon="close" class="btnCancel" tabindex="-1"></paper-icon-button>
<paper-icon-button icon="arrow-back" class="btnCancel" tabindex="-1"></paper-icon-button>
<div class="dialogHeaderTitle">
${ButtonEdit}
</div>

View file

@ -206,7 +206,7 @@
var title = Globalize.translate('HeaderAddToPlaylist');
html += '<div class="dialogHeader">';
html += '<paper-icon-button icon="close" class="btnCancel" tabindex="-1"></paper-icon-button>';
html += '<paper-icon-button icon="arrow-back" class="btnCancel" tabindex="-1"></paper-icon-button>';
html += '<div class="dialogHeaderTitle">';
html += title;
html += '</div>';

View file

@ -227,6 +227,12 @@
}
}
if (AppInfo.enableSupporterMembership) {
context.querySelector('.btnSupporterForConverting a').href = 'https://emby.media/premiere';
} else {
context.querySelector('.btnSupporterForConverting a').href = '#';
}
ApiClient.getNamedConfiguration("livetv").then(function (config) {
$('#chkConvertRecordings', context).checked(config.EnableRecordingEncoding);

View file

@ -1,5 +1,5 @@
<div class="dialogHeader">
<paper-icon-button icon="close" class="btnCancel" tabindex="-1"></paper-icon-button>
<paper-icon-button icon="arrow-back" class="btnCancel" tabindex="-1"></paper-icon-button>
<div class="dialogHeaderTitle">
${HeaderNewRecording}
</div>
@ -49,7 +49,7 @@
<br />
<paper-checkbox id="chkConvertRecordings">${OptionConvertRecordingsToStreamingFormat}</paper-checkbox>
<div class="fieldDescription paperCheckboxFieldDescription">${OptionConvertRecordingsToStreamingFormatHelp}</div>
<div class="fieldDescription paperCheckboxFieldDescription hide btnSupporter"><a href="http://emby.media/premiere" target="_blank">${ButtonLearnMore}</a></div>
<div class="fieldDescription paperCheckboxFieldDescription btnSupporterForConverting"><a href="https://emby.media/premiere" target="_blank" class="accent">${FeatureRequiresEmbyPremiere}</a></div>
</div>
<br />
<div class="advancedToggle hide">
@ -69,7 +69,10 @@
<a class="clearLink btnSupporter hide" href="http://emby.media/premiere" target="_blank"><paper-button raised class="accent block"><iron-icon icon="check"></iron-icon><span>${HeaderBecomeProjectSupporter}</span></paper-button></a>
</div>
<button type="submit" data-role="none" class="clearButton btnSubmitContainer">
<paper-button raised class="submit block" style="background:#cc3333;"><iron-icon icon="videocam"></iron-icon><span>${ButtonRecord}</span></paper-button>
<paper-button raised class="submit block" style="background:#cc3333;" autoFocus><iron-icon icon="videocam"></iron-icon><span>${ButtonRecord}</span></paper-button>
</button>
</div>
<br />
<br />
<br />
</form>

View file

@ -641,6 +641,10 @@ h1 a:hover {
text-decoration: underline;
}
.ui-body-b a.accent {
color: #52B54B !important;
}
.ui-listview li h3 {
font-weight: 400;
}

View file

@ -55,7 +55,7 @@
<div>
<paper-checkbox id="chkConvertRecordings">${OptionConvertRecordingsToStreamingFormat}</paper-checkbox>
<div class="fieldDescription paperCheckboxFieldDescription">${OptionConvertRecordingsToStreamingFormatHelp}</div>
<div class="fieldDescription paperCheckboxFieldDescription"><a class="lnkSupporterLearnMore" href="http://emby.media/premiere" target="_blank" style="display:none;">${ButtonLearnMore}</a></div>
<div class="fieldDescription paperCheckboxFieldDescription btnSupporterForConverting"><a href="https://emby.media/premiere" target="_blank" class="accent">${FeatureRequiresEmbyPremiere}</a></div>
</div>
<br />
<br />

View file

@ -52,43 +52,17 @@
function organizeEpsiodeWithCorrections(page, item) {
Dashboard.showLoadingMsg();
ApiClient.getItems(null, {
recursive: true,
includeItemTypes: 'Series',
sortBy: 'SortName'
}).then(function (result) {
Dashboard.hideLoadingMsg();
showEpisodeCorrectionPopup(page, item, result.Items);
}, onApiFailure);
showEpisodeCorrectionPopup(page, item);
}
function showEpisodeCorrectionPopup(page, item, allSeries) {
function showEpisodeCorrectionPopup(page, item) {
var popup = $('.episodeCorrectionPopup', page).popup("open");
require(['components/fileorganizer/fileorganizer'], function (fileorganizer) {
$('.inputFile', popup).html(item.OriginalFileName);
$('#txtSeason', popup).val(item.ExtractedSeasonNumber);
$('#txtEpisode', popup).val(item.ExtractedEpisodeNumber);
$('#txtEndingEpisode', popup).val(item.ExtractedEndingEpisodeNumber);
$('#chkRememberCorrection', popup).val(false);
$('#hfResultId', popup).val(item.Id);
var seriesHtml = allSeries.map(function (s) {
return '<option value="' + s.Id + '">' + s.Name + '</option>';
}).join('');
seriesHtml = '<option value=""></option>' + seriesHtml;
$('#selectSeries', popup).html(seriesHtml);
fileorganizer.show(item).then(function () {
reloadItems(page);
});
});
}
function organizeFile(page, id) {
@ -131,38 +105,9 @@
}, onApiFailure);
}
});
}
function submitEpisodeForm(form) {
Dashboard.showLoadingMsg();
var page = $(form).parents('.page');
var resultId = $('#hfResultId', form).val();
var options = {
SeriesId: $('#selectSeries', form).val(),
SeasonNumber: $('#txtSeason', form).val(),
EpisodeNumber: $('#txtEpisode', form).val(),
EndingEpisodeNumber: $('#txtEndingEpisode', form).val(),
RememberCorrection: $('#chkRememberCorrection', form).checked()
};
ApiClient.performEpisodeOrganization(resultId, options).then(function () {
Dashboard.hideLoadingMsg();
$('.episodeCorrectionPopup', page).popup("close");
reloadItems(page);
}, onApiFailure);
}
function reloadItems(page) {
Dashboard.showLoadingMsg();
@ -173,7 +118,6 @@
renderResults(page, result);
Dashboard.hideLoadingMsg();
}, onApiFailure);
}
@ -229,9 +173,9 @@
var status = item.Status;
if (status == 'SkippedExisting') {
html += '<div style="color:blue;">';
html += '<a data-resultid="' + item.Id + '" style="color:blue;" href="#" class="btnShowStatusMessage">';
html += item.OriginalFileName;
html += '</div>';
html += '</a>';
}
else if (status == 'Failure') {
html += '<a data-resultid="' + item.Id + '" style="color:red;" href="#" class="btnShowStatusMessage">';
@ -323,14 +267,9 @@
var page = $.mobile.activePage;
if (msg.MessageType == "ScheduledTaskEnded") {
if ((msg.MessageType == 'ScheduledTaskEnded' && msg.Data.Key == 'AutoOrganize') || msg.MessageType == 'AutoOrganizeUpdate') {
var result = msg.Data;
if (result.Key == 'AutoOrganize') {
reloadItems(page);
}
reloadItems(page);
}
}
@ -338,15 +277,21 @@
Dashboard.hideLoadingMsg();
Dashboard.alert({
title: Globalize.translate('AutoOrganizeError'),
message: Globalize.translate('ErrorOrganizingFileWithErrorCode', e.getResponseHeader("X-Application-Error-Code"))
});
}
var page = $.mobile.activePage;
$('.episodeCorrectionPopup', page).popup("close");
function onEpisodeCorrectionFormSubmit() {
submitEpisodeForm(this);
return false;
if (e.status == 0) {
Dashboard.alert({
title: 'Auto-Organize',
message: 'The operation is going to take a little longer. The view will be updated on completion.'
});
}
else {
Dashboard.alert({
title: Globalize.translate('AutoOrganizeError'),
message: Globalize.translate('ErrorOrganizingFileWithErrorCode', e.getResponseHeader("X-Application-Error-Code"))
});
}
}
$(document).on('pageinit', "#libraryFileOrganizerLogPage", function () {
@ -361,8 +306,6 @@
});
$('.episodeCorrectionForm').off('submit', onEpisodeCorrectionFormSubmit).on('submit', onEpisodeCorrectionFormSubmit);
}).on('pageshow', "#libraryFileOrganizerLogPage", function () {
var page = this;
@ -377,7 +320,7 @@
taskKey: 'AutoOrganize'
});
$(ApiClient).on("websocketmessage.autoorganizelog", onWebSocketMessage);
Events.on(ApiClient, "websocketmessage", onWebSocketMessage);
}).on('pagebeforehide', "#libraryFileOrganizerLogPage", function () {
@ -390,7 +333,7 @@
mode: 'off'
});
$(ApiClient).off("websocketmessage.autoorganizelog", onWebSocketMessage);
Events.off(ApiClient, "websocketmessage", onWebSocketMessage);
});
})(jQuery, document, window);

View file

@ -49,42 +49,37 @@
}
var html = "";
var currentType;
if (infos.length) {
html += '<div class="paperList">';
}
for (var i = 0, length = infos.length; i < length; i++) {
var info = infos[i];
if (info.OrganizerType != currentType) {
currentType = info.OrganizerType;
html += '<paper-icon-item>';
if (html.length > 0) {
html += "</ul>";
}
html += '<paper-fab mini icon="folder" item-icon class="blue"></paper-fab>';
html += "<h2>" + currentType + "</h2>";
html += '<paper-item-body two-line>';
html += '<ul data-role="listview" data-inset="true" data-auto-enhanced="false" data-split-icon="action">';
}
html += "<div>" + info.DisplayName + "</div>";
html += "<li data-role='list-divider'><h3 style='font-weight:bold'>" + info.Name + "</h3></li>";
html += info.MatchStrings.map(function (m) {
return "<div secondary>" + m + "</div>";
}).join('');
for (var n = 0; n < info.MatchStrings.length; n++) {
html += "<li title='" + info.MatchStrings[n] + "'>";
html += '</paper-item-body>';
html += "<a style='padding-top: 0.5em; padding-bottom: 0.5em'>";
html += '<paper-icon-button icon="delete" class="btnDeleteMatchEntry" data-index="' + i + '" title="' + Globalize.translate('ButtonDelete') + '"></paper-icon-button>';
html += "<p>" + info.MatchStrings[n] + "</p>";
html += "<a id='btnDeleteMatchEntry" + info.Id + "' class='btnDeleteMatchEntry' href='#' data-id='" + info.Id + "' data-matchstring='" + info.MatchStrings[n] + "' data-icon='delete'>" + Globalize.translate('ButtonDelete') + "</a>";
html += "</a>";
html += "</li>";
}
html += '</paper-icon-item>';
}
html += "</ul>";
if (infos.length) {
html += "</div>";
}
$('.divMatchInfos', page).html(html).trigger('create');
}
@ -105,14 +100,17 @@
$('.divMatchInfos', page).on('click', '.btnDeleteMatchEntry', function () {
var button = this;
var id = button.getAttribute('data-id');
var index = parseInt(button.getAttribute('data-index'));
var options = {
var info = currentResult.Items[index];
var entries = info.MatchStrings.map(function (m) {
return {
Name: info.ItemName,
Value: m
};
});
MatchString: button.getAttribute('data-matchstring')
};
ApiClient.deleteSmartMatchEntry(id, options).then(function () {
ApiClient.deleteSmartMatchEntries(entries).then(function () {
reloadList(page);

View file

@ -408,7 +408,10 @@
function renderDetails(page, item, context, isStatic) {
renderSimilarItems(page, item, context);
renderSiblingLinks(page, item, context);
if (!isStatic) {
renderSiblingLinks(page, item, context);
}
if (item.Taglines && item.Taglines.length) {
$('.tagline', page).html(item.Taglines[0]).show();

View file

@ -1061,9 +1061,9 @@
identifyItem: function (itemId) {
require(['components/itemidentifier/itemidentifier'], function () {
require(['components/itemidentifier/itemidentifier'], function (itemidentifier) {
ItemIdentifier.show(itemId);
itemidentifier.show(itemId);
});
},

View file

@ -81,9 +81,9 @@
});
if (AppInfo.enableSupporterMembership) {
$('.lnkSupporterLearnMore', page).show();
page.querySelector('.btnSupporterForConverting a').href = 'https://emby.media/premiere';
} else {
$('.lnkSupporterLearnMore', page).hide();
page.querySelector('.btnSupporterForConverting a').href = '#';
}
});

View file

@ -246,7 +246,7 @@
var html = '';
html += '<div class="dialogHeader">';
html += '<paper-icon-button icon="close" class="btnCancel" tabindex="-1"></paper-icon-button>';
html += '<paper-icon-button icon="arrow-back" class="btnCancel" tabindex="-1"></paper-icon-button>';
html += '<div class="dialogHeaderTitle">';
html += Globalize.translate('SyncMedia');
html += '</div>';

View file

@ -70,7 +70,7 @@
<p id="itemDeathDate"></p>
<p id="seriesAirTime"></p>
<p class="airDate"></p>
<p class="itemOverview smoothScrollY"></p>
<p class="itemOverview topOverview"></p>
</div>
<div id="castCollapsible" style="display: none;" class="detailSection">
<h1 id="peopleHeader">
@ -110,6 +110,7 @@
</h1>
<div>
<div class="tabDetails">
<p class="itemOverview bottomOverview"></p>
<p id="players"></p>
<p class="itemExternalLinks"></p>
<p class="itemStudios"></p>

View file

@ -1535,5 +1535,6 @@
"LabelCodecIntrosPath": "Codec intros path:",
"LabelCodecIntrosPathHelp": "A folder containing video files. If an intro video file name matches the video codec, audio codec, audio profile, or a tag, then it will be played prior to the main feature.",
"OptionConvertRecordingsToStreamingFormat": "Automatically convert recordings to a streaming friendly format",
"OptionConvertRecordingsToStreamingFormatHelp": "Recordings will be converted on the fly to MP4 for easy playback on your devices. This feature requires an active Emby Premiere subscription."
"OptionConvertRecordingsToStreamingFormatHelp": "Recordings will be converted on the fly to MP4 for easy playback on your devices.",
"FeatureRequiresEmbyPremiere": "This feature requires an active Emby Premiere subscription."
}

View file

@ -1550,5 +1550,6 @@
"LabelCodecIntrosPath": "Codec intros path:",
"LabelCodecIntrosPathHelp": "A folder containing video files. If an intro video file name matches the video codec, audio codec, audio profile, or a tag, then it will be played prior to the main feature.",
"OptionConvertRecordingsToStreamingFormat": "Automatically convert recordings to a streaming friendly format",
"OptionConvertRecordingsToStreamingFormatHelp": "Recordings will be converted on the fly to MP4 for easy playback on your devices. This feature requires an active Emby Premiere subscription."
"OptionConvertRecordingsToStreamingFormatHelp": "Recordings will be converted on the fly to MP4 for easy playback on your devices.",
"FeatureRequiresEmbyPremiere": "This feature requires an active Emby Premiere subscription."
}

View file

@ -263,6 +263,7 @@
"HeaderSelectWatchFolderHelp": "Browse or enter the path to your watch folder. The folder must be writeable.",
"OrganizePatternResult": "Result: {0}",
"AutoOrganizeError": "Error Organizing File",
"FileOrganizeManually": "Organize File",
"ErrorOrganizingFileWithErrorCode": "There was an error organizing the file. Error code: {0}.",
"HeaderRestart": "Restart",
"HeaderShutdown": "Shutdown",

View file

@ -264,6 +264,7 @@
"HeaderSelectWatchFolderHelp": "Browse or enter the path to your watch folder. The folder must be writeable.",
"OrganizePatternResult": "Result: {0}",
"AutoOrganizeError": "Error Organizing File",
"FileOrganizeManually": "Organize File",
"ErrorOrganizingFileWithErrorCode": "There was an error organizing the file. Error code: {0}.",
"HeaderRestart": "Restart",
"HeaderShutdown": "Shutdown",