mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	Update chromecast with new data model
This commit is contained in:
		
							parent
							
								
									8df05896b5
								
							
						
					
					
						commit
						99e2ea228d
					
				@ -9,7 +9,7 @@ export default class CastPlayer extends EventEmitter {
 | 
				
			|||||||
    this.player = null
 | 
					    this.player = null
 | 
				
			||||||
    this.playerController = null
 | 
					    this.playerController = null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.audiobook = null
 | 
					    this.libraryItem = null
 | 
				
			||||||
    this.audioTracks = []
 | 
					    this.audioTracks = []
 | 
				
			||||||
    this.currentTrackIndex = 0
 | 
					    this.currentTrackIndex = 0
 | 
				
			||||||
    this.isHlsTranscode = null
 | 
					    this.isHlsTranscode = null
 | 
				
			||||||
@ -70,22 +70,22 @@ export default class CastPlayer extends EventEmitter {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async set(audiobook, tracks, isHlsTranscode, startTime, playWhenReady = false) {
 | 
					  async set(libraryItem, tracks, isHlsTranscode, startTime, playWhenReady = false) {
 | 
				
			||||||
    this.audiobook = audiobook
 | 
					    this.libraryItem = libraryItem
 | 
				
			||||||
    this.audioTracks = tracks
 | 
					    this.audioTracks = tracks
 | 
				
			||||||
    this.isHlsTranscode = isHlsTranscode
 | 
					    this.isHlsTranscode = isHlsTranscode
 | 
				
			||||||
    this.playWhenReady = playWhenReady
 | 
					    this.playWhenReady = playWhenReady
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.currentTime = startTime
 | 
					    this.currentTime = startTime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var coverImg = this.ctx.$store.getters['globals/getLibraryItemCoverSrc'](audiobook)
 | 
					    var coverImg = this.ctx.$store.getters['globals/getLibraryItemCoverSrc'](libraryItem)
 | 
				
			||||||
    if (process.env.NODE_ENV === 'development') {
 | 
					    if (process.env.NODE_ENV === 'development') {
 | 
				
			||||||
      this.coverUrl = coverImg
 | 
					      this.coverUrl = coverImg
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      this.coverUrl = `${window.location.origin}${coverImg}`
 | 
					      this.coverUrl = `${window.location.origin}${coverImg}`
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var request = buildCastLoadRequest(this.audiobook, this.coverUrl, this.audioTracks, this.currentTime, playWhenReady, this.defaultPlaybackRate)
 | 
					    var request = buildCastLoadRequest(this.libraryItem, this.coverUrl, this.audioTracks, this.currentTime, playWhenReady, this.defaultPlaybackRate)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var castSession = cast.framework.CastContext.getInstance().getCurrentSession()
 | 
					    var castSession = cast.framework.CastContext.getInstance().getCurrentSession()
 | 
				
			||||||
    await castLoadMedia(castSession, request)
 | 
					    await castLoadMedia(castSession, request)
 | 
				
			||||||
@ -126,7 +126,7 @@ export default class CastPlayer extends EventEmitter {
 | 
				
			|||||||
    if (!this.player) return
 | 
					    if (!this.player) return
 | 
				
			||||||
    if (time < this.currentTrack.startOffset || time > this.currentTrack.startOffset + this.currentTrack.duration) {
 | 
					    if (time < this.currentTrack.startOffset || time > this.currentTrack.startOffset + this.currentTrack.duration) {
 | 
				
			||||||
      // Change Track
 | 
					      // Change Track
 | 
				
			||||||
      var request = buildCastLoadRequest(this.audiobook, this.coverUrl, this.audioTracks, time, playWhenReady, this.defaultPlaybackRate)
 | 
					      var request = buildCastLoadRequest(this.libraryItem, this.coverUrl, this.audioTracks, time, playWhenReady, this.defaultPlaybackRate)
 | 
				
			||||||
      var castSession = cast.framework.CastContext.getInstance().getCurrentSession()
 | 
					      var castSession = cast.framework.CastContext.getInstance().getCurrentSession()
 | 
				
			||||||
      await castLoadMedia(castSession, request)
 | 
					      await castLoadMedia(castSession, request)
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,13 +1,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function getMediaInfoFromTrack(audiobook, castImage, track) {
 | 
					function getMediaInfoFromTrack(libraryItem, castImage, track) {
 | 
				
			||||||
  // https://developers.google.com/cast/docs/reference/web_sender/chrome.cast.media.AudiobookChapterMediaMetadata
 | 
					  // https://developers.google.com/cast/docs/reference/web_sender/chrome.cast.media.AudiobookChapterMediaMetadata
 | 
				
			||||||
  var metadata = new chrome.cast.media.AudiobookChapterMediaMetadata()
 | 
					  var metadata = new chrome.cast.media.AudiobookChapterMediaMetadata()
 | 
				
			||||||
  metadata.bookTitle = audiobook.book.title
 | 
					  metadata.bookTitle = libraryItem.media.metadata.title
 | 
				
			||||||
  metadata.chapterNumber = track.index
 | 
					  metadata.chapterNumber = track.index
 | 
				
			||||||
  metadata.chapterTitle = track.title
 | 
					  metadata.chapterTitle = track.title
 | 
				
			||||||
  metadata.images = [castImage]
 | 
					  metadata.images = [castImage]
 | 
				
			||||||
  metadata.title = track.title
 | 
					  metadata.title = track.title
 | 
				
			||||||
  metadata.subtitle = audiobook.book.title
 | 
					  metadata.subtitle = libraryItem.media.metadata.title
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var trackurl = track.fullContentUrl
 | 
					  var trackurl = track.fullContentUrl
 | 
				
			||||||
  var mimeType = track.mimeType
 | 
					  var mimeType = track.mimeType
 | 
				
			||||||
@ -18,18 +18,19 @@ function getMediaInfoFromTrack(audiobook, castImage, track) {
 | 
				
			|||||||
  return mediainfo
 | 
					  return mediainfo
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function buildCastMediaInfo(audiobook, coverUrl, tracks) {
 | 
					function buildCastMediaInfo(libraryItem, coverUrl, tracks) {
 | 
				
			||||||
  const castImage = new chrome.cast.Image(coverUrl)
 | 
					  const castImage = new chrome.cast.Image(coverUrl)
 | 
				
			||||||
  return tracks.map(t => getMediaInfoFromTrack(audiobook, castImage, t))
 | 
					  return tracks.map(t => getMediaInfoFromTrack(libraryItem, castImage, t))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function buildCastQueueRequest(audiobook, coverUrl, tracks, startTime) {
 | 
					function buildCastQueueRequest(libraryItem, coverUrl, tracks, startTime) {
 | 
				
			||||||
  var mediaInfoItems = buildCastMediaInfo(audiobook, coverUrl, tracks)
 | 
					  var mediaInfoItems = buildCastMediaInfo(libraryItem, coverUrl, tracks)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var containerMetadata = new chrome.cast.media.AudiobookContainerMetadata()
 | 
					  var containerMetadata = new chrome.cast.media.AudiobookContainerMetadata()
 | 
				
			||||||
  containerMetadata.authors = [audiobook.book.authorFL]
 | 
					  containerMetadata.authors = libraryItem.media.metadata.authors.map(a => a.name)
 | 
				
			||||||
  containerMetadata.narrators = [audiobook.book.narratorFL]
 | 
					  containerMetadata.narrators = libraryItem.media.metadata.narrators || []
 | 
				
			||||||
  containerMetadata.publisher = audiobook.book.publisher || undefined
 | 
					  containerMetadata.publisher = libraryItem.media.metadata.publisher || undefined
 | 
				
			||||||
 | 
					  containerMetadata.title = libraryItem.media.metadata.title
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var mediaQueueItems = mediaInfoItems.map((mi) => {
 | 
					  var mediaQueueItems = mediaInfoItems.map((mi) => {
 | 
				
			||||||
    var queueItem = new chrome.cast.media.QueueItem(mi)
 | 
					    var queueItem = new chrome.cast.media.QueueItem(mi)
 | 
				
			||||||
@ -41,7 +42,7 @@ function buildCastQueueRequest(audiobook, coverUrl, tracks, startTime) {
 | 
				
			|||||||
  var trackStartIndex = track ? track.index - 1 : 0
 | 
					  var trackStartIndex = track ? track.index - 1 : 0
 | 
				
			||||||
  var trackStartTime = Math.floor(track ? startTime - track.startOffset : 0)
 | 
					  var trackStartTime = Math.floor(track ? startTime - track.startOffset : 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var queueData = new chrome.cast.media.QueueData(audiobook.id, audiobook.book.title, '', false, mediaQueueItems, trackStartIndex, trackStartTime)
 | 
					  var queueData = new chrome.cast.media.QueueData(libraryItem.id, libraryItem.media.metadata.title, '', false, mediaQueueItems, trackStartIndex, trackStartTime)
 | 
				
			||||||
  queueData.containerMetadata = containerMetadata
 | 
					  queueData.containerMetadata = containerMetadata
 | 
				
			||||||
  queueData.queueType = chrome.cast.media.QueueType.AUDIOBOOK
 | 
					  queueData.queueType = chrome.cast.media.QueueType.AUDIOBOOK
 | 
				
			||||||
  return queueData
 | 
					  return queueData
 | 
				
			||||||
@ -57,10 +58,10 @@ function castLoadMedia(castSession, request) {
 | 
				
			|||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function buildCastLoadRequest(audiobook, coverUrl, tracks, startTime, autoplay, playbackRate) {
 | 
					function buildCastLoadRequest(libraryItem, coverUrl, tracks, startTime, autoplay, playbackRate) {
 | 
				
			||||||
  var request = new chrome.cast.media.LoadRequest()
 | 
					  var request = new chrome.cast.media.LoadRequest()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  request.queueData = buildCastQueueRequest(audiobook, coverUrl, tracks, startTime)
 | 
					  request.queueData = buildCastQueueRequest(libraryItem, coverUrl, tracks, startTime)
 | 
				
			||||||
  request.currentTime = request.queueData.startTime
 | 
					  request.currentTime = request.queueData.startTime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  request.autoplay = autoplay
 | 
					  request.autoplay = autoplay
 | 
				
			||||||
 | 
				
			|||||||
@ -2,8 +2,8 @@ export default (ctx) => {
 | 
				
			|||||||
  var sendInit = async (castContext) => {
 | 
					  var sendInit = async (castContext) => {
 | 
				
			||||||
    // Fetch background covers for chromecast (temp)
 | 
					    // 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) => {
 | 
					    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.book.cover).map((ab) => {
 | 
					      return data.results.filter((b) => b.media.coverPath).map((libraryItem) => {
 | 
				
			||||||
        var coverUrl = ctx.$store.getters['globals/getLibraryItemCoverSrc'](ab)
 | 
					        var coverUrl = ctx.$store.getters['globals/getLibraryItemCoverSrc'](libraryItem)
 | 
				
			||||||
        if (process.env.NODE_ENV === 'development') return coverUrl
 | 
					        if (process.env.NODE_ENV === 'development') return coverUrl
 | 
				
			||||||
        return `${window.location.origin}${coverUrl}`
 | 
					        return `${window.location.origin}${coverUrl}`
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user