mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	Fix:Casting for podcast episodes #3044
This commit is contained in:
		
							parent
							
								
									065aae9a7e
								
							
						
					
					
						commit
						ef05e37a04
					
				| @ -29,4 +29,4 @@ export default class AudioTrack { | ||||
| 
 | ||||
|     return this.contentUrl + `?token=${this.userToken}` | ||||
|   } | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,13 +1,22 @@ | ||||
| 
 | ||||
| function getMediaInfoFromTrack(libraryItem, castImage, track) { | ||||
|   // https://developers.google.com/cast/docs/reference/web_sender/chrome.cast.media.AudiobookChapterMediaMetadata
 | ||||
|   var metadata = new chrome.cast.media.AudiobookChapterMediaMetadata() | ||||
|   metadata.bookTitle = libraryItem.media.metadata.title | ||||
|   metadata.chapterNumber = track.index | ||||
|   metadata.chapterTitle = track.title | ||||
|   metadata.images = [castImage] | ||||
|   metadata.title = track.title | ||||
|   metadata.subtitle = libraryItem.media.metadata.title | ||||
|   let metadata = null | ||||
|   if (libraryItem.mediaType === 'podcast') { | ||||
|     metadata = new chrome.cast.media.MusicTrackMediaMetadata() | ||||
|     metadata.albumArtist = libraryItem.media.metadata.author | ||||
|     metadata.artist = libraryItem.media.metadata.author | ||||
|     metadata.title = track.title | ||||
|     metadata.albumName = libraryItem.media.metadata.title | ||||
|     metadata.images = [castImage] | ||||
|   } else { | ||||
|     // https://developers.google.com/cast/docs/reference/web_sender/chrome.cast.media.AudiobookChapterMediaMetadata
 | ||||
|     metadata = new chrome.cast.media.AudiobookChapterMediaMetadata() | ||||
|     metadata.bookTitle = libraryItem.media.metadata.title | ||||
|     metadata.chapterNumber = track.index | ||||
|     metadata.chapterTitle = track.title | ||||
|     metadata.images = [castImage] | ||||
|     metadata.title = track.title | ||||
|     metadata.subtitle = libraryItem.media.metadata.title | ||||
|   } | ||||
| 
 | ||||
|   var trackurl = track.fullContentUrl | ||||
|   var mimeType = track.mimeType | ||||
| @ -20,17 +29,25 @@ function getMediaInfoFromTrack(libraryItem, castImage, track) { | ||||
| 
 | ||||
| function buildCastMediaInfo(libraryItem, coverUrl, tracks) { | ||||
|   const castImage = new chrome.cast.Image(coverUrl) | ||||
|   return tracks.map(t => getMediaInfoFromTrack(libraryItem, castImage, t)) | ||||
|   return tracks.map((t) => getMediaInfoFromTrack(libraryItem, castImage, t)) | ||||
| } | ||||
| 
 | ||||
| function buildCastQueueRequest(libraryItem, coverUrl, tracks, startTime) { | ||||
|   var mediaInfoItems = buildCastMediaInfo(libraryItem, coverUrl, tracks) | ||||
| 
 | ||||
|   var containerMetadata = new chrome.cast.media.AudiobookContainerMetadata() | ||||
|   containerMetadata.authors = libraryItem.media.metadata.authors.map(a => a.name) | ||||
|   containerMetadata.narrators = libraryItem.media.metadata.narrators || [] | ||||
|   containerMetadata.publisher = libraryItem.media.metadata.publisher || undefined | ||||
|   containerMetadata.title = libraryItem.media.metadata.title | ||||
|   let containerMetadata = null | ||||
|   let queueType = chrome.cast.media.QueueType.AUDIOBOOK | ||||
|   if (libraryItem.mediaType === 'podcast') { | ||||
|     queueType = chrome.cast.media.QueueType.PODCAST_SERIES | ||||
|     containerMetadata = new chrome.cast.media.ContainerMetadata(chrome.cast.media.ContainerType.GENERIC_CONTAINER) | ||||
|     containerMetadata.title = libraryItem.media.metadata.title | ||||
|   } else { | ||||
|     containerMetadata = new chrome.cast.media.AudiobookContainerMetadata() | ||||
|     containerMetadata.authors = libraryItem.media.metadata.authors?.map((a) => a.name) | ||||
|     containerMetadata.narrators = libraryItem.media.metadata.narrators || [] | ||||
|     containerMetadata.publisher = libraryItem.media.metadata.publisher || undefined | ||||
|     containerMetadata.title = libraryItem.media.metadata.title | ||||
|   } | ||||
| 
 | ||||
|   var mediaQueueItems = mediaInfoItems.map((mi) => { | ||||
|     var queueItem = new chrome.cast.media.QueueItem(mi) | ||||
| @ -38,23 +55,25 @@ function buildCastQueueRequest(libraryItem, coverUrl, tracks, startTime) { | ||||
|   }) | ||||
| 
 | ||||
|   // Find track to start playback and calculate track start offset
 | ||||
|   var track = tracks.find(at => at.startOffset <= startTime && at.startOffset + at.duration > startTime) | ||||
|   var track = tracks.find((at) => at.startOffset <= startTime && at.startOffset + at.duration > startTime) | ||||
|   var trackStartIndex = track ? track.index - 1 : 0 | ||||
|   var trackStartTime = Math.floor(track ? startTime - track.startOffset : 0) | ||||
| 
 | ||||
|   var queueData = new chrome.cast.media.QueueData(libraryItem.id, libraryItem.media.metadata.title, '', false, mediaQueueItems, trackStartIndex, trackStartTime) | ||||
|   queueData.containerMetadata = containerMetadata | ||||
|   queueData.queueType = chrome.cast.media.QueueType.AUDIOBOOK | ||||
|   queueData.queueType = queueType | ||||
|   return queueData | ||||
| } | ||||
| 
 | ||||
| function castLoadMedia(castSession, request) { | ||||
|   return new Promise((resolve) => { | ||||
|     castSession.loadMedia(request) | ||||
|       .then(() => resolve(true), (reason) => { | ||||
|     castSession.loadMedia(request).then( | ||||
|       () => resolve(true), | ||||
|       (reason) => { | ||||
|         console.error('Load media failed', reason) | ||||
|         resolve(false) | ||||
|       }) | ||||
|       } | ||||
|     ) | ||||
|   }) | ||||
| } | ||||
| 
 | ||||
| @ -69,7 +88,4 @@ function buildCastLoadRequest(libraryItem, coverUrl, tracks, startTime, autoplay | ||||
|   return request | ||||
| } | ||||
| 
 | ||||
| export { | ||||
|   buildCastLoadRequest, | ||||
|   castLoadMedia | ||||
| } | ||||
| export { buildCastLoadRequest, castLoadMedia } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user