EmbyCrackedClient/web/modules/playback/playerselection.js
2025-06-25 11:46:04 +08:00

1 line
No EOL
4.1 KiB
JavaScript

import globalize from"./../common/globalize.js";import playbackManager from"./../common/playback/playbackmanager.js";import loading from"./../loading/loading.js";import events from"./../emby-apiclient/events.js";import{appHost}from"./../common/servicelocator.js";import browser from"./../browser.js";import layoutManager from"./../layoutmanager.js";let currentItem;function showDialog(options){return Emby.importModule("./modules/dialog/dialog.js").then(function(dialog){return dialog(options)})}function showActionSheet(options){return Emby.importModule("./modules/actionsheet/actionsheet.js").then(function(ActionSheet){return ActionSheet.show(options)})}function mirrorIfEnabled(item){var currentPlayer;item?currentItem=item:item=currentItem,!item||item.IsFolder&&"Series"!==item.Type&&"MusicAlbum"!==item.Type&&"MusicArtist"!==item.Type||(currentPlayer=playbackManager.getCurrentPlayer())&&!currentPlayer.isLocalPlayer&&"chromecast"===currentPlayer.id&&playbackManager.displayContent({ItemName:item.Name,ItemId:item.Id,ItemType:item.Type},currentPlayer)}function emptyCallback(){}function getTargetSecondaryText(target){return target.user?target.user.Name:null}function getIcon(deviceType){switch(deviceType){case"smartphone":return"&#xe32C;";case"tablet":return"&#xe32F;";case"tv":return"&#xe333;";case"cast":return"&#xe307;";case"desktop":return"&#xe30A;";default:return"&#xe333;"}}function getLocalIcon(target){return browser.tv||layoutManager.tv?getIcon("tv"):"ontouchstart"in document?getIcon("smartphone"):getIcon("desktop")}function isChromium(){var brands=navigator.userAgentData?.brands||[];for(let i=0,length=brands.length;i<length;i++)if("chromium"===(brands[i].brand||"").toLowerCase())return!0;return!1}let LocalPlayerId="local";function switchToPlayer(id,target){id===LocalPlayerId?playbackManager.setDefaultPlayerActive():(playbackManager.trySetActivePlayer(target.playerName,target),mirrorIfEnabled())}function switchToPlayerWithConfirmation(currentPlayerId,id,target,currentDeviceName){-1!==playbackManager.getSupportedCommands().indexOf("EndSession")&&id!==currentPlayerId?((currentPlayerId=[]).push({name:globalize.translate("Yes"),id:"yes"}),currentPlayerId.push({name:globalize.translate("No"),id:"no"}),showDialog({buttons:currentPlayerId,text:globalize.translate("ConfirmEndPlayerSession",currentDeviceName)}).then(function(dialogResult){switch(dialogResult){case"yes":playbackManager.getCurrentPlayer().endSession(),switchToPlayer(id,target);break;case"no":switchToPlayer(id,target)}},emptyCallback)):switchToPlayer(id,target)}function showPlayerSelection(button){let currentPlayerInfo=playbackManager.getPlayerInfo(),currentPlayerId=currentPlayerInfo?.id;return loading.show(),playbackManager.getTargets().then(function(targets){var menuItems=targets.map(function(t){return{name:t.name,nameSubtitle:t.appName,id:t.id,selected:currentPlayerId===t.id,secondaryText:getTargetSecondaryText(t),icon:getIcon(t.deviceType)}}),menuItems=(menuItems.unshift({name:appHost.deviceName(),nameSubtitle:appHost.appName(),id:LocalPlayerId,selected:!currentPlayerInfo||currentPlayerInfo.isLocalPlayer,icon:getLocalIcon()}),loading.hide(),{title:globalize.translate("HeaderPlayOn"),items:menuItems,positionTo:button,positionY:"bottom",positionX:"right",transformOrigin:"right top",resolveOnClick:!0,hasItemIcon:!0,fields:["Name","NameSubtitle","ShortOverview"],hasItemSelectionState:!0});return appHost.supports("castmenuhashchange")&&!isChromium()||(menuItems.enableHistory=!1),showActionSheet(menuItems).then(function(id){currentPlayerInfo=playbackManager.getPlayerInfo(),currentPlayerId=currentPlayerInfo?.id;var target=targets.filter(function(t){return t.id===id})[0],currentDeviceName=currentPlayerInfo?.deviceName||currentPlayerInfo?.name;switchToPlayerWithConfirmation(currentPlayerId,id,target,currentDeviceName)},emptyCallback)})}document.addEventListener("itemshow",function(e){e=e.detail.item;e&&e.ServerId&&mirrorIfEnabled(e)}),events.on(playbackManager,"pairing",function(e){loading.show()}),events.on(playbackManager,"paired",function(e){loading.hide()}),events.on(playbackManager,"pairerror",function(e){loading.hide()});export default{show:showPlayerSelection};