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.

Fixes #280

+8 -3
+7 -2
src/Javascript/Brain/artwork.js
··· 19 19 } 20 20 21 21 22 + function decodeCacheKey(cacheKey) { 23 + return decodeURIComponent(escape(atob(cacheKey))) 24 + } 25 + 26 + 22 27 23 28 // 1. TAGS 24 29 ··· 49 54 50 55 51 56 function findUsingMusicBrainz(prep) { 52 - const parts = atob(prep.cacheKey).split(" --- ") 57 + const parts = decodeCacheKey(prep.cacheKey).split(" --- ") 53 58 const artist = parts[0] 54 59 const album = parts[1] || parts[0] 55 60 ··· 85 90 86 91 87 92 function findUsingLastFm(prep) { 88 - const query = atob(prep.cacheKey).replace(" --- ", " ") 93 + const query = decodeCacheKey(prep.cacheKey).replace(" --- ", " ") 89 94 90 95 return fetch(`https://ws.audioscrobbler.com/2.0/?method=album.search&album=${query}&api_key=4f0fe85b67baef8bb7d008a8754a95e5&format=json`) 91 96 .then(r => r.json())
+1 -1
src/Javascript/index.js
··· 187 187 // 🎵 188 188 if (item) { 189 189 const coverPrep = { 190 - cacheKey: btoa(item.trackTags.artist + " --- " + item.trackTags.album), 190 + cacheKey: btoa(unescape(encodeURIComponent(item.trackTags.artist + " --- " + item.trackTags.album))), 191 191 trackFilename: item.trackPath.split("/").reverse()[0], 192 192 trackPath: item.trackPath, 193 193 trackSourceId: item.sourceId,