diff --git a/dashboard-ui/autoorganizetv.html b/dashboard-ui/autoorganizetv.html index b2059c7bf0..4d6eccfbf7 100644 --- a/dashboard-ui/autoorganizetv.html +++ b/dashboard-ui/autoorganizetv.html @@ -18,7 +18,7 @@
${LabelWatchFolderHelp}
- +
diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index 7c918aa2ae..1a9b95be19 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -14,12 +14,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.4.260", - "_release": "1.4.260", + "version": "1.4.261", + "_release": "1.4.261", "_resolution": { "type": "version", - "tag": "1.4.260", - "commit": "17a68c9487039020a8056d4aec2617d0daf16d8b" + "tag": "1.4.261", + "commit": "c985fe644bf1268d66f69ddcf3ba73faf5c6bd3e" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.1", diff --git a/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js b/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js index fcbfbf403c..f84b119c7e 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js +++ b/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js @@ -138,13 +138,14 @@ define(['browser'], function (browser) { function testCanPlayTs() { - return browser.tizen || browser.web0s; + return browser.tizen || browser.web0s || browser.edgeUwp; } function getDirectPlayProfileForVideoContainer(container, videoAudioCodecs) { var supported = false; var profileContainer = container; + var videoCodecs = []; switch (container) { @@ -169,16 +170,19 @@ define(['browser'], function (browser) { break; case 'mov': supported = browser.chrome || browser.edgeUwp; + videoCodecs.push('h264'); break; case 'm2ts': supported = browser.tizen || browser.web0s || browser.edgeUwp; + videoCodecs.push('h264'); break; case 'wmv': supported = browser.tizen || browser.web0s || browser.edgeUwp; videoAudioCodecs = []; break; case 'ts': - supported = browser.tizen || browser.web0s || browser.edgeUwp; + supported = testCanPlayTs(); + videoCodecs.push('h264'); profileContainer = 'ts,mpegts'; break; default: @@ -192,6 +196,7 @@ define(['browser'], function (browser) { return { Container: profileContainer, Type: 'Video', + VideoCodec: videoCodecs.join(','), AudioCodec: videoAudioCodecs.join(',') }; } @@ -239,7 +244,6 @@ define(['browser'], function (browser) { var canPlayWebm = videoTestElement.canPlayType('video/webm').replace(/no/, ''); var canPlayMkv = testCanPlayMkv(videoTestElement); - var canPlayTs = testCanPlayTs(); var profile = {}; @@ -269,7 +273,7 @@ define(['browser'], function (browser) { } var mp3Added = false; - if (canPlayMkv || canPlayTs) { + if (canPlayMkv) { if (supportsMp3VideoAudio) { mp3Added = true; videoAudioCodecs.push('mp3'); @@ -401,20 +405,6 @@ define(['browser'], function (browser) { }); } - if (canPlayTs && options.supportsCustomSeeking && !browser.tizen && !browser.web0s && options.enableTsProgressive !== false) { - profile.TranscodingProfiles.push({ - Container: 'ts', - Type: 'Video', - AudioCodec: videoAudioCodecs.join(','), - VideoCodec: 'h264', - Context: 'Streaming', - CopyTimestamps: copyTimestamps, - // If audio transcoding is needed, limit channels to number of physical audio channels - // Trying to transcode to 5 channels when there are only 2 speakers generally does not sound good - MaxAudioChannels: physicalAudioChannels.toString() - }); - } - if (canPlayHls() && options.enableHls !== false) { profile.TranscodingProfiles.push({ Container: 'ts', diff --git a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css index 7a801d1a17..3dd16caf7f 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css +++ b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css @@ -419,6 +419,11 @@ color: #cc3333 !important; } +.seriesTimerIcon-inactive { + color: inherit !important; + opacity: .7; +} + .visibleGuideScroller::-webkit-scrollbar { width: 10px; height: 10px; diff --git a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js index 0b6d9a3a14..cdc6ebdbc7 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js +++ b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js @@ -395,8 +395,12 @@ html += 'hd'; } - if (program.SeriesTimerId && program.TimerId) { - html += ''; + if (program.SeriesTimerId) { + if (program.TimerId) { + html += ''; + } else { + html += ''; + } } else if (program.TimerId) { html += ''; diff --git a/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.css b/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.css index 51f6aceff8..fdc4c346b7 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.css +++ b/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.css @@ -28,6 +28,10 @@ color: #CB272A; } +.timerIndicator-inactive { + color: #888; +} + .indicator + .indicator { margin-left: .25em; } @@ -73,4 +77,4 @@ .fullSyncIndicator { background: rgba(82,181,75,1); -} \ No newline at end of file +} diff --git a/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.js b/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.js index 29fa3a2561..262038b5dc 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.js +++ b/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.js @@ -98,8 +98,12 @@ define(['css!./indicators.css', 'material-icons'], function () { function getTimerIndicator(item) { - if (item.SeriesTimerId && item.TimerId) { - return ''; + if (item.SeriesTimerId) { + if (item.TimerId) { + return ''; + } else { + return ''; + } } else if (item.TimerId) { return ''; diff --git a/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js b/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js index b9f9fa326a..3ac467d665 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js +++ b/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js @@ -41,10 +41,16 @@ define(['datetime', 'globalize', 'embyRouter', 'itemHelper', 'material-icons', ' } if (options.timerIndicator !== false) { - if (item.SeriesTimerId && item.TimerId) { - miscInfo.push({ - html: '' - }); + if (item.SeriesTimerId) { + if (item.TimerId) { + miscInfo.push({ + html: '' + }); + } else { + miscInfo.push({ + html: '' + }); + } } else if (item.TimerId) { miscInfo.push({ diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.template.html b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.template.html index 8b85cb6ead..849bdf587c 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.template.html +++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.template.html @@ -15,7 +15,7 @@
-
+
${MinutesBefore}
@@ -25,7 +25,7 @@
-
+
${MinutesAfter}
diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingfields.js b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingfields.js index 58d8781b7c..9f3ab86bf6 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingfields.js +++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingfields.js @@ -224,6 +224,12 @@ } } + function sendToast(msg) { + require(['toast'], function (toast) { + toast(msg); + }); + } + function onRecordSeriesChange(e) { this.changed = true; @@ -254,6 +260,7 @@ if (this.SeriesTimerId) { apiClient.cancelLiveTvSeriesTimer(this.SeriesTimerId).then(function () { + sendToast(globalize.translate('sharedcomponents#RecordingCancelled')); fetchData(self); }); } diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordinghelper.js b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordinghelper.js index 8128e60beb..f41e1e21ca 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordinghelper.js +++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordinghelper.js @@ -59,9 +59,33 @@ }); } + function toggleRecording(serverId, programId, timerId, seriesTimerId) { + + var apiClient = connectionManager.getApiClient(serverId); + + if (seriesTimerId && timerId) { + + // cancel + return cancelTimer(apiClient, timerId, true); + + } else if (timerId && programId) { + + // change to series recording, if possible + // otherwise cancel individual recording + return changeRecordingToSeries(apiClient, timerId, programId); + + } else if (programId) { + // schedule recording + return createRecording(apiClient, programId); + } else { + return Promise.reject(); + } + } + return { cancelTimer: cancelTimer, createRecording: createRecording, - changeRecordingToSeries: changeRecordingToSeries + changeRecordingToSeries: changeRecordingToSeries, + toggleRecording: toggleRecording }; }); \ No newline at end of file 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 0d15e74f19..6b3c318bd3 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.template.html +++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/seriesrecordingeditor.template.html @@ -48,7 +48,7 @@
-
+
${MinutesBefore}
@@ -58,7 +58,7 @@
-
+
${MinutesAfter}
diff --git a/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js b/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js index 492d9c4bd1..fd58548c30 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js +++ b/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js @@ -335,22 +335,10 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g function onRecordCommand(serverId, id, type, timerId, seriesTimerId) { - var apiClient = connectionManager.getApiClient(serverId); + if (type == 'Program' || timerId || seriesTimerId) { - if (seriesTimerId && timerId) { - - // cancel - recordingHelper.cancelTimer(apiClient, timerId, true); - - } else if (timerId) { - - // change to series recording, if possible - // otherwise cancel individual recording - recordingHelper.changeRecordingToSeries(apiClient, timerId, id); - - } else if (type == 'Program') { - // schedule recording - recordingHelper.createRecording(apiClient, id); + var programId = type == 'Program' ? id : null; + recordingHelper.toggle(serverId, programId, timerId, seriesTimerId); } } diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json index bd0af79715..2cd4179372 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json @@ -300,7 +300,7 @@ "LabelStopWhenPossible": "Stop when possible:", "MinutesBefore": "minutes before", "MinutesAfter": "minutes after", - "SkipEpisodesAlreadyInMyLibrary": "Skip recording episodes that are already in my library", + "SkipEpisodesAlreadyInMyLibrary": "Skip episodes that are already in my library", "SkipEpisodesAlreadyInMyLibraryHelp": "Episodes will be compared using season and episode numbers, when available.", "LabelKeepUpTo": "Keep up to:", "AsManyAsPossible": "As many as possible" diff --git a/dashboard-ui/dashboard.html b/dashboard-ui/dashboard.html index c83123318d..d083ae30c7 100644 --- a/dashboard-ui/dashboard.html +++ b/dashboard-ui/dashboard.html @@ -16,16 +16,23 @@
-

-
+
+

+ +
+

-

- check +

+ check ${ServerUpToDate}