A music player that connects to your cloud/distributed storage.
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

Update mediaSession metadata when artwork has finished downloading

+53 -22
+9 -1
src/Javascript/Brain/index.js
··· 113 113 114 114 function shiftArtworkQueue() { 115 115 const next = artworkQueue.shift() 116 - if (next) app.ports.makeArtworkTrackUrls.send(next) 116 + 117 + if (next) { 118 + app.ports.makeArtworkTrackUrls.send(next) 119 + } else { 120 + self.postMessage({ 121 + action: "FINISHED_DOWNLOADING_ARTWORK", 122 + data: null 123 + }) 124 + } 117 125 } 118 126 119 127
+22 -17
src/Javascript/audio-engine.js
··· 112 112 timesStalled = 1 113 113 114 114 // metadata 115 - if ("mediaSession" in navigator && queueItem.trackTags) { 116 - let artwork = [] 117 - 118 - if (maybeArtwork && typeof maybeArtwork !== "string") { 119 - artwork = [{ 120 - src: URL.createObjectURL(maybeArtwork), 121 - type: maybeArtwork.type 122 - }] 123 - } 124 - 125 - navigator.mediaSession.metadata = new MediaMetadata({ 126 - title: queueItem.trackTags.title, 127 - artist: queueItem.trackTags.artist, 128 - album: queueItem.trackTags.album, 129 - artwork: artwork 130 - }) 131 - } 115 + setMediaSessionMetadata(queueItem, maybeArtwork) 132 116 133 117 // initial promise 134 118 const initialPromise = queueItem.isCached ··· 491 475 }) 492 476 493 477 this.scrobbleTimer.start(scrobbleTimeoutDuration) 478 + } 479 + 480 + 481 + export function setMediaSessionMetadata(queueItem, maybeArtwork) { 482 + if ("mediaSession" in navigator === false || !queueItem.trackTags) return 483 + 484 + let artwork = [] 485 + 486 + if (maybeArtwork && typeof maybeArtwork !== "string") { 487 + artwork = [{ 488 + src: URL.createObjectURL(maybeArtwork), 489 + type: maybeArtwork.type 490 + }] 491 + } 492 + 493 + navigator.mediaSession.metadata = new MediaMetadata({ 494 + title: queueItem.trackTags.title, 495 + artist: queueItem.trackTags.artist, 496 + album: queueItem.trackTags.album, 497 + artwork: artwork 498 + }) 494 499 } 495 500 496 501
+22 -4
src/Javascript/index.js
··· 143 143 144 144 function handleAction(action, data, _ports) { switch (action) { 145 145 case "DOWNLOAD_TRACKS": return downloadTracks(data) 146 + case "FINISHED_DOWNLOADING_ARTWORK": return finishedDownloadingArtwork() 146 147 }} 147 148 148 149 ··· 219 220 orchestrion, 220 221 item, 221 222 maybeCover 222 - ) 223 223 224 - if (!maybeCover) { 225 - loadAlbumCovers([ coverPrep ]) 226 - } 224 + ).then(() => { 225 + if (!maybeCover) { 226 + if (!orchestrion.audio) return 227 + orchestrion.audio.waitingForArtwork = coverPrep.cacheKey 228 + loadAlbumCovers([ coverPrep ]) 229 + } else { 230 + orchestrion.audio.waitingForArtwork = null 231 + } 232 + 233 + }) 227 234 }) 228 235 229 236 // ✋ ··· 503 510 app.ports.insertCoverCache.send(cache) 504 511 setTimeout(() => loadAlbumCoversFromDom({ list: true, coverView: true }), 500) 505 512 }) 513 + } 514 + 515 + 516 + function finishedDownloadingArtwork() { 517 + if (!orchestrion.audio || !orchestrion.audio.waitingForArtwork || !orchestrion.activeQueueItem) return 518 + 519 + albumCover(orchestrion.audio.waitingForArtwork).then(maybeArtwork => { 520 + audioEngine.setMediaSessionMetadata(orchestrion.activeQueueItem, maybeArtwork) 521 + }) 522 + 523 + orchestrion.audio.waitingForArtwork = null 506 524 } 507 525 508 526