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

added a new encoding settings page under advanced

This commit is contained in:
Luke Pulverenti 2014-01-07 13:39:35 -05:00
parent 231ed3c315
commit 2704b52493
16 changed files with 267 additions and 136 deletions

View file

@ -389,6 +389,17 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
}); });
}; };
self.getLiveTvGuideInfo = function (options) {
var url = self.getUrl("LiveTv/GuideInfo", options || {});
return self.ajax({
type: "GET",
url: url,
dataType: "json"
});
};
self.getLiveTvChannel = function (id, userId) { self.getLiveTvChannel = function (id, userId) {
if (!id) { if (!id) {

View file

@ -4,14 +4,19 @@
<title>Advanced</title> <title>Advanced</title>
</head> </head>
<body> <body>
<div id="advancedConfigurationPage" data-role="page" class="page type-interior"> <div id="advancedConfigurationPage" data-role="page" class="page type-interior advancedConfigurationPage">
<div data-role="content"> <div data-role="content">
<div class="content-primary"> <div class="content-primary">
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
<a href="#" data-role="button" class="ui-btn-active">General</a>
<a href="encodingsettings.html" data-role="button">Encoding</a>
</div>
<form id="advancedConfigurationForm"> <form id="advancedConfigurationForm">
<ul data-role="listview" class="ulForm"> <ul data-role="listview" class="ulForm">
<li id="fldRunAtStartup" style="display:none;"> <li id="fldRunAtStartup" style="display: none;">
<input type="checkbox" id="chkRunAtStartup" name="chkRunAtStartup" data-mini="true" /> <input type="checkbox" id="chkRunAtStartup" name="chkRunAtStartup" data-mini="true" />
<label for="chkRunAtStartup">Run server at startup</label> <label for="chkRunAtStartup">Run server at startup</label>
<div id="windowsStartupDescription" class="fieldDescription warningFieldDescription" style="display: none;"> <div id="windowsStartupDescription" class="fieldDescription warningFieldDescription" style="display: none;">

View file

@ -42,6 +42,9 @@
margin-left: 80px; margin-left: 80px;
border-left: 1px solid #444; border-left: 1px solid #444;
} }
.tvProgramCurrentTimeSlot {
background-color: green;
}
.tvProgramName { .tvProgramName {
color: #fff; color: #fff;
@ -171,11 +174,14 @@
width: 189px; width: 189px;
} }
.channelTimeslotHeader {
border-right: 1px solid #4971A7;
}
.channelTimeslotHeader, .timeslotHeader { .channelTimeslotHeader, .timeslotHeader {
background: #1d1d1d; background: #4971A7;
border-bottom: 1px solid #333; border-bottom: 1px solid #4971A7;
border-left: 1px solid #333; border-left: 1px solid #4971A7;
border-top: 1px solid #333;
} }
.timeslotHeader, .channelTimeslotHeader { .timeslotHeader, .channelTimeslotHeader {
@ -212,7 +218,7 @@
} }
.timeslotCell, .timeslotHeader { .timeslotCell, .timeslotHeader {
width: 180px; width: 190px;
} }
.timeslotCellInner { .timeslotCellInner {
@ -228,7 +234,7 @@
} }
.timeslotCellInnerWithProgram { .timeslotCellInnerWithProgram {
z-index: 9999; z-index: 99;
} }
.timeslotCellInnerWithProgram:hover { .timeslotCellInnerWithProgram:hover {
@ -273,8 +279,8 @@
max-width: 60px; max-width: 60px;
max-height: 35px; max-height: 35px;
position: absolute; position: absolute;
right: 5px; right: 7px;
top: 5px; top: 7px;
} }
@media (max-width: 600px) { @media (max-width: 600px) {

View file

@ -0,0 +1,57 @@
<!DOCTYPE html>
<html>
<head>
<title>Advanced</title>
</head>
<body>
<div id="encodingSettingsPage" data-role="page" class="page type-interior advancedConfigurationPage">
<div data-role="content">
<div class="content-primary">
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
<a href="advanced.html" data-role="button">General</a>
<a href="#" data-role="button" class="ui-btn-active">Encoding</a>
</div>
<form class="encodingSettingsForm">
<fieldset data-role="controlgroup">
<legend>Transcoder Quality:</legend>
<input type="radio" name="radioEncodingQuality" class="radioEncodingQuality" id="radioAuto" value="Auto">
<label for="radioAuto">Auto<br /><span style="font-weight:normal;">The transcoder will decide quality itself.</span></label>
<input type="radio" name="radioEncodingQuality" class="radioEncodingQuality" id="radioHighSpeed" value="HighSpeed">
<label for="radioHighSpeed">Perfer higher speed encoding<br /><span style="font-weight:normal;">Lower quality, but faster transcodes</span></label>
<input type="radio" name="radioEncodingQuality" class="radioEncodingQuality" id="radioHighQuality" value="HighQuality">
<label for="radioHighQuality">Prefer higher quality encoding<br /><span style="font-weight:normal;">Higher quality, but slower transcodes</span></label>
<input type="radio" name="radioEncodingQuality" class="radioEncodingQuality" id="radioMaxQuality" value="MaxQuality">
<label for="radioMaxQuality">Perfer max quality encoding<br /><span style="font-weight:normal;">Best quality with slower transcodes and high CPU usage</span></label>
</fieldset>
<br />
<ul data-role="listview" class="ulForm">
<li>
<input type="checkbox" id="chkEnableDebugEncodingLogging" name="chkEnableDebugEncodingLogging" data-mini="true" />
<label for="chkEnableDebugEncodingLogging">Enable debug encoding logging</label>
<div class="fieldDescription">This will create very large log files and is only recommended as needed for troubleshooting purposes.</div>
</li>
<li>
<button type="submit" data-theme="b" data-icon="check" data-mini="true">
Save
</button>
<button type="button" onclick="Dashboard.navigate('dashboard.html');" data-icon="delete" data-mini="true">
Cancel
</button>
</li>
</ul>
</form>
</div>
</div>
<script type="text/javascript">
$('.encodingSettingsForm').off('submit', EncodingSettingsPage.onSubmit).on('submit', EncodingSettingsPage.onSubmit);
</script>
</div>
</body>
</html>

View file

@ -23,7 +23,6 @@
<p style="margin: 1.5em 0;"> <p style="margin: 1.5em 0;">
<span class="userDataIcons"></span> <span class="userDataIcons"></span>
</p> </p>
<p class="currentProgram"></p>
</td> </td>
</tr> </tr>
</table> </table>

View file

@ -17,7 +17,7 @@
<div> <div>
<div> <div>
<select id="selectDate" data-mini="true" data-icon="calendar"> <select id="selectDate" data-mini="true" data-icon="calendar" data-inline="true">
<option>Today</option> <option>Today</option>
</select> </select>
</div> </div>

View file

@ -0,0 +1,50 @@
(function ($, document, window) {
function loadPage(page, config) {
$('#chkEnableDebugEncodingLogging', page).checked(config.EnableDebugEncodingLogging).checkboxradio('refresh');
$('.radioEncodingQuality', page).each(function() {
this.checked = config.MediaEncodingQuality == this.value;
}).checkboxradio('refresh');
Dashboard.hideLoadingMsg();
}
$(document).on('pageshow', "#encodingSettingsPage", function () {
Dashboard.showLoadingMsg();
var page = this;
ApiClient.getServerConfiguration().done(function(config) {
loadPage(page, config);
});
});
window.EncodingSettingsPage = {
onSubmit: function () {
Dashboard.showLoadingMsg();
var form = this;
ApiClient.getServerConfiguration().done(function (config) {
config.EnableDebugEncodingLogging = $('#chkEnableDebugEncodingLogging', form).checked();
config.MediaEncodingQuality = $('.radioEncodingQuality:checked', form).val();
ApiClient.updateServerConfiguration(config).done(Dashboard.processServerConfigurationUpdateResult);
});
// Disable default form submission
return false;
}
};
})(jQuery, document, window);

View file

@ -853,7 +853,7 @@
background = defaultBackground; background = defaultBackground;
} }
else if (item.Type == "Recording" || item.Type == "Program") { else if (item.Type == "Recording" || item.Type == "Program" || item.Type == "Channel") {
if (item.Name && options.showTitle) { if (item.Name && options.showTitle) {
imgUrl = 'css/images/items/list/collection.png'; imgUrl = 'css/images/items/list/collection.png';
@ -1098,6 +1098,9 @@
var name = item.EpisodeTitle || item.Name; var name = item.EpisodeTitle || item.Name;
if (item.Type == "Channel") {
return item.Number + ' ' + name;
}
if (displayAsSpecial && item.Type == "Episode" && item.ParentIndexNumber == 0) { if (displayAsSpecial && item.Type == "Episode" && item.ParentIndexNumber == 0) {
name = "Special - " + name; name = "Special - " + name;
@ -1155,6 +1158,9 @@
getPlayedIndicatorHtml: function (item) { getPlayedIndicatorHtml: function (item) {
if (item.Type == "Channel") {
return '';
}
if (item.Type == "Series" || item.Type == "Season" || item.Type == "BoxSet" || item.MediaType == "Video") { if (item.Type == "Series" || item.Type == "Season" || item.Type == "BoxSet" || item.MediaType == "Video") {
if (item.RecursiveUnplayedItemCount) { if (item.RecursiveUnplayedItemCount) {
return '<div class="unplayedIndicator">' + item.RecursiveUnplayedItemCount + '</div>'; return '<div class="unplayedIndicator">' + item.RecursiveUnplayedItemCount + '</div>';

View file

@ -9,21 +9,16 @@
var currentIndexValue; var currentIndexValue;
var now = new Date();
for (var i = 0, length = result.Items.length; i < length; i++) { for (var i = 0, length = result.Items.length; i < length; i++) {
var program = result.Items[i]; var program = result.Items[i];
var startDate = program.StartDate; var startDate = parseISO8601Date(program.StartDate, { toLocal: true });
var startDateText = ''; var startDateText = LibraryBrowser.getFutureDateText(startDate);
try { var endDate = parseISO8601Date(program.EndDate, { toLocal: true });
startDate = parseISO8601Date(startDate, { toLocal: true });
startDateText = LibraryBrowser.getFutureDateText(startDate);
} catch (err) {
}
if (startDateText != currentIndexValue) { if (startDateText != currentIndexValue) {
@ -33,11 +28,17 @@
html += '<a href="livetvprogram.html?id=' + program.Id + '" class="tvProgram">'; html += '<a href="livetvprogram.html?id=' + program.Id + '" class="tvProgram">';
html += '<div class="tvProgramTimeSlot">'; var cssClass = "tvProgramTimeSlot";
if (now >= startDate && now < endDate) {
cssClass += " tvProgramCurrentTimeSlot";
}
html += '<div class="' + cssClass + '">';
html += '<div class="tvProgramTimeSlotInner">' + LiveTvHelpers.getDisplayTime(startDate) + '</div>'; html += '<div class="tvProgramTimeSlotInner">' + LiveTvHelpers.getDisplayTime(startDate) + '</div>';
html += '</div>'; html += '</div>';
var cssClass = "tvProgramInfo"; cssClass = "tvProgramInfo";
if (program.IsKids) { if (program.IsKids) {
cssClass += " childProgramInfo"; cssClass += " childProgramInfo";
@ -54,7 +55,12 @@
html += '<div class="' + cssClass + '">'; html += '<div class="' + cssClass + '">';
html += '<div class="tvProgramName">' + program.Name + '</div>'; var name = program.Name;
if (program.IsRepeat) {
name += " (R)";
}
html += '<div class="tvProgramName">' + name + '</div>';
html += '<div class="tvProgramTime">'; html += '<div class="tvProgramTime">';
@ -157,12 +163,6 @@
}); });
if (item.CurrentProgram) {
$('.currentProgram', page).html('Now playing:&nbsp;&nbsp;&nbsp;<a href="livetvprogram.html?id=' + item.CurrentProgram.Id + '">' + item.CurrentProgram.Name + '</a>').trigger('create');
} else {
$('.currentProgram', page).html('');
}
loadPrograms(page); loadPrograms(page);
}); });

View file

@ -1,59 +1,13 @@
(function ($, document, apiClient) { (function ($, document, apiClient) {
function getChannelHtml(channel) {
var html = '';
html += '<a class="backdropTileItem tileItem" href="livetvchannel.html?id=' + channel.Id + '">';
var imgUrl;
var isDefault;
if (channel.ImageTags.Primary) {
imgUrl = apiClient.getUrl("LiveTV/Channels/" + channel.Id + "/Images/Primary", {
tag: channel.ImageTags.Primary,
height: 300
});
} else {
imgUrl = "css/images/items/list/collection.png";
isDefault = true;
}
var cssClass = isDefault ? "tileImage defaultTileImage" : "tileImage";
html += '<div class="' + cssClass + '" style="background-image: url(\'' + imgUrl + '\');"></div>';
html += '<div class="tileContent">';
html += '<div class="tileName">' + channel.Number + '&nbsp;' + channel.Name + '</div>';
html += '<p class="userDataIcons">' + LibraryBrowser.getUserDataIconsHtml(channel) + '</p>';
html += '</div>';
html += "</a>";
return html;
}
function getChannelsHtml(channels) { function getChannelsHtml(channels) {
var html = []; return LibraryBrowser.getPosterViewHtml({
items: channels,
for (var i = 0, length = channels.length; i < length; i++) { useAverageAspectRatio: true,
shape: "backdrop",
html.push(getChannelHtml(channels[i])); centerText: true
} });
return html.join('');
} }
function renderChannels(page, channels) { function renderChannels(page, channels) {

View file

@ -7,19 +7,10 @@
var gridLocalStartDateMs; var gridLocalStartDateMs;
var gridLocalEndDateMs; var gridLocalEndDateMs;
function formatDigit(i) { var currentDate;
return i < 10 ? "0" + i : i; var channelsPromise;
}
function getDateFormat(date) { var guideInfoPromise;
// yyyyMMddHHmmss
// Convert to UTC
// http://stackoverflow.com/questions/948532/how-do-you-convert-a-javascript-date-to-utc/14610512#14610512
var d = new Date(date.getTime());
return "" + d.getFullYear() + formatDigit(d.getMonth() + 1) + formatDigit(d.getDate()) + formatDigit(d.getHours()) + formatDigit(d.getMinutes()) + formatDigit(d.getSeconds());
}
function normalizeDateToTimeslot(date) { function normalizeDateToTimeslot(date) {
@ -37,11 +28,10 @@
return date; return date;
} }
var currentDate;
var channelsPromise;
function reloadGuide(page) { function reloadGuide(page) {
Dashboard.showLoadingMsg();
channelsPromise = channelsPromise || apiClient.getLiveTvChannels({ channelsPromise = channelsPromise || apiClient.getLiveTvChannels({
userId: Dashboard.getCurrentUserId() userId: Dashboard.getCurrentUserId()
@ -51,14 +41,15 @@
var date = currentDate; var date = currentDate;
var nextDay = new Date(date.getTime()); var nextDay = new Date(date.getTime());
nextDay.setDate(nextDay.getDate() + 2); nextDay.setHours(0, 0, 0, 0);
nextDay.setHours(1, 0, 0, 0); nextDay.setDate(nextDay.getDate() + 1);
var promise1 = channelsPromise; var promise1 = channelsPromise;
var promise2 = apiClient.getLiveTvPrograms({ var promise2 = apiClient.getLiveTvPrograms({
UserId: Dashboard.getCurrentUserId(), UserId: Dashboard.getCurrentUserId(),
MaxStartDate: getDateFormat(nextDay) MaxStartDate: nextDay.toISOString(),
MinEndDate: date.toISOString()
}); });
@ -68,6 +59,8 @@
var programs = response2[0].Items; var programs = response2[0].Items;
renderGuide(page, date, channels, programs); renderGuide(page, date, channels, programs);
Dashboard.hideLoadingMsg();
}); });
} }
@ -231,6 +224,10 @@
html += '<div class="guideProgramName">'; html += '<div class="guideProgramName">';
html += program.Name; html += program.Name;
if (program.IsRepeat) {
html += ' (R)';
}
html += '</div>'; html += '</div>';
html += '<div class="guideProgramTime">'; html += '<div class="guideProgramTime">';
@ -339,20 +336,9 @@
$('.timeslotHeaders', page).scrollLeft(grid.scrollLeft()); $('.timeslotHeaders', page).scrollLeft(grid.scrollLeft());
} }
$(document).on('pageinit', "#liveTvGuidePage", function () { function changeDate(page, date) {
var page = this; currentDate = normalizeDateToTimeslot(date);
$('.programGrid', page).on('scroll', function () {
onProgramGridScroll(page, this);
});
}).on('pagebeforeshow', "#liveTvGuidePage", function () {
var page = this;
currentDate = normalizeDateToTimeslot(new Date());
gridLocalStartDateMs = currentDate.getTime(); gridLocalStartDateMs = currentDate.getTime();
@ -362,6 +348,71 @@
gridLocalEndDateMs = clone.getTime() - 1; gridLocalEndDateMs = clone.getTime() - 1;
reloadGuide(page); reloadGuide(page);
}
function setDateRange(page, guideInfo) {
var today = new Date();
today.setHours(today.getHours(), 0, 0, 0);
var start = parseISO8601Date(guideInfo.StartDate, { toLocal: true });
var end = parseISO8601Date(guideInfo.EndDate, { toLocal: true });
start.setHours(0, 0, 0, 0);
end.setHours(0, 0, 0, 0);
start = new Date(Math.max(today, start));
var html = '';
while (start <= end) {
html += '<option value="' + start.getTime() + '">' + LibraryBrowser.getFutureDateText(start) + '</option>';
start.setDate(start.getDate() + 1);
start.setHours(0, 0, 0, 0);
}
var elem = $('#selectDate', page).html(html).selectmenu('refresh');
if (currentDate) {
elem.val(currentDate.getTime()).selectmenu('refresh');
}
var val = elem.val();
var date = new Date();
date.setTime(parseInt(val));
changeDate(page, date);
}
$(document).on('pageinit', "#liveTvGuidePage", function () {
var page = this;
$('.programGrid', page).on('scroll', function () {
onProgramGridScroll(page, this);
});
$('#selectDate', page).on('change', function() {
var date = new Date();
date.setTime(parseInt(this.value));
changeDate(page, date);
});
}).on('pagebeforeshow', "#liveTvGuidePage", function () {
var page = this;
apiClient.getLiveTvGuideInfo().done(function (guideInfo) {
setDateRange(page, guideInfo);
});
}); });
})(jQuery, document, ApiClient); })(jQuery, document, ApiClient);

View file

@ -12,6 +12,10 @@
currentItem = item; currentItem = item;
var name = item.Name; var name = item.Name;
if (item.IsRepeat) {
name += ' (R)';
}
$('#itemImage', page).html(LibraryBrowser.getDetailImageHtml(item)); $('#itemImage', page).html(LibraryBrowser.getDetailImageHtml(item));
@ -44,7 +48,11 @@
ApiClient.sendWebSocketMessage("Context", vals.join('|')); ApiClient.sendWebSocketMessage("Context", vals.join('|'));
} }
$('#recordButtonContainer', page).show(); if (!item.TimerId && !item.SeriesTimerId) {
$('#recordButtonContainer', page).show();
} else {
$('#recordButtonContainer', page).hide();
}
if (MediaPlayer.canPlay(item)) { if (MediaPlayer.canPlay(item)) {
$('#playButtonContainer', page).show(); $('#playButtonContainer', page).show();

View file

@ -90,9 +90,7 @@
LibraryBrowser.loadSavedQueryValues('episodes', query); LibraryBrowser.loadSavedQueryValues('episodes', query);
var groupId = getParameterByName('groupid'); var groupId = getParameterByName('groupid');
if (groupId) { query.GroupId = groupId;
query.GroupId = groupId;
}
reloadItems(page); reloadItems(page);

View file

@ -766,7 +766,7 @@ var Dashboard = {
name: "Advanced", name: "Advanced",
divider: true, divider: true,
href: "advanced.html", href: "advanced.html",
selected: pageElem.id == "advancedConfigurationPage" selected: page.hasClass("advancedConfigurationPage")
}, { }, {
name: "Scheduled Tasks", name: "Scheduled Tasks",
href: "scheduledtasks.html", href: "scheduledtasks.html",

View file

@ -1,19 +1,5 @@
(function ($, document) { (function ($, document) {
function formatDigit(i) {
return i < 10 ? "0" + i : i;
}
function getDateFormat(date) {
// yyyyMMddHHmmss
// Convert to UTC
// http://stackoverflow.com/questions/948532/how-do-you-convert-a-javascript-date-to-utc/14610512#14610512
var d = new Date(date.getTime());
return "" + d.getFullYear() + formatDigit(d.getMonth() + 1) + formatDigit(d.getDate()) + formatDigit(d.getHours()) + formatDigit(d.getMinutes()) + formatDigit(d.getSeconds());
}
$(document).on('pagebeforeshow', "#tvUpcomingPage", function () { $(document).on('pagebeforeshow', "#tvUpcomingPage", function () {
var page = this; var page = this;
@ -39,7 +25,7 @@
yesterday.setDate(yesterday.getDate() - 1); yesterday.setDate(yesterday.getDate() - 1);
yesterday.setHours(0, 0, 0, 0); yesterday.setHours(0, 0, 0, 0);
missedItemsQuery.MinPremiereDate = getDateFormat(yesterday); missedItemsQuery.MinPremiereDate = yesterday.toISOString();
var unairedQuery = $.extend({ var unairedQuery = $.extend({

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="MediaBrowser.ApiClient.Javascript" version="3.0.218" targetFramework="net45" /> <package id="MediaBrowser.ApiClient.Javascript" version="3.0.219" targetFramework="net45" />
</packages> </packages>