EmbyCrackedClient/web/modules/playback/mediasession.js

1 line
4.7 KiB
JavaScript
Raw Permalink Normal View History

2025-06-25 11:46:04 +08:00
import playbackManager from"./../common/playback/playbackmanager.js";import connectionManager from"./../emby-apiclient/connectionmanager.js";import events from"./../emby-apiclient/events.js";import itemManager from"./../common/itemmanager/itemmanager.js";let currentPlayer;function seriesImageUrl(item,options){return"Episode"!==item.Type?null:((options=options||{}).type=options.type||"Primary","Primary"===options.type&&item.SeriesPrimaryImageTag?(options.tag=item.SeriesPrimaryImageTag,connectionManager.getApiClient(item).getImageUrl(item.SeriesId,options)):"Thumb"===options.type&&item.ParentThumbImageTag?(options.tag=item.ParentThumbImageTag,connectionManager.getApiClient(item).getImageUrl(item.ParentThumbItemId,options)):null)}function imageUrl(item,options){return(options=options||{}).type=options.type||"Primary",item.ImageTags&&item.ImageTags[options.type]?(options.tag=item.ImageTags[options.type],connectionManager.getApiClient(item).getImageUrl(item.Id,options)):item.AlbumId&&item.AlbumPrimaryImageTag?(options.tag=item.AlbumPrimaryImageTag,connectionManager.getApiClient(item).getImageUrl(item.AlbumId,options)):null}function pushImageUrl(item,height,list){var imageOptions={height:height},item=seriesImageUrl(item,imageOptions)||imageUrl(item,imageOptions);item&&list.push({src:item,sizes:height+"x"+height})}function getImageUrls(item){var list=[];return pushImageUrl(item,96,list),pushImageUrl(item,128,list),pushImageUrl(item,192,list),pushImageUrl(item,256,list),pushImageUrl(item,384,list),pushImageUrl(item,512,list),list}function updatePlayerState(player,state,eventName){var item=state.NowPlayingItem;if(item)if("Video"!==item.MediaType&&"Audio"!==item.MediaType)hideMediaControls();else{var title=itemManager.getDisplayName(item,{});let albumArtist;item.AlbumArtists&&item.AlbumArtists[0]&&(albumArtist=item.AlbumArtists[0].Name);let artist;item.ArtistItems?item.ArtistItems.length&&(artist=item.ArtistItems[0].Name):artist=item.SeriesName;var album=item.Album||"",itemId=item.Id,duration=parseInt(item.RunTimeTicks?item.RunTimeTicks/1e4:0),state=state.PlayState||{},currentTime=parseInt(state.PositionTicks?state.PositionTicks/1e4:0),state=state.IsPaused||!1,title={title:title,album:album,artwork:getImageUrls(item),currentTime:currentTime,duration:duration,paused:state,itemId:itemId,mediaType:item.MediaType,trackNumber:item.IndexNumber};artist&&(title.artist=artist),albumArtist&&(title.albumArtist=albumArtist),navigator.mediaSession.metadata=new MediaMetadata(title)}else hideMediaControls()}function onGeneralEvent(e){updatePlayerState(this,playbackManager.getPlayerState(this),e.type)}function onStateChanged(e,state){updatePlayerState(this,state,"statechange")}function onPlaybackStart(e,state){updatePlayerState(this,state,e.type)}function onPlaybackStopped(e,state){state.NextMediaType||hideMediaControls()}function releaseCurrentPlayer(){currentPlayer&&(events.off(currentPlayer,"playbackstart",onPlaybackStart),events.off(currentPlayer,"playbackstop",onPlaybackStopped),events.off(currentPlayer,"unpause",onGeneralEvent),events.off(currentPlayer,"pause",onGeneralEvent),events.off(currentPlayer,"statechange",onStateChanged),events.off(currentPlayer,"timeupdate",onGeneralEvent),currentPlayer=null,hideMediaControls())}function hideMediaControls(){navigator.mediaSession.metadata=null}function bindToPlayer(player){releaseCurrentPlayer(),player&&(updatePlayerState(currentPlayer=player,playbackManager.getPlayerState(player),"init"),events.on(currentPlayer,"playbackstart",onPlaybackStart),events.on(currentPlayer,"playbackstop",onPlaybackStopped),events.on(currentPlayer,"unpause",onGeneralEvent),events.on(currentPlayer,"pause",onGeneralEvent),events.on(currentPlayer,"statechange",onStateChanged),events.on(currentPlayer,"timeupdate",onGeneralEvent))}function execute(name){playbackManager[name](currentPlayer)}function seek(data){data.fastSeek||(data=1e3*data.seekTime*1e4,playbackManager.seek(data,currentPlayer))}navigator.mediaSession.setActionHandler("previoustrack",function(){execute("previousTrack")}),navigator.mediaSession.setActionHandler