diff --git a/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js b/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js index 207ccb81a1..5f18f75729 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js +++ b/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js @@ -138,7 +138,23 @@ define(['datetime', 'globalize', 'embyRouter', 'itemHelper', 'material-icons', ' } } - if (item.StartDate && item.Type !== 'Program') { + if (item.Type === 'SeriesTimer') { + if (item.RecordAnyTime) { + + miscInfo.push(globalize.translate('sharedcomponents#Anytime')); + } else { + miscInfo.push(datetime.getDisplayTime(item.StartDate)); + } + + if (item.RecordAnyChannel) { + miscInfo.push(globalize.translate('sharedcomponents#AllChannels')); + } + else { + miscInfo.push(item.ChannelName || globalize.translate('sharedcomponents#OneChannel')); + } + } + + if (item.StartDate && item.Type !== 'Program' && item.Type !== 'SeriesTimer') { try { date = datetime.parseISO8601Date(item.StartDate); diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.js b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.js index 62f28c79b2..6ff33fe0c7 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.js +++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.js @@ -98,15 +98,24 @@ function reload(context, id) { - loading.show(); - currentItemId = id; - var apiClient = connectionManager.getApiClient(currentServerId); - apiClient.getLiveTvSeriesTimer(id).then(function (result) { - renderTimer(context, result, apiClient); + loading.show(); + if (typeof id === 'string') { + currentItemId = id; + + apiClient.getLiveTvSeriesTimer(id).then(function (result) { + + renderTimer(context, result, apiClient); + loading.hide(); + }); + } else if (id) { + + currentItemId = id.Id; + + renderTimer(context, id, apiClient); loading.hide(); - }); + } } function fillKeepUpTo(context) { @@ -130,6 +139,10 @@ context.querySelector('.selectKeepUpTo').innerHTML = html; } + + function onFieldChange(e) { + this.querySelector('.btnSubmit').click(); + } function embed(itemId, serverId, options) { @@ -163,9 +176,8 @@ dlg.querySelector('.dialogContentInner').className = ''; dlg.classList.remove('hide'); - dlg.addEventListener('change', function () { - dlg.querySelector('.btnSubmit').click(); - }); + dlg.removeEventListener('change', onFieldChange); + dlg.addEventListener('change', onFieldChange); currentDialog = dlg; diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.template.html b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.template.html index 464be5c89c..867be869a7 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.template.html +++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.template.html @@ -8,7 +8,7 @@
-
+
+ ${SkipEpisodesAlreadyInMyLibrary}
${SkipEpisodesAlreadyInMyLibraryHelp}
@@ -39,8 +39,7 @@
- +
diff --git a/dashboard-ui/itemdetails.html b/dashboard-ui/itemdetails.html index 6cd4d517be..e29b814c77 100644 --- a/dashboard-ui/itemdetails.html +++ b/dashboard-ui/itemdetails.html @@ -26,17 +26,15 @@
-
-

-

+

+

-
+
-
+
-
+
-
@@ -48,6 +46,10 @@ videocam ${ButtonTrailer} +
-
-
-
-

- ${HeaderNextUp} -

-
+
+

+ ${HeaderSchedule} +

+
-
-

- -

-
-
-
-
-
-

- ${HeaderAdditionalParts} -

-
-
-
-

- ${HeaderCastCrew} -

-
- -
-
-

- ${HeaderUpcomingOnTV} -

-
+
+
+
+

+ ${HeaderNextUp} +

+
+
+
+

+ +

+
+
+
+
+

+ ${HeaderAdditionalParts} +

+
+
+
+

+ ${HeaderCastCrew} +

+
+ +
+
+

+ ${HeaderUpcomingOnTV} +

+
+
-
-

- ${HeaderPhotoInfo} -

-
-
-
+
+

+ ${HeaderPhotoInfo} +

+
+
+
-
-

- ${HeaderSpecialFeatures} -

-
-
-
-

- ${HeaderMusicVideos} -

-
-
-
-

-
-
-
-

${HeaderMoreLikeThis}

-
-
-
-

- ${HeaderAwardsAndReviews} -

-
-

-
-
- -
-

TOMATOMETER®

-
-
-
+
+

+ ${HeaderSpecialFeatures} +

+
+
+
+

+ ${HeaderMusicVideos} +

+
+
+
+

+
+
+
+

${HeaderMoreLikeThis}

+
+
+
+

+ ${HeaderAwardsAndReviews} +

+
+

+
+
+ +
+

TOMATOMETER®

+
+
-
+
+
-
-

- ${HeaderScenes} -

-
-
-
-

- ${HeaderThemeSongs} -

-
-
+
+

+ ${HeaderScenes} +

+
+
+
+

+ ${HeaderThemeSongs} +

+
+
-
-

- ${HeaderThemeVideos} -

-
-
+
+

+ ${HeaderThemeVideos} +

+
+
-
-

${HeaderMediaInfo}

-
-
- -
-
+
+

${HeaderMediaInfo}

+
+
+
+
diff --git a/dashboard-ui/livetvseriestimer.html b/dashboard-ui/livetvseriestimer.html deleted file mode 100644 index d3b7b92500..0000000000 --- a/dashboard-ui/livetvseriestimer.html +++ /dev/null @@ -1,28 +0,0 @@ -
- - -
- -
-
-

-
- -
- -
- -

${HeaderSchedule}

-
-
-
-
- -
\ No newline at end of file diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index 45a213d9f6..95724cba29 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -9,6 +9,10 @@ return ApiClient.getItem(Dashboard.getCurrentUserId(), id); } + if (params.seriesTimerId) { + return ApiClient.getLiveTvSeriesTimer(params.seriesTimerId); + } + var name = params.genre; if (name) { @@ -108,6 +112,79 @@ }); } + function getProgramScheduleHtml(items, options) { + + options = options || {}; + + var html = ''; + html += '
'; + html += listView.getListViewHtml({ + items: items, + enableUserDataButtons: false, + image: false, + showProgramDateTime: true, + mediaInfo: false, + action: 'none', + moreButton: false, + recordButton: false + }); + + html += '
'; + + return html; + } + + function renderSeriesTimerSchedule(page, seriesTimerId) { + + ApiClient.getLiveTvTimers({ + UserId: ApiClient.getCurrentUserId(), + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Thumb", + SortBy: "StartDate", + EnableTotalRecordCount: false, + EnableUserData: false, + SeriesTimerId: seriesTimerId, + Fields: "ChannelInfo" + + }).then(function (result) { + + if (result.Items.length && result.Items[0].SeriesTimerId != seriesTimerId) { + result.Items = []; + } + + var html = getProgramScheduleHtml(result.Items); + + var scheduleTab = page.querySelector('.seriesTimerSchedule'); + scheduleTab.innerHTML = html; + + imageLoader.lazyChildren(scheduleTab); + }); + } + + function renderSeriesTimerEditor(page, item, user) { + + if (item.Type !== 'SeriesTimer') { + return; + } + + if (!user.Policy.EnableLiveTvManagement) { + page.querySelector('.seriesTimerScheduleSection').classList.add('hide'); + page.querySelector('.btnCancelSeriesTimer').classList.add('hide'); + return; + } + + require(['seriesRecordingEditor'], function (seriesRecordingEditor) { + seriesRecordingEditor.embed(item, ApiClient.serverId(), { + context: page.querySelector('.seriesRecordingEditor') + }); + }); + + page.querySelector('.seriesTimerScheduleSection').classList.remove('hide'); + page.querySelector('.btnCancelSeriesTimer').classList.remove('hide'); + + renderSeriesTimerSchedule(page, item.Id); + } + function reloadFromItem(page, params, item) { currentItem = item; @@ -122,6 +199,8 @@ window.scrollTo(0, 0); + renderSeriesTimerEditor(page, item, user); + renderImage(page, item, user); renderLogo(page, item, ApiClient); @@ -1582,7 +1661,7 @@ for (var i = 0, length = userDataIcons.length; i < length; i++) { - if (item.Type == 'Program') { + if (item.Type == 'Program' || item.Type == 'SeriesTimer') { userDataIcons[i].classList.add('hide'); } else { userDataIcons[i].classList.remove('hide'); @@ -1699,6 +1778,10 @@ function renderThemeMedia(page, item) { + if (item.Type === 'SeriesTimer' || item.Type === 'Timer' || item.Type === 'Genre' || item.Type === 'MusicGenre' || item.Type === 'GameGenre' || item.Type === 'Studio' || item.Type === 'Person') { + return; + } + ApiClient.getThemeMedia(Dashboard.getCurrentUserId(), item.Id, true).then(function (result) { var themeSongs = result.ThemeSongsResult.OwnerId == item.Id ? @@ -2177,6 +2260,16 @@ }); } + function onCancelSeriesTimerClick() { + + require(['recordingHelper'], function (recordingHelper) { + + recordingHelper.cancelSeriesTimerWithConfirmation(currentItem.Id, currentItem.ServerId).then(function () { + Dashboard.navigate('livetv.html'); + }); + }); + } + return function (view, params) { function onPlayTrailerClick() { @@ -2208,6 +2301,11 @@ elems[i].addEventListener('click', onPlayTrailerClick); } + elems = view.querySelectorAll('.btnCancelSeriesTimer'); + for (i = 0, length = elems.length; i < length; i++) { + elems[i].addEventListener('click', onCancelSeriesTimerClick); + } + elems = view.querySelectorAll('.btnDeleteItem'); for (i = 0, length = elems.length; i < length; i++) { elems[i].addEventListener('click', onDeleteClick); diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 15d8734716..7ebdde9bfd 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -252,7 +252,8 @@ var id = item.Id || item.ItemId; if (item.Type == "SeriesTimer") { - return "livetvseriestimer.html?id=" + id; + //return "livetvseriestimer.html?id=" + id; + return "itemdetails.html?seriesTimerId=" + id; } if (item.CollectionType == 'livetv') { @@ -733,6 +734,10 @@ renderDetailImage: function (elem, item, editable, preferThumb, imageLoader, indicators) { + if (item.Type === 'SeriesTimer') { + editable = false; + } + var imageTags = item.ImageTags || {}; if (item.PrimaryImageTag) { @@ -809,6 +814,14 @@ tag: item.SeriesPrimaryImageTag }); } + else if (item.ParentPrimaryImageItemId && item.ParentPrimaryImageTag) { + + url = ApiClient.getScaledImageUrl(item.ParentPrimaryImageItemId, { + type: "Primary", + maxHeight: imageHeight, + tag: item.ParentPrimaryImageTag + }); + } html += '
'; diff --git a/dashboard-ui/scripts/livetvseriestimer.js b/dashboard-ui/scripts/livetvseriestimer.js deleted file mode 100644 index cf5edcdc9f..0000000000 --- a/dashboard-ui/scripts/livetvseriestimer.js +++ /dev/null @@ -1,83 +0,0 @@ -define(['datetime', 'dom', 'seriesRecordingEditor', 'listView', 'imageLoader', 'emby-itemscontainer'], function (datetime, dom, seriesRecordingEditor, listView, imageLoader) { - 'use strict'; - - return function (view, params) { - - function renderTimer(page, item) { - - page.querySelector('.itemName').innerHTML = item.Name; - - Dashboard.hideLoadingMsg(); - } - - function getProgramScheduleHtml(items, options) { - - options = options || {}; - - var html = ''; - html += '
'; - html += listView.getListViewHtml({ - items: items, - enableUserDataButtons: false, - image: false, - showProgramDateTime: true, - mediaInfo: false, - action: 'none', - moreButton: false, - recordButton: false - }); - - html += '
'; - - return html; - } - - function renderSchedule(page) { - - ApiClient.getLiveTvTimers({ - UserId: ApiClient.getCurrentUserId(), - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Thumb", - SortBy: "StartDate", - EnableTotalRecordCount: false, - EnableUserData: false, - SeriesTimerId: params.id, - Fields: "ChannelInfo" - - }).then(function (result) { - - if (result.Items.length && result.Items[0].SeriesTimerId != params.id) { - result.Items = []; - } - - var html = getProgramScheduleHtml(result.Items); - - var scheduleTab = page.querySelector('.scheduleTab'); - scheduleTab.innerHTML = html; - - imageLoader.lazyChildren(scheduleTab); - }); - } - - function reload() { - - var id = params.id; - Dashboard.showLoadingMsg(); - - ApiClient.getLiveTvSeriesTimer(id).then(function (result) { - - renderTimer(view, result); - - }); - - renderSchedule(view); - } - - seriesRecordingEditor.embed(params.id, ApiClient.serverId(), { - context: view.querySelector('.recordingEditor') - }); - - view.querySelector('.scheduleTab').addEventListener('timercancelled', reload); - view.addEventListener('viewbeforeshow', reload); - }; -}); \ No newline at end of file