update live tv recordings

This commit is contained in:
Luke Pulverenti 2015-07-29 13:16:00 -04:00
parent 65f5de02c1
commit 6d7ee58678
18 changed files with 146 additions and 272 deletions

View File

@ -40,7 +40,7 @@
<div class="detailSectionHeader">${HeaderAvailableServices}</div> <div class="detailSectionHeader">${HeaderAvailableServices}</div>
<div class="catalog"></div> <div class="catalog"></div>
<div class="staticSupporterPromotion supporterPromotion syncPromotion" style="display:none;"> <div class="customSupporterPromotion supporterPromotion" style="display:none;">
<a class="btn btnActionAccent" href="supporter.html" style="font-size:14px;"> <a class="btn btnActionAccent" href="supporter.html" style="font-size:14px;">
<div> <div>
${HeaderSyncRequiresSupporterMembership} ${HeaderSyncRequiresSupporterMembership}

View File

@ -681,6 +681,11 @@ span.itemCommunityRating:not(:empty) + .userDataIcons {
padding-bottom: .75em; padding-bottom: .75em;
} }
.detailSection h1 {
margin-bottom: .25em;
position: relative;
}
.detailSectionHeader { .detailSectionHeader {
background-clip: border-box; background-clip: border-box;
padding: .75em 0 .75em 1em; padding: .75em 0 .75em 1em;
@ -716,7 +721,6 @@ span.itemCommunityRating:not(:empty) + .userDataIcons {
.detailSectionHeaderButton { .detailSectionHeaderButton {
position: absolute; position: absolute;
right: 0; right: 0;
top: 7px;
margin-top: 0; margin-top: 0;
margin-bottom: 0; margin-bottom: 0;
} }

View File

@ -1352,12 +1352,16 @@ progress {
@media all and (min-width: 800px) { @media all and (min-width: 800px) {
.supporterPromotion { .supporterPromotion:not(.inlineSupporterPromotion) {
position: absolute; position: absolute;
top: 70px; top: 70px;
right: 20px; right: 20px;
margin: 0; margin: 0;
} }
.inlineSupporterPromotion {
display: inline-block;
}
} }
.disabledUser { .disabledUser {

View File

@ -1,5 +1,5 @@
.tileItem { .tileItem {
padding: 5px 7px 5px; padding: 5px 7px 5px 0;
font-weight: normal !important; font-weight: normal !important;
display: block; display: block;
position: relative; position: relative;

View File

@ -172,57 +172,57 @@
</div> </div>
<div class="collectionItems"></div> <div class="collectionItems"></div>
<div id="childrenCollapsible" class="hide detailSection"> <div id="childrenCollapsible" class="hide detailSection">
<div class="detailSectionHeader childrenSectionHeader"> <h1 class="childrenSectionHeader">
<span id="childrenTitle"></span> <span id="childrenTitle"></span>
</div> </h1>
<div id="childrenContent" class="detailSectionContent"> <div id="childrenContent">
<div class="childrenItemsContainer itemsContainer fullWidthItemsContainer" style="text-align:left;"></div> <div class="childrenItemsContainer itemsContainer fullWidthItemsContainer" style="text-align:left;"></div>
</div> </div>
</div> </div>
<div id="additionalPartsCollapsible" class="detailSection hide"> <div id="additionalPartsCollapsible" class="detailSection hide">
<div class="detailSectionHeader"> <h1>
${HeaderAdditionalParts} ${HeaderAdditionalParts}
</div> </h1>
<div id="additionalPartsContent" class="detailSectionContent smallItemsContainer"></div> <div id="additionalPartsContent" class="smallItemsContainer"></div>
</div> </div>
<div id="castCollapsible" style="display: none;" class="detailSection"> <div id="castCollapsible" style="display: none;" class="detailSection">
<div id="peopleHeader" class="detailSectionHeader"> <h1 id="peopleHeader">
${HeaderCastCrew} ${HeaderCastCrew}
</div> </h1>
<div id="castContent" class="detailSectionContent"></div> <div id="castContent"></div>
</div> </div>
<div class="detailSection photoInfo hide"> <div class="detailSection photoInfo hide">
<div class="detailSectionHeader"> <h1>
${HeaderPhotoInfo} ${HeaderPhotoInfo}
</div> </h1>
<div class="detailSectionContent" style="padding:1em;"> <div>
<div class="photoInfoContent"></div> <div class="photoInfoContent"></div>
</div> </div>
</div> </div>
<div id="specialsCollapsible" class="detailSection hide"> <div id="specialsCollapsible" class="detailSection hide">
<div class="detailSectionHeader"> <h1>
${HeaderSpecialFeatures} ${HeaderSpecialFeatures}
</div> </h1>
<div id="specialsContent" class="detailSectionContent smallItemsContainer"></div> <div id="specialsContent" class="smallItemsContainer"></div>
</div> </div>
<div id="musicVideosCollapsible" style="display: none;" class="detailSection"> <div id="musicVideosCollapsible" style="display: none;" class="detailSection">
<div class="detailSectionHeader"> <h1>
${HeaderMusicVideos} ${HeaderMusicVideos}
</div> </h1>
<div id="musicVideosContent" class="detailSectionContent smallItemsContainer"></div> <div id="musicVideosContent" class="smallItemsContainer"></div>
</div> </div>
<div id="similarCollapsible" style="display: none;" class="detailSection"> <div id="similarCollapsible" style="display: none;" class="detailSection">
<div class="detailSectionHeader"> <h1 class="similiarHeader">
</div> </h1>
<div id="similarContent" class="detailSectionContent"></div> <div id="similarContent"></div>
</div> </div>
<div id="criticReviewsCollapsible" style="display: none;" class="detailSection"> <div id="criticReviewsCollapsible" style="display: none;" class="detailSection">
<div class="detailSectionHeader"> <h1>
${HeaderAwardsAndReviews} ${HeaderAwardsAndReviews}
</div> </h1>
<div style="padding: 0 .5em;"> <div>
<p id="awardSummary"></p> <p id="awardSummary"></p>
<div id="criticRatingSummary" class="criticReview criticRatingSummary" style="display: none;"> <div id="criticRatingSummary" class="criticReview criticRatingSummary" style="display: none;">
<p style="margin: 0 0 .5em -40px; font-weight: bold;">TOMATOMETER®</p> <p style="margin: 0 0 .5em -40px; font-weight: bold;">TOMATOMETER®</p>
@ -232,28 +232,28 @@
<div class="criticRatingScore"></div> <div class="criticRatingScore"></div>
<div class="criticRatingSummaryText"></div> <div class="criticRatingSummaryText"></div>
</div> </div>
<div id="criticReviewsContent" class="detailSectionContent"></div> <div id="criticReviewsContent"></div>
</div> </div>
</div> </div>
<div id="scenesCollapsible" style="display: none;" class="detailSection"> <div id="scenesCollapsible" style="display: none;" class="detailSection">
<div class="detailSectionHeader"> <h1>
${HeaderScenes} ${HeaderScenes}
<a class="detailSectionHeaderButton chapterSettingsButton clearLink" style="margin-top:-3px;display:inline-block;" href="metadataadvanced.html" title="${ButtonSettings}" style="display:none;"><paper-icon-button icon="settings"></paper-icon-button></a> <a class="detailSectionHeaderButton chapterSettingsButton clearLink" style="margin-top:-8px;display:inline-block;" href="metadataadvanced.html" title="${ButtonSettings}" style="display:none;"><paper-icon-button icon="settings"></paper-icon-button></a>
</div> </h1>
<div id="scenesContent" class="detailSectionContent smallItemsContainer"></div> <div id="scenesContent" class="smallItemsContainer"></div>
</div> </div>
<div id="themeSongsCollapsible" style="display: none;" class="detailSection"> <div id="themeSongsCollapsible" style="display: none;" class="detailSection">
<div class="detailSectionHeader"> <h1>
${HeaderThemeSongs} ${HeaderThemeSongs}
</div> </h1>
<div id="themeSongsContent" class="detailSectionContent"></div> <div id="themeSongsContent"></div>
</div> </div>
<div class="detailSection detailsSection"> <div class="detailSection detailsSection">
<div class="detailSectionHeader"> <h1>
${HeaderDetails} ${HeaderDetails}
</div> </h1>
<div class="detailSectionContent" style="padding:0 1em;"> <div>
<div class="tabDetails"> <div class="tabDetails">
<p id="players"></p> <p id="players"></p>
<p class="itemExternalLinks"></p> <p class="itemExternalLinks"></p>
@ -264,15 +264,15 @@
</div> </div>
<div id="themeVideosCollapsible" style="display: none;" class="detailSection"> <div id="themeVideosCollapsible" style="display: none;" class="detailSection">
<div class="detailSectionHeader"> <h1>
${HeaderThemeVideos} ${HeaderThemeVideos}
</div> </h1>
<div id="themeVideosContent" class="detailSectionContent smallItemsContainer"></div> <div id="themeVideosContent" class="smallItemsContainer"></div>
</div> </div>
<div class="detailSection audioVideoMediaInfo hide"> <div class="detailSection audioVideoMediaInfo hide">
<h2 class="detailSectionHeader">${HeaderMediaInfo}</h2> <h1>${HeaderMediaInfo}</h1>
<div class="detailSectionContent" style="padding: 0 .7em;"> <div>
<div class="splitVersionContainer" style="border-bottom: 1px solid #444;"> <div class="splitVersionContainer" style="border-bottom: 1px solid #444;">
<button type="button" class="btnSplitVersions" data-mini="true" data-inline="true" data-icon="delete" title="${ButtonSplitVersionsApart}">${ButtonSplitVersionsApart}</button> <button type="button" class="btnSplitVersions" data-mini="true" data-inline="true" data-icon="delete" title="${ButtonSplitVersionsApart}">${ButtonSplitVersionsApart}</button>
</div> </div>

View File

@ -61,8 +61,6 @@
<br /> <br />
<label for="selectCountry">${LabelCountry}</label> <label for="selectCountry">${LabelCountry}</label>
<select id="selectCountry" data-mini="true" required="required"> <select id="selectCountry" data-mini="true" required="required">
<option value="ca">Canada</option>
<option value="usa" selected>United States</option>
</select> </select>
</div> </div>
<div> <div>

View File

@ -1,66 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Emby</title>
</head>
<body>
<div id="liveTvRecordingPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvrecording,paperbuttonstyle,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html"><iron-icon icon="info"></iron-icon>${TabSuggestions}</a>
<a href="livetvguide.html"><iron-icon icon="grid-on"></iron-icon>${TabGuide}</a>
<a href="livetvchannels.html"><iron-icon icon="live-tv"></iron-icon>${TabChannels}</a>
<a href="livetvrecordings.html" class="ui-btn-active"><iron-icon icon="slideshow"></iron-icon>${TabRecordings}</a>
<a href="livetvtimers.html"><iron-icon icon="schedule"></iron-icon>${TabScheduled}</a>
<a href="livetvseriestimers.html"><iron-icon icon="refresh"></iron-icon>${TabSeries}</a>
</div>
<div style="padding: 1em 0;">
<div>
<table class="detailPageContent primaryDetailPageContent">
<tr>
<td style="vertical-align: top; padding: 0 1em 0 0;">
<div id="itemImage" class="itemImageContainer smallDetailImageContainer"></div>
</td>
<td style="vertical-align: top; padding: 0;">
<p><span class="itemName inlineItemName"></span><span class="itemMiscInfo" style="display: inline;"></span></p>
<p class="itemEpisodeName"></p>
<p class="itemMiscInfo miscTvProgramInfo"></p>
<p>
<span class="itemCommunityRating"></span>
<span class="userDataIcons"></span>
</p>
<p class="itemGenres desktopGenres"></p>
<p class="itemOverview desktopOverview smoothScrollY"></p>
</td>
</tr>
</table>
</div>
<p class="itemGenres mobileGenres"></p>
<p class="itemOverview mobileOverview smoothScrollY"></p>
</div>
<div class="detailButtonsContainer">
<span id="playButtonContainer" style="display: none;">
<paper-button raised class="secondary btnPlay"><iron-icon icon="play-arrow"></iron-icon><span>${ButtonPlay}</span></paper-button>
</span>
<paper-button raised class="submit btnSync"><iron-icon icon="refresh"></iron-icon><span>${ButtonSync}</span></paper-button>
<span id="deleteButtonContainer" style="display: none;">
<paper-button raised class="subdued btnDelete"><iron-icon icon="delete"></iron-icon><span>${ButtonDelete}</span></paper-button>
</span>
</div>
<div data-role="content">
<div class="detailPageContent">
<div id="detailsSection" class="detailSection">
<div class="detailSectionHeader" style="margin-top: 0;">
${HeaderDetails}
</div>
<div class="detailSectionContent" style="padding: 0 1em;">
<p class="recordingStatus"></p>
<p class="airDate"></p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -12,7 +12,22 @@
<div data-role="content"> <div data-role="content">
<div class="ehsContent"> <div class="supporterPromotionContainer" style="display:none;text-align: right;">
<div class="customSupporterPromotion supporterPromotion inlineSupporterPromotion">
<a class="btn btnActionAccent" href="supporter.html" style="font-size:14px;">
<div>
${HeaderSyncRequiresSupporterMembership}
</div>
<div>
${HeaderEnjoyDayTrial}
</div>
<div style="font-weight:normal;font-size:90%;margin-top:5px;">
${ButtonLearnMore}
</div>
</a>
</div>
</div>
<div class="ehsContent" style="clear:both;">
<br /> <br />
<div class="syncActivity"> <div class="syncActivity">

View File

@ -119,9 +119,9 @@
Dashboard.getPluginSecurityInfo().done(function (pluginSecurityInfo) { Dashboard.getPluginSecurityInfo().done(function (pluginSecurityInfo) {
if (pluginSecurityInfo.IsMBSupporter || context != 'sync' || !AppInfo.enableSupporterMembership) { if (pluginSecurityInfo.IsMBSupporter || context != 'sync' || !AppInfo.enableSupporterMembership) {
$('.syncPromotion', page).hide(); $('.supporterPromotion', page).hide();
} else { } else {
$('.syncPromotion', page).show(); $('.supporterPromotion', page).show();
} }
}); });

View File

@ -1398,7 +1398,7 @@ $(document).on('pageshowready', "#dashboardPage", DashboardPage.onPageShow).on('
Dashboard.getPluginSecurityInfo().done(function (pluginSecurityInfo) { Dashboard.getPluginSecurityInfo().done(function (pluginSecurityInfo) {
if (!$('.staticSupporterPromotion', page).length) { if (!$('.customSupporterPromotion', page).length) {
$('.supporterPromotion', page).remove(); $('.supporterPromotion', page).remove();
if (!pluginSecurityInfo.IsMBSupporter && AppInfo.enableSupporterMembership) { if (!pluginSecurityInfo.IsMBSupporter && AppInfo.enableSupporterMembership) {

View File

@ -614,7 +614,7 @@
var elem = $('#similarCollapsible', page).show(); var elem = $('#similarCollapsible', page).show();
$('.detailSectionHeader', elem).html(Globalize.translate('HeaderIfYouLikeCheckTheseOut', item.Name)); $('.similiarHeader', elem).html(Globalize.translate('HeaderIfYouLikeCheckTheseOut', item.Name));
var html = LibraryBrowser.getPosterViewHtml({ var html = LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
@ -915,14 +915,14 @@
html += '<div class="detailSection">'; html += '<div class="detailSection">';
html += '<div class="detailSectionHeader" style="position: relative;">'; html += '<h1>';
html += '<span>' + type.name + '</span>'; html += '<span>' + type.name + '</span>';
if (user.Policy.IsAdministrator) { if (user.Policy.IsAdministrator) {
html += '<a class="detailSectionHeaderButton" href="edititemmetadata.html?tab=2&id=' + currentItem.Id + '" data-role="button" data-icon="edit" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonEdit') + '</a>'; html += '<a class="detailSectionHeaderButton clearLink" style="margin-top:-8px;display:inline-block;" href="edititemmetadata.html?tab=2&id=' + currentItem.Id + '" title="' + Globalize.translate('ButtonEdit') + '" style="display:none;"><paper-icon-button icon="mode-edit"></paper-icon-button></a>';
} }
html += '</div>'; html += '</h1>';
html += '<div class="detailSectionContent">'; html += '<div class="detailSectionContent">';

View File

@ -832,7 +832,7 @@
return "itembynamedetails.html?id=" + id + contextSuffix; return "itembynamedetails.html?id=" + id + contextSuffix;
} }
if (item.Type == "Recording") { if (item.Type == "Recording") {
return "livetvrecording.html?id=" + id + contextSuffix; return "itemdetails.html?id=" + id;
} }
if (item.Type == "MusicArtist") { if (item.Type == "MusicArtist") {

View File

@ -4,6 +4,8 @@
function reload(page, providerId) { function reload(page, providerId) {
Dashboard.showLoadingMsg();
ApiClient.getNamedConfiguration("livetv").done(function (config) { ApiClient.getNamedConfiguration("livetv").done(function (config) {
var info = config.ListingProviders.filter(function (i) { var info = config.ListingProviders.filter(function (i) {
@ -12,15 +14,64 @@
listingsId = info.ListingsId; listingsId = info.ListingsId;
$('#selectListing', page).val(info.ListingsId || '').selectmenu('refresh'); $('#selectListing', page).val(info.ListingsId || '').selectmenu('refresh');
$('#selectCountry', page).val(info.Country || '').selectmenu('refresh');
page.querySelector('.txtZipCode').value = info.ZipCode || '';
$(page.querySelector('.txtZipCode')).trigger('change');
page.querySelector('.txtUser').value = info.Username || ''; page.querySelector('.txtUser').value = info.Username || '';
page.querySelector('.txtPass').value = info.Username || ''; page.querySelector('.txtPass').value = info.Username || '';
page.querySelector('.txtZipCode').value = info.ZipCode || '';
setCountry(page, info);
}); });
} }
function setCountry(page, info) {
ApiClient.getJSON(ApiClient.getUrl('LiveTv/ListingProviders/SchedulesDirect/Countries')).done(function (result) {
var countryList = [];
var i, length;
for (var region in result) {
var countries = result[region];
if (countries.length && region !== 'ZZZ') {
for (i = 0, length = countries.length; i < length; i++) {
countryList.push({
name: countries[i].fullName,
value: countries[i].shortName
});
}
}
}
countryList.sort(function (a, b) {
if (a.name > b.name) {
return 1;
}
if (a.name < b.name) {
return -1;
}
// a must be equal to b
return 0;
});
$('#selectCountry', page).html(countryList.map(function (c) {
return '<option value="' + c.value + '">' + c.name + '</option>';
}).join('')).val(info.Country || '').selectmenu('refresh');
$(page.querySelector('.txtZipCode')).trigger('change');
}).fail(function () {
Dashboard.alert({
message: Globalize.translate('ErrorGettingTvLineups')
});
});
Dashboard.hideLoadingMsg();
}
function submitLoginForm(page) { function submitLoginForm(page) {
Dashboard.showLoadingMsg(); Dashboard.showLoadingMsg();

View File

@ -1,130 +0,0 @@
(function ($, document) {
var currentItem;
function deleteRecording() {
Dashboard.confirm(Globalize.translate('MessageConfirmRecordingDeletion'), Globalize.translate('HeaderConfirmRecordingDeletion'), function (result) {
if (result) {
Dashboard.showLoadingMsg();
ApiClient.deleteLiveTvRecording(currentItem.Id).done(function () {
Dashboard.alert(Globalize.translate('MessageRecordingDeleted'));
Dashboard.navigate('livetvrecordings.html');
});
}
});
}
function play() {
var userdata = currentItem.UserData || {};
var mediaType = currentItem.MediaType;
LibraryBrowser.showPlayMenu(null, currentItem.Id, currentItem.Type, false, mediaType, userdata.PlaybackPositionTicks);
}
function renderRecording(page, item) {
currentItem = item;
var context = 'livetv';
var name = item.Name;
$('#itemImage', page).html(LibraryBrowser.getDetailImageHtml(item));
Dashboard.setPageTitle(name);
$('.itemName', page).html(name);
$('.itemEpisodeName', page).html(item.EpisodeTitle || '');
$('.itemCommunityRating', page).html(LibraryBrowser.getRatingHtml(item));
$('.userDataIcons', page).html(LibraryBrowser.getUserDataIconsHtml(item));
LibraryBrowser.renderGenres($('.itemGenres', page), item, context);
LibraryBrowser.renderOverview(page.querySelectorAll('.itemOverview'), item);
$('.itemMiscInfo', page).html(LibraryBrowser.getMiscInfoHtml(item));
LiveTvHelpers.renderMiscProgramInfo($('.miscTvProgramInfo', page), item);
$(page).trigger('displayingitem', [{
item: item,
context: 'livetv'
}]);
$('.recordingStatus', page).html('Status:&nbsp;&nbsp;&nbsp;' + item.Status);
if (MediaController.canPlay(item)) {
$('#playButtonContainer', page).show();
} else {
$('#playButtonContainer', page).hide();
}
if (item.CanDelete) {
$('#deleteButtonContainer', page).show();
} else {
$('#deleteButtonContainer', page).hide();
}
LiveTvHelpers.renderOriginalAirDate($('.airDate', page), item);
Dashboard.hideLoadingMsg();
Dashboard.getCurrentUser().done(function(user) {
if (SyncManager.isAvailable(item, user)) {
$('.btnSync', page).removeClass('hide');
} else {
$('.btnSync', page).addClass('hide');
}
});
}
function reload(page) {
Dashboard.showLoadingMsg();
var id = getParameterByName('id');
ApiClient.getLiveTvRecording(id, Dashboard.getCurrentUserId()).done(function (result) {
renderRecording(page, result);
});
}
$(document).on('pageinitdepends', "#liveTvRecordingPage", function () {
var page = this;
$('.btnDelete', page).on('click', deleteRecording);
$('.btnPlay', page).on('click', play);
$('.btnSync', page).on('click', function () {
SyncManager.showMenu({
items: [currentItem]
});
});
}).on('pagebeforeshowready', "#liveTvRecordingPage", function () {
var page = this;
reload(page);
}).on('pagebeforehide', "#liveTvRecordingPage", function () {
currentItem = null;
});
})(jQuery, document);

View File

@ -88,8 +88,6 @@
}).done(function (result) { }).done(function (result) {
renderRecordings($('#latestRecordings', page), result.Items); renderRecordings($('#latestRecordings', page), result.Items);
LibraryBrowser.setLastRefreshed(page);
}); });
ApiClient.getLiveTvRecordingGroups({ ApiClient.getLiveTvRecordingGroups({

View File

@ -103,8 +103,6 @@
ApiClient.getLiveTvTimers().done(function (result) { ApiClient.getLiveTvTimers().done(function (result) {
renderTimers(page, result.Items); renderTimers(page, result.Items);
LibraryBrowser.setLastRefreshed(page);
}); });
} }

View File

@ -296,9 +296,9 @@
Dashboard.getPluginSecurityInfo().done(function (pluginSecurityInfo) { Dashboard.getPluginSecurityInfo().done(function (pluginSecurityInfo) {
if (pluginSecurityInfo.IsMBSupporter || !AppInfo.enableSupporterMembership) { if (pluginSecurityInfo.IsMBSupporter || !AppInfo.enableSupporterMembership) {
$('.syncPromotion', page).hide(); $('.supporterPromotionContainer', hide).show();
} else { } else {
$('.syncPromotion', page).show(); $('.supporterPromotionContainer', page).show();
} }
}); });

View File

@ -20,7 +20,8 @@
<progress max="100" min="0" style="width:100px;display:none;" class="syncProgress"></progress> <progress max="100" min="0" style="width:100px;display:none;" class="syncProgress"></progress>
</div> </div>
<br /> <br />
<div class="staticSupporterPromotion supporterPromotion syncPromotion" style="display:none;"> <div class="supporterPromotionContainer" style="display:none;">
<div class="customSupporterPromotion supporterPromotion">
<a class="btn btnActionAccent" href="supporter.html" style="font-size:14px;"> <a class="btn btnActionAccent" href="supporter.html" style="font-size:14px;">
<div> <div>
${HeaderSyncRequiresSupporterMembership} ${HeaderSyncRequiresSupporterMembership}
@ -33,6 +34,7 @@
</div> </div>
</a> </a>
</div> </div>
</div>
<div class="syncActivity"> <div class="syncActivity">
</div> </div>