mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
live tv guide improvements
This commit is contained in:
parent
f41b336e87
commit
f4866f7344
10 changed files with 1095 additions and 173 deletions
|
@ -59,7 +59,7 @@
|
|||
return deferred.promise();
|
||||
}
|
||||
|
||||
function showBackdrop(type) {
|
||||
function showBackdrop(type, parentId) {
|
||||
|
||||
var apiClient = ConnectionManager.currentApiClient();
|
||||
|
||||
|
@ -67,31 +67,29 @@
|
|||
return;
|
||||
}
|
||||
|
||||
getBackdropItemIds(apiClient, Dashboard.getCurrentUserId(),
|
||||
type,
|
||||
LibraryMenu.getTopParentId()).done(function (images) {
|
||||
getBackdropItemIds(apiClient, Dashboard.getCurrentUserId(), type, parentId).done(function (images) {
|
||||
|
||||
if (images.length) {
|
||||
if (images.length) {
|
||||
|
||||
var index = getRandom(0, images.length - 1);
|
||||
var item = images[index];
|
||||
var index = getRandom(0, images.length - 1);
|
||||
var item = images[index];
|
||||
|
||||
var screenWidth = $(window).width();
|
||||
var screenWidth = $(window).width();
|
||||
|
||||
var imgUrl = apiClient.getScaledImageUrl(item.id, {
|
||||
type: "Backdrop",
|
||||
tag: item.tag,
|
||||
maxWidth: screenWidth,
|
||||
quality: 80
|
||||
});
|
||||
var imgUrl = apiClient.getScaledImageUrl(item.id, {
|
||||
type: "Backdrop",
|
||||
tag: item.tag,
|
||||
maxWidth: screenWidth,
|
||||
quality: 80
|
||||
});
|
||||
|
||||
getElement().css('backgroundImage', 'url(\'' + imgUrl + '\')');
|
||||
getElement().css('backgroundImage', 'url(\'' + imgUrl + '\')');
|
||||
|
||||
} else {
|
||||
} else {
|
||||
|
||||
clearBackdrop();
|
||||
}
|
||||
});
|
||||
clearBackdrop();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function clearBackdrop() {
|
||||
|
@ -154,17 +152,21 @@
|
|||
|
||||
var page = this;
|
||||
|
||||
if (!$(page).hasClass('staticBackdropPage')) {
|
||||
var $page = $(page);
|
||||
|
||||
if ($(page).hasClass('backdropPage')) {
|
||||
if (!$page.hasClass('staticBackdropPage')) {
|
||||
|
||||
if ($page.hasClass('backdropPage')) {
|
||||
|
||||
if (enabled()) {
|
||||
var type = page.getAttribute('data-backdroptype');
|
||||
|
||||
showBackdrop(type);
|
||||
var parentId = $page.hasClass('globalBackdropPage') ? '' : LibraryMenu.getTopParentId();
|
||||
|
||||
showBackdrop(type, parentId);
|
||||
|
||||
} else {
|
||||
$(page).removeClass('backdropPage');
|
||||
$page.removeClass('backdropPage');
|
||||
clearBackdrop();
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -96,7 +96,7 @@
|
|||
|
||||
function loadlibraryButtons(elem, userId, index) {
|
||||
|
||||
getUserViews(userId).done(function (items) {
|
||||
return getUserViews(userId).done(function (items) {
|
||||
|
||||
var html = '<br/>';
|
||||
|
||||
|
@ -172,7 +172,7 @@
|
|||
UserId: userId
|
||||
};
|
||||
|
||||
ApiClient.getJSON(ApiClient.getUrl("Channels/Items/Latest", options)).done(function (result) {
|
||||
return ApiClient.getJSON(ApiClient.getUrl("Channels/Items/Latest", options)).done(function (result) {
|
||||
|
||||
var html = '';
|
||||
|
||||
|
@ -203,7 +203,7 @@
|
|||
$(elem).removeClass('hiddenSectionOnMobile');
|
||||
}
|
||||
|
||||
getUserViews(user.Id).done(function (items) {
|
||||
return getUserViews(user.Id).done(function (items) {
|
||||
|
||||
var html = '';
|
||||
|
||||
|
@ -259,7 +259,7 @@
|
|||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
|
||||
};
|
||||
|
||||
ApiClient.getItems(userId, options).done(function (result) {
|
||||
return ApiClient.getItems(userId, options).done(function (result) {
|
||||
|
||||
var html = '';
|
||||
|
||||
|
@ -307,7 +307,7 @@
|
|||
SupportsLatestItems: true
|
||||
});
|
||||
|
||||
ApiClient.getJSON(ApiClient.getUrl("Channels", options)).done(function (result) {
|
||||
return ApiClient.getJSON(ApiClient.getUrl("Channels", options)).done(function (result) {
|
||||
|
||||
var channels = result.Items;
|
||||
|
||||
|
@ -375,7 +375,7 @@
|
|||
|
||||
function loadLatestLiveTvRecordings(elem, userId, index) {
|
||||
|
||||
ApiClient.getLiveTvRecordings({
|
||||
return ApiClient.getLiveTvRecordings({
|
||||
|
||||
userId: userId,
|
||||
limit: 5,
|
||||
|
@ -459,36 +459,40 @@
|
|||
var elem = $('.section' + index, page);
|
||||
|
||||
if (section == 'latestmedia') {
|
||||
Sections.loadRecentlyAdded(elem, user);
|
||||
return Sections.loadRecentlyAdded(elem, user);
|
||||
}
|
||||
else if (section == 'librarytiles') {
|
||||
Sections.loadLibraryTiles(elem, user, 'backdrop', index, false, showLibraryTileNames);
|
||||
return Sections.loadLibraryTiles(elem, user, 'backdrop', index, false, showLibraryTileNames);
|
||||
}
|
||||
else if (section == 'smalllibrarytiles') {
|
||||
Sections.loadLibraryTiles(elem, user, 'homePageSmallBackdrop', index, false, showLibraryTileNames);
|
||||
return Sections.loadLibraryTiles(elem, user, 'homePageSmallBackdrop', index, false, showLibraryTileNames);
|
||||
}
|
||||
else if (section == 'smalllibrarytiles-automobile') {
|
||||
Sections.loadLibraryTiles(elem, user, 'homePageSmallBackdrop', index, true, showLibraryTileNames);
|
||||
return Sections.loadLibraryTiles(elem, user, 'homePageSmallBackdrop', index, true, showLibraryTileNames);
|
||||
}
|
||||
else if (section == 'librarytiles-automobile') {
|
||||
Sections.loadLibraryTiles(elem, user, 'backdrop', index, true, showLibraryTileNames);
|
||||
return Sections.loadLibraryTiles(elem, user, 'backdrop', index, true, showLibraryTileNames);
|
||||
}
|
||||
else if (section == 'librarybuttons') {
|
||||
Sections.loadlibraryButtons(elem, userId, index);
|
||||
return Sections.loadlibraryButtons(elem, userId, index);
|
||||
}
|
||||
else if (section == 'resume') {
|
||||
Sections.loadResume(elem, userId);
|
||||
return Sections.loadResume(elem, userId);
|
||||
}
|
||||
|
||||
else if (section == 'latesttvrecordings') {
|
||||
Sections.loadLatestLiveTvRecordings(elem, userId);
|
||||
return Sections.loadLatestLiveTvRecordings(elem, userId);
|
||||
}
|
||||
else if (section == 'latestchannelmedia') {
|
||||
Sections.loadLatestChannelMedia(elem, userId);
|
||||
return Sections.loadLatestChannelMedia(elem, userId);
|
||||
|
||||
} else {
|
||||
|
||||
elem.empty();
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolve();
|
||||
return deferred.promise();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -509,13 +513,17 @@
|
|||
elem.html(html);
|
||||
}
|
||||
|
||||
var promises = [];
|
||||
|
||||
for (i = 0, length = sectionCount; i < length; i++) {
|
||||
|
||||
loadSection(page, user, displayPreferences, i);
|
||||
promises.push(loadSection(page, user, displayPreferences, i));
|
||||
}
|
||||
|
||||
return $.when(promises);
|
||||
}
|
||||
|
||||
var homePageDismissValue = '5';
|
||||
var homePageDismissValue = '12';
|
||||
var homePageTourKey = 'homePageTour';
|
||||
|
||||
function dismissWelcome(page, userId) {
|
||||
|
@ -570,11 +578,25 @@
|
|||
afterClose: function () {
|
||||
dismissWelcome(page, userId);
|
||||
$('.welcomeMessage', page).hide();
|
||||
|
||||
loadConfigureViewsWelcomeMessage(page, userId);
|
||||
},
|
||||
hideBarsDelay: 30000
|
||||
});
|
||||
}
|
||||
|
||||
function loadConfigureViewsWelcomeMessage(page, userId) {
|
||||
|
||||
$('.btnMyPreferences', page).attr('href', 'mypreferencesdisplay.html?userId=' + userId);
|
||||
|
||||
// Need the timeout because previous methods in the chain have popups that will be in the act of closing
|
||||
setTimeout(function () {
|
||||
|
||||
$('.popupConfigureViews', page).popup('open');
|
||||
|
||||
}, 500);
|
||||
}
|
||||
|
||||
$(document).on('pageinit', "#indexPage", function () {
|
||||
|
||||
var page = this;
|
||||
|
@ -593,11 +615,12 @@
|
|||
|
||||
ApiClient.getDisplayPreferences('home', userId, 'webclient').done(function (result) {
|
||||
|
||||
showWelcomeIfNeeded(page, result);
|
||||
|
||||
Dashboard.getCurrentUser().done(function (user) {
|
||||
|
||||
loadSections(page, user, result);
|
||||
loadSections(page, user, result).done(function () {
|
||||
showWelcomeIfNeeded(page, result);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
var channelQuery = {
|
||||
|
||||
StartIndex: 0,
|
||||
Limit: 20,
|
||||
Limit: 50,
|
||||
EnableFavoriteSorting: true
|
||||
};
|
||||
var channelsPromise;
|
||||
|
@ -90,12 +90,6 @@
|
|||
channelQuery.StartIndex -= channelQuery.Limit;
|
||||
reloadChannels(page);
|
||||
});
|
||||
|
||||
$('.selectPageSize', page).on('change', function () {
|
||||
channelQuery.Limit = parseInt(this.value);
|
||||
channelQuery.StartIndex = 0;
|
||||
reloadChannels(page);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -269,13 +263,13 @@
|
|||
html += '<div class="guideProgramTime">';
|
||||
|
||||
if (program.IsLive) {
|
||||
html += '<span class="liveTvProgram">'+Globalize.translate('LabelLiveProgram')+' </span>';
|
||||
html += '<span class="liveTvProgram">' + Globalize.translate('LabelLiveProgram') + ' </span>';
|
||||
}
|
||||
else if (program.IsPremiere) {
|
||||
html += '<span class="premiereTvProgram">'+Globalize.translate('LabelPremiereProgram')+' </span>';
|
||||
html += '<span class="premiereTvProgram">' + Globalize.translate('LabelPremiereProgram') + ' </span>';
|
||||
}
|
||||
else if (program.IsSeries && !program.IsRepeat) {
|
||||
html += '<span class="newTvProgram">'+Globalize.translate('LabelNewProgram')+' </span>';
|
||||
html += '<span class="newTvProgram">' + Globalize.translate('LabelNewProgram') + ' </span>';
|
||||
}
|
||||
|
||||
html += LiveTvHelpers.getDisplayTime(program.StartDateLocal);
|
||||
|
@ -365,12 +359,27 @@
|
|||
renderPrograms(page, date, channels, programs);
|
||||
}
|
||||
|
||||
var gridScrolling = false;
|
||||
var headersScrolling = false;
|
||||
function onProgramGridScroll(page, elem) {
|
||||
|
||||
var grid = $(elem);
|
||||
if (!headersScrolling) {
|
||||
gridScrolling = true;
|
||||
var grid = $(elem);
|
||||
|
||||
grid.prev().scrollTop(grid.scrollTop());
|
||||
$('.timeslotHeaders', page).scrollLeft(grid.scrollLeft());
|
||||
$('.timeslotHeaders', page).scrollLeft(grid.scrollLeft());
|
||||
gridScrolling = false;
|
||||
}
|
||||
}
|
||||
|
||||
function onTimeslotHeadersScroll(page, elem) {
|
||||
|
||||
if (!gridScrolling) {
|
||||
headersScrolling = true;
|
||||
elem = $(elem);
|
||||
$('.programGrid', page).scrollLeft(elem.scrollLeft());
|
||||
headersScrolling = false;
|
||||
}
|
||||
}
|
||||
|
||||
function changeDate(page, date) {
|
||||
|
@ -385,6 +394,10 @@
|
|||
gridLocalEndDateMs = clone.getTime() - 1;
|
||||
|
||||
reloadGuide(page);
|
||||
|
||||
var text = LibraryBrowser.getFutureDateText(date);
|
||||
text = '<span class="currentDay">' + text.replace(' ', ' </span>');
|
||||
$('.currentDate', page).html(text);
|
||||
}
|
||||
|
||||
function setDateRange(page, guideInfo) {
|
||||
|
@ -446,9 +459,21 @@
|
|||
date.setTime(parseInt(this.value));
|
||||
|
||||
changeDate(page, date);
|
||||
|
||||
$('#popupConfig', page).popup('close');
|
||||
});
|
||||
|
||||
if ($.browser.mobile) {
|
||||
$('.tvGuide', page).addClass('mobileGuide');
|
||||
} else {
|
||||
|
||||
$('.tvGuide', page).removeClass('mobileGuide');
|
||||
|
||||
$('.timeslotHeaders', page).on('scroll', function () {
|
||||
|
||||
onTimeslotHeadersScroll(page, this);
|
||||
});
|
||||
}
|
||||
|
||||
}).on('pagebeforeshow', "#liveTvGuidePage", function () {
|
||||
|
||||
var page = this;
|
||||
|
|
|
@ -118,10 +118,10 @@
|
|||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Playlist",
|
||||
Recursive: true,
|
||||
ParentId: parentId,
|
||||
Fields: "PrimaryImageAspectRatio,SortName,CumulativeRunTimeTicks,CanDelete,SyncInfo",
|
||||
StartIndex: 0,
|
||||
Limit: 9
|
||||
Limit: 9,
|
||||
MediaTypes: "Audio"
|
||||
};
|
||||
|
||||
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue