A music player that connects to your cloud/distributed storage. diffuse.sh
Something went wrong. Try again.
1.8 kB · 84 lines
JavaScript
at commit bce88033
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485//// Processing// ♪(´ε` )//// Audio processing, getting metadata, etc.
// Contexts// --------
function processContext(context) { const initialPromise = Promise.resolve([])
return context.urlsForTags.reduce((accumulator, urls) => { let getUrl let headUrl
return accumulator.then(col => transformUrl(urls.getUrl) .then(url => { getUrl = url; return transformUrl(urls.headUrl) }) .then(url => { headUrl = url; return getTags(getUrl, headUrl) }) .then(r => col.concat(r)) .catch(e => { console.error(e) return col.concat(null) }) )
}, initialPromise).then(col => { context.receivedTags = col return context
})}
// Tags// ----
const readerConfiguration = { timeoutInSec: 300, avoidHeadRequests: false}
const parserConfiguration = Object.assign( {}, musicMetadata.parsingOptions, { duration: false, skipCovers: true, skipPostHeaders: true })
function getTags(getUrl, headUrl) { const reader = new StreamingHttpTokenReader(headUrl, readerConfiguration)
return reader.init().then(_ => { reader.url = getUrl
return musicMetadata.parseFromTokenizer( reader, reader.contentType, parserConfiguration ) }).then(pickTags)}
function pickTags(result) { const tags = result && result.common if (!tags) return null
return { disc: tags.disk.no || 1, nr: tags.track.no || 1, album: tags.album && tags.album.length ? tags.album : "Unknown", artist: tags.artist && tags.artist.length ? tags.artist : "Unknown", title: tags.title && tags.title.length ? tags.title : "Unknown", genre: (tags.genre && tags.genre[0]) || null, year: tags.year || null, picture: null }}