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 @@
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 @@
-
@@ -25,7 +25,7 @@
-
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 @@
-
@@ -58,7 +58,7 @@
-
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}
-
${NewServerVersionAvailable}
+
+ ${NewServerVersionAvailable}
+
@@ -39,7 +46,9 @@
-
${HowToConnectFromEmbyApps}
+
+ ${HowToConnectFromEmbyApps}
+