mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-07-09 08:55:04 +02:00
Add:Chromecast support in experimental #367, Change:Audio player model for direct play
This commit is contained in:
parent
9f133ba98c
commit
89f498f31a
26 changed files with 1113 additions and 672 deletions
80
client/plugins/chromecast.js
Normal file
80
client/plugins/chromecast.js
Normal file
|
@ -0,0 +1,80 @@
|
|||
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}/books/all?limit=40&minified=1`).then((data) => {
|
||||
return data.results.filter((b) => b.book.cover).map((ab) => {
|
||||
var coverUrl = ctx.$store.getters['audiobooks/getBookCoverSrc'](ab)
|
||||
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.AutoJoinPolicy.ORIGIN_SCOPED
|
||||
});
|
||||
|
||||
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)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue