mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-26 08:12:25 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| export default (ctx) => {
 | |
|   var sendInit = async (castContext) => {
 | |
|     // Fetch background covers for chromecast (temp)
 | |
|     var covers = await ctx.$axios.$get(`/api/libraries/${ctx.$store.state.libraries.currentLibraryId}/items?limit=40&minified=1`).then((data) => {
 | |
|       return data.results.filter((b) => b.media.coverPath).map((libraryItem) => {
 | |
|         var coverUrl = ctx.$store.getters['globals/getLibraryItemCoverSrc'](libraryItem)
 | |
|         if (process.env.NODE_ENV === 'development') return coverUrl
 | |
|         return `${window.location.origin}${coverUrl}`
 | |
|       })
 | |
|     }).catch((error) => {
 | |
|       console.error('failed to fetch books', error)
 | |
|       return null
 | |
|     })
 | |
| 
 | |
|     // Custom message to receiver
 | |
|     var castSession = castContext.getCurrentSession()
 | |
|     castSession.sendMessage('urn:x-cast:com.audiobookshelf.cast', {
 | |
|       covers
 | |
|     })
 | |
|   }
 | |
| 
 | |
|   var initializeCastApi = () => {
 | |
|     var castContext = cast.framework.CastContext.getInstance()
 | |
|     castContext.setOptions({
 | |
|       receiverApplicationId: process.env.chromecastReceiver,
 | |
|       autoJoinPolicy: chrome.cast ? chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED : null
 | |
|     });
 | |
| 
 | |
|     castContext.addEventListener(
 | |
|       cast.framework.CastContextEventType.SESSION_STATE_CHANGED,
 | |
|       (event) => {
 | |
|         console.log('Session state changed event', event)
 | |
| 
 | |
|         switch (event.sessionState) {
 | |
|           case cast.framework.SessionState.SESSION_STARTED:
 | |
|             console.log('[chromecast] CAST SESSION STARTED')
 | |
| 
 | |
|             ctx.$store.commit('globals/setCasting', true)
 | |
|             sendInit(castContext)
 | |
| 
 | |
|             setTimeout(() => {
 | |
|               ctx.$eventBus.$emit('cast-session-active', true)
 | |
|             }, 500)
 | |
| 
 | |
|             break;
 | |
|           case cast.framework.SessionState.SESSION_RESUMED:
 | |
|             console.log('[chromecast] CAST SESSION RESUMED')
 | |
| 
 | |
|             setTimeout(() => {
 | |
|               ctx.$eventBus.$emit('cast-session-active', true)
 | |
|             }, 500)
 | |
|             break;
 | |
|           case cast.framework.SessionState.SESSION_ENDED:
 | |
|             console.log('[chromecast] CAST SESSION DISCONNECTED')
 | |
| 
 | |
|             ctx.$store.commit('globals/setCasting', false)
 | |
|             ctx.$eventBus.$emit('cast-session-active', false)
 | |
|             break;
 | |
|         }
 | |
|       })
 | |
| 
 | |
|     ctx.$store.commit('globals/setChromecastInitialized', true)
 | |
| 
 | |
|     var player = new cast.framework.RemotePlayer()
 | |
|     var playerController = new cast.framework.RemotePlayerController(player)
 | |
|     ctx.$root.castPlayer = player
 | |
|     ctx.$root.castPlayerController = playerController
 | |
|   }
 | |
| 
 | |
|   window['__onGCastApiAvailable'] = function (isAvailable) {
 | |
|     if (isAvailable) {
 | |
|       initializeCastApi()
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   var script = document.createElement('script')
 | |
|   script.type = 'text/javascript'
 | |
|   script.src = 'https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1'
 | |
|   document.head.appendChild(script)
 | |
| } |