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

add channels infrastructure

This commit is contained in:
Luke Pulverenti 2014-05-03 00:20:04 -04:00
parent 5218e67d4e
commit be0861a1ee
18 changed files with 453 additions and 224 deletions

View file

@ -3,6 +3,8 @@
// The base query options
var query = {
SortBy: "SortName",
SortOrder: "Ascending",
StartIndex: 0
};
@ -10,9 +12,18 @@
return 'channels-' + getParameterByName('id');
}
function showLoadingMessage(page) {
$('#popupDialog', page).popup('open');
}
function hideLoadingMessage(page) {
$('#popupDialog', page).popup('close');
}
function reloadItems(page) {
Dashboard.showLoadingMsg();
showLoadingMessage(page);
var channelId = getParameterByName('id');
@ -57,16 +68,90 @@
LibraryBrowser.saveQueryValues(getSavedQueryId(), query);
Dashboard.hideLoadingMsg();
hideLoadingMessage(page);
});
}
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
$('.chkStandardFilter', page).each(function () {
var filters = "," + (query.Filters || "");
var filterName = this.getAttribute('data-filter');
this.checked = filters.indexOf(',' + filterName) != -1;
}).checkboxradio('refresh');
$('.alphabetPicker', page).alphaValue(query.NameStartsWith);
}
$(document).on('pagebeforeshow', "#channelItemsPage", function () {
$(document).on('pageinit', "#channelItemsPage", function () {
var page = this;
$('.radioSortBy', this).on('click', function () {
query.StartIndex = 0;
query.SortBy = this.getAttribute('data-sortby');
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.StartIndex = 0;
query.SortOrder = this.getAttribute('data-sortorder');
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');
var filters = query.Filters || "";
filters = (',' + filters).replace(',' + filterName, '').substring(1);
if (this.checked) {
filters = filters ? (filters + ',' + filterName) : filterName;
}
query.StartIndex = 0;
query.Filters = filters;
reloadItems(page);
});
$('.alphabetPicker', this).on('alphaselect', function (e, character) {
query.NameStartsWithOrGreater = character;
query.StartIndex = 0;
reloadItems(page);
}).on('alphaclear', function (e) {
query.NameStartsWithOrGreater = '';
reloadItems(page);
});
}).on('pagebeforeshow', "#channelItemsPage", function () {
}).on('pageshow', "#channelItemsPage", function () {
var page = this;
var limit = LibraryBrowser.getDefaultPageSize();
// If the default page size has changed, the start index will have to be reset
@ -77,11 +162,9 @@
LibraryBrowser.loadSavedQueryValues(getSavedQueryId(), query);
reloadItems(this);
reloadItems(page);
}).on('pageshow', "#channelItemsPage", function () {
updateFilterControls(this);
updateFilterControls(page);
});
})(jQuery, document);

View file

@ -25,10 +25,11 @@
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "square",
shape: "backdrop",
context: 'channels',
showTitle: true,
centerText: true
centerText: true,
preferThumb: true
});
$('#items', page).html(html).trigger('create').createPosterItemMenus();

View file

@ -457,7 +457,7 @@
AdjacentTo: item.Id
});
}
else if (item.Type == "Episode") {
else if (item.Type == "Episode" && item.SeasonId) {
// Use dedicated episodes endpoint
promise = ApiClient.getEpisodes(item.SeriesId, {

View file

@ -68,7 +68,7 @@
function getItemHref(item) {
if (item.Type == 'ManualCollectionsFolder' || item.CollectionType == 'boxsets') {
if (item.Type == 'ManualCollectionsFolder') {
return 'collections.html?topParentId=' + item.Id;
}
@ -106,7 +106,7 @@
}).join('');
if (counts.ChannelCount) {
html += '<a class="viewMenuLink viewMenuTextLink desktopViewMenuLink lnkMediaFolder" href="channels.html"><span class="viewName">Channels</span></a>';
html += '<a class="viewMenuLink viewMenuTextLink desktopViewMenuLink lnkMediaFolder" data-itemid="channels" href="channels.html"><span class="viewName">Channels</span></a>';
}
if (liveTvInfo.EnabledUsers.indexOf(user.Id) != -1) {
@ -155,7 +155,7 @@
}).join('');
if (counts.ChannelCount) {
html += '<li><a class="libraryPanelLink lnkMediaFolder" href="channels.html">Channels</a></li>';
html += '<li><a class="libraryPanelLink lnkMediaFolder" data-itemid="channels" href="channels.html">Channels</a></li>';
}
if (liveTvInfo.EnabledUsers.indexOf(Dashboard.getCurrentUserId()) != -1) {
@ -203,8 +203,9 @@
page = $(page);
var isLiveTvPage = page.hasClass('liveTvPage');
var id = isLiveTvPage || page.hasClass('noLibraryMenuSelectionPage') ?
var isChannelsPage = page.hasClass('channelsPage');
var id = isLiveTvPage || isChannelsPage || page.hasClass('noLibraryMenuSelectionPage') ?
'' :
getTopParentId() || '';
@ -214,7 +215,10 @@
var itemId = this.getAttribute('data-itemid');
if (isLiveTvPage && itemId == 'livetv') {
if (isChannelsPage && itemId == 'channels') {
$(this).addClass('selectedMediaFolder');
}
else if (isLiveTvPage && itemId == 'livetv') {
$(this).addClass('selectedMediaFolder');
}
else if (id && itemId == id) {

View file

@ -215,7 +215,7 @@
}).on('pagebeforeshow', "#musicVideosPage", function () {
query.ParentId = LibraryMenu.getTopParentId();
//query.ParentId = LibraryMenu.getTopParentId();
var limit = LibraryBrowser.getDefaultPageSize();

View file

@ -70,14 +70,22 @@
var category = plugin.category || "General";
if (category != currentCategory) {
html += '<h2 class="listHeader">' + category + '</h2>';
if (currentCategory) {
html += '<br/>';
html += '<br/>';
html += '<br/>';
}
html += '<div class="ui-bar-a" style="padding: 0 1em;"><h3>' + category + '</h3></div>';
currentCategory = category;
}
var href = plugin.externalUrl ? plugin.externalUrl : "addplugin.html?name=" + encodeURIComponent(plugin.name) + "&guid=" + plugin.guid;
var target = plugin.externalUrl ? ' target="_blank"' : '';
html += "<a class='storeItem backdropPosterItem posterItem transparentPosterItem borderlessPosterItem' href='" + href + "' " + target + ">";
html += "<a class='backdropPosterItem posterItem' style='margin: .75em 5px 1em;' href='" + href + "' " + target + ">";
if (plugin.thumbImage) {
html += '<div class="posterItemImage" style="background-image:url(\'' + plugin.thumbImage + '\');background-size:cover;">';
@ -94,21 +102,13 @@
}
html += "</div>";
html += "<div class='posterItemText' style='color:#000;font-weight:400;font-size:14px;'>";
html += "<div class='posterItemText' style='color:#000;'>";
var installedPlugin = plugin.isApp ? null : installedPlugins.filter(function (ip) {
return ip.Name == plugin.name;
})[0];
html += plugin.name;
if (installedPlugin) {
html += plugin.name;
} else {
html += plugin.name;
}
html += "</div>";
html += "<div class='posterItemText packageReviewText' style='color:#000;font-weight:400;font-size:14px;'>";
html += "<div class='posterItemText packageReviewText' style='color:#000;'>";
html += plugin.price > 0 ? "$" + plugin.price.toFixed(2) : "Free";
html += Dashboard.getStoreRatingHtml(plugin.avgRating, plugin.id, plugin.name);
@ -117,6 +117,20 @@
html += "</span>";
html += "</div>";
var installedPlugin = plugin.isApp ? null : installedPlugins.filter(function (ip) {
return ip.Name == plugin.name;
})[0];
html += "<div class='posterItemText' style='color:#000;'>";
if (installedPlugin) {
html += installedPlugin.Version + ' installed';
} else {
html += '&nbsp;';
}
html += "</div>";
html += "</a>";
pluginhtml += html;

View file

@ -60,7 +60,38 @@
html += '</fieldset>';
$('.libraryAccess', page).html(html).trigger('create');
$('.mediaFolderAccess', page).html(html).trigger('create');
}
function loadChannels(page, user, channels) {
var html = '';
html += '<fieldset data-role="controlgroup">';
html += '<legend>Channels</legend>';
for (var i = 0, length = channels.length; i < length; i++) {
var folder = channels[i];
var id = 'channels' + i;
var checkedAttribute = user.Configuration.BlockedChannels.indexOf(folder.Name) == -1 ? ' checked="checked"' : '';
html += '<input class="chkChannel" data-foldername="' + folder.Name + '" type="checkbox" data-mini="true" id="' + id + '"' + checkedAttribute + ' />';
html += '<label for="' + id + '">' + folder.Name + '</label>';
}
html += '</fieldset>';
$('.channelAccess', page).show().html(html).trigger('create');
if (channels.length) {
$('.channelAccessContainer', page).show();
} else {
$('.channelAccessContainer', page).hide();
}
}
function loadUnratedItems(page, user) {
@ -68,6 +99,7 @@
var items = [
{ name: 'Books', value: 'Book' },
{ name: 'Games', value: 'Game' },
{ name: 'Internet Channel Content', value: 'ChannelContent' },
{ name: 'Live TV Channels', value: 'LiveTvChannel' },
{ name: 'Live TV Programs', value: 'LiveTvProgram' },
{ name: 'Movies', value: 'Movie' },
@ -100,10 +132,11 @@
$('.blockUnratedItems', page).html(html).trigger('create');
}
function loadUser(page, user, loggedInUser, allParentalRatings, mediaFolders) {
function loadUser(page, user, loggedInUser, allParentalRatings, mediaFolders, channels) {
Dashboard.setPageTitle(user.Name);
loadChannels(page, user, channels);
loadMediaFolders(page, user, mediaFolders);
loadUnratedItems(page, user);
@ -147,6 +180,12 @@
}).get();
user.Configuration.BlockedChannels = $('.chkChannel:not(:checked)', page).map(function () {
return this.getAttribute('data-foldername');
}).get();
user.Configuration.BlockUnratedItems = $('.chkUnratedItem:checked', page).map(function () {
return this.getAttribute('data-itemtype');
@ -207,9 +246,11 @@
var promise4 = $.getJSON(ApiClient.getUrl("Library/MediaFolders"));
$.when(promise1, promise2, promise3, promise4).done(function (response1, response2, response3, response4) {
var promise5 = $.getJSON(ApiClient.getUrl("Channels"));
loadUser(page, response1[0] || response1, response2[0], response3[0], response4[0].Items);
$.when(promise1, promise2, promise3, promise4, promise5).done(function (response1, response2, response3, response4, response5) {
loadUser(page, response1[0] || response1, response2[0], response3[0], response4[0].Items, response5[0].Items);
});
});