define(['appSettings', 'events', 'browser', 'loading', 'playbackManager', 'appRouter', 'globalize', 'apphost'], function (appSettings, events, browser, loading, playbackManager, appRouter, globalize, appHost) { 'use strict'; function mirrorItem(info, player) { var item = info.item; playbackManager.displayContent({ ItemName: item.Name, ItemId: item.Id, ItemType: item.Type, Context: info.context }, player); } function mirrorIfEnabled(info) { if (info && playbackManager.enableDisplayMirroring()) { var getPlayerInfo = playbackManager.getPlayerInfo(); if (getPlayerInfo) { if (!getPlayerInfo.isLocalPlayer && getPlayerInfo.supportedCommands.indexOf('DisplayContent') !== -1) { mirrorItem(info, playbackManager.getCurrentPlayer()); } } } } function emptyCallback() { // avoid console logs about uncaught promises } function getTargetSecondaryText(target) { if (target.user) { return target.user.Name; } return null; } function getIcon(target) { var deviceType = target.deviceType; if (!deviceType && target.isLocalPlayer) { if (browser.tv) { deviceType = 'tv'; } else if (browser.mobile) { deviceType = 'smartphone'; } else { deviceType = 'desktop'; } } if (!deviceType) { deviceType = 'tv'; } switch (deviceType) { case 'smartphone': return 'smartphone'; case 'tablet': return 'tablet'; case 'tv': return 'tv'; case 'cast': return 'cast'; case 'desktop': return 'computer'; default: return 'tv'; } } function showPlayerSelection(button) { var currentPlayerInfo = playbackManager.getPlayerInfo(); if (currentPlayerInfo) { if (!currentPlayerInfo.isLocalPlayer) { showActivePlayerMenu(currentPlayerInfo); return; } } var currentPlayerId = currentPlayerInfo ? currentPlayerInfo.id : null; loading.show(); playbackManager.getTargets().then(function (targets) { var menuItems = targets.map(function (t) { var name = t.name; if (t.appName && t.appName !== t.name) { name += " - " + t.appName; } return { name: name, id: t.id, selected: currentPlayerId === t.id, secondaryText: getTargetSecondaryText(t), icon: getIcon(t) }; }); require(['actionsheet'], function (actionsheet) { loading.hide(); var menuOptions = { title: globalize.translate('HeaderPlayOn'), items: menuItems, positionTo: button, resolveOnClick: true, border: true }; // Unfortunately we can't allow the url to change or chromecast will throw a security error // Might be able to solve this in the future by moving the dialogs to hashbangs if (!(!browser.chrome || appHost.supports('castmenuhashchange'))) { menuOptions.enableHistory = false; } actionsheet.show(menuOptions).then(function (id) { var target = targets.filter(function (t) { return t.id === id; })[0]; playbackManager.trySetActivePlayer(target.playerName, target); mirrorIfEnabled(); }, emptyCallback); }); }); } function showActivePlayerMenu(playerInfo) { require(['dialogHelper', 'dialog', 'emby-checkbox', 'emby-button'], function (dialogHelper) { showActivePlayerMenuInternal(dialogHelper, playerInfo); }); } function disconnectFromPlayer(currentDeviceName) { if (playbackManager.getSupportedCommands().indexOf('EndSession') !== -1) { require(['dialog'], function (dialog) { var menuItems = []; menuItems.push({ name: globalize.translate('Yes'), id: 'yes' }); menuItems.push({ name: globalize.translate('No'), id: 'no' }); dialog({ buttons: menuItems, //positionTo: positionTo, text: globalize.translate('ConfirmEndPlayerSession', currentDeviceName) }).then(function (id) { switch (id) { case 'yes': playbackManager.getCurrentPlayer().endSession(); playbackManager.setDefaultPlayerActive(); break; case 'no': playbackManager.setDefaultPlayerActive(); break; default: break; } }); }); } else { playbackManager.setDefaultPlayerActive(); } } function showActivePlayerMenuInternal(dialogHelper, playerInfo) { var html = ''; var dialogOptions = { removeOnClose: true }; dialogOptions.modal = false; dialogOptions.entryAnimationDuration = 160; dialogOptions.exitAnimationDuration = 160; dialogOptions.autoFocus = false; var dlg = dialogHelper.createDialog(dialogOptions); dlg.classList.add('promptDialog'); var currentDeviceName = (playerInfo.deviceName || playerInfo.name); html += '