diff --git a/package.json b/package.json
index 04e5b8739e..a38cf6c843 100644
--- a/package.json
+++ b/package.json
@@ -332,6 +332,7 @@
"src/plugins/youtubePlayer/plugin.js",
"src/scripts/alphanumericshortcuts.js",
"src/scripts/autoBackdrops.js",
+ "src/scripts/autocast.js",
"src/scripts/browser.js",
"src/scripts/clientUtils.js",
"src/scripts/datetime.js",
diff --git a/src/components/playback/playerSelectionMenu.js b/src/components/playback/playerSelectionMenu.js
index 7799613400..0afa56faf4 100644
--- a/src/components/playback/playerSelectionMenu.js
+++ b/src/components/playback/playerSelectionMenu.js
@@ -6,6 +6,7 @@ import playbackManager from 'playbackManager';
import appRouter from 'appRouter';
import globalize from 'globalize';
import appHost from 'apphost';
+import * as autocast from 'autocast';
function mirrorItem(info, player) {
var item = info.item;
@@ -221,6 +222,14 @@ function showActivePlayerMenuInternal(dialogHelper, playerInfo) {
html += '';
+ if (autocast.supported()) {
+ html += '
';
+ }
+
html += '';
html += '';
@@ -237,6 +246,12 @@ function showActivePlayerMenuInternal(dialogHelper, playerInfo) {
chkMirror.addEventListener('change', onMirrorChange);
}
+ var chkAutoCast = dlg.querySelector('.chkAutoCast');
+
+ if (chkAutoCast) {
+ chkAutoCast.addEventListener('change', onAutoCastChange);
+ }
+
var destination = '';
var btnRemoteControl = dlg.querySelector('.btnRemoteControl');
@@ -269,6 +284,10 @@ function onMirrorChange() {
playbackManager.enableDisplayMirroring(this.checked);
}
+function onAutoCastChange() {
+ autocast.enable(this.checked);
+}
+
document.addEventListener('viewshow', function (e) {
var state = e.detail.state || {};
var item = state.item;
diff --git a/src/scripts/autocast.js b/src/scripts/autocast.js
new file mode 100644
index 0000000000..84e07b32cd
--- /dev/null
+++ b/src/scripts/autocast.js
@@ -0,0 +1,47 @@
+import events from 'events';
+import playbackManager from 'playbackManager';
+
+export function supported() {
+ return typeof(Storage) !== 'undefined';
+}
+
+export function enable(enabled) {
+ if (!supported()) return;
+
+ if (enabled) {
+ const currentPlayerInfo = playbackManager.getPlayerInfo();
+
+ if (currentPlayerInfo && currentPlayerInfo.id) {
+ localStorage.setItem('autocastPlayerId', currentPlayerInfo.id);
+ }
+ } else {
+ localStorage.removeItem('autocastPlayerId');
+ }
+}
+
+export function isEnabled() {
+ if (!supported()) return false;
+
+ const playerId = localStorage.getItem('autocastPlayerId');
+ const currentPlayerInfo = playbackManager.getPlayerInfo();
+
+ return (currentPlayerInfo && playerId && currentPlayerInfo.id === playerId);
+}
+
+function onOpen() {
+ const playerId = localStorage.getItem('autocastPlayerId');
+
+ playbackManager.getTargets().then(function (targets) {
+ for (var i = 0; i < targets.length; i++) {
+ if (targets[i].id == playerId) {
+ playbackManager.trySetActivePlayer(targets[i].playerName, targets[i]);
+ break;
+ }
+ }
+ });
+}
+
+const apiClient = window.connectionManager.currentApiClient();
+if (apiClient && supported()) {
+ events.on(apiClient, 'websocketopen', onOpen);
+}
diff --git a/src/scripts/libraryMenu.js b/src/scripts/libraryMenu.js
index 10e4a3c9c9..422d82fff6 100644
--- a/src/scripts/libraryMenu.js
+++ b/src/scripts/libraryMenu.js
@@ -52,6 +52,7 @@ import 'flexStyles';
lazyLoadViewMenuBarImages();
bindMenuEvents();
+ updateCastIcon();
}
function getCurrentApiClient() {
@@ -1002,6 +1003,7 @@ import 'flexStyles';
};
window.LibraryMenu = LibraryMenu;
+ renderHeader();
export default LibraryMenu;
diff --git a/src/scripts/site.js b/src/scripts/site.js
index 868996f602..501f8258de 100644
--- a/src/scripts/site.js
+++ b/src/scripts/site.js
@@ -581,6 +581,7 @@ function initClient() {
define('webSettings', [scriptsPath + '/settings/webSettings'], returnFirstDependency);
define('appSettings', [scriptsPath + '/settings/appSettings'], returnFirstDependency);
define('userSettings', [scriptsPath + '/settings/userSettings'], returnFirstDependency);
+ define('autocast', [scriptsPath + '/autocast'], returnFirstDependency);
define('mediaSession', [componentsPath + '/playback/mediasession'], returnFirstDependency);
define('actionsheet', [componentsPath + '/actionSheet/actionSheet'], returnFirstDependency);
diff --git a/src/strings/en-us.json b/src/strings/en-us.json
index c6d225a64c..4eed373b46 100644
--- a/src/strings/en-us.json
+++ b/src/strings/en-us.json
@@ -186,6 +186,7 @@
"EditImages": "Edit images",
"EditMetadata": "Edit metadata",
"EditSubtitles": "Edit subtitles",
+ "EnableAutoCast": "Set as Default",
"EnableBackdropsHelp": "Display backdrops in the background of some pages while browsing the library.",
"EnableCinemaMode": "Cinema mode",
"EnableColorCodedBackgrounds": "Color coded backgrounds",