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.

feat: keep track placeholder for empty sources

+32 -16
+16 -14
src/components/input/opensubsonic/worker.js
··· 136 136 const sid = serverId(server); 137 137 const list = await search(client, 0); 138 138 139 - return list 139 + let tracks = list 140 140 .filter((song) => !song.isVideo) 141 141 .map((song) => { 142 142 const path = song.path ··· 225 225 226 226 return track; 227 227 }); 228 - }); 229 228 230 - const tracks = (await Promise.all(promises)).flat(1); 231 - if (tracks.length) return tracks; 229 + // If a server didn't have any tracks, 230 + // keep a placeholder track so the server gets 231 + // picked up whenever it is re-contextualized. 232 + if (!tracks.length) { 233 + tracks = [{ 234 + $type: "sh.diffuse.output.tracks", 235 + id: crypto.randomUUID(), 236 + kind: "placeholder", 237 + uri: buildURI(server), 238 + }]; 239 + } 232 240 233 - // If a server didn't have any tracks, 234 - // keep a placeholder track so the server gets 235 - // picked up whenever it is re-contextualized. 236 - return Object.values(servers).map((server) => { 237 - return { 238 - $type: "sh.diffuse.output.tracks", 239 - id: crypto.randomUUID(), 240 - kind: "placeholder", 241 - uri: buildURI(server), 242 - }; 241 + return tracks; 243 242 }); 243 + 244 + const tracks = (await Promise.all(promises)).flat(1); 245 + return tracks; 244 246 } 245 247 246 248 /**
+1 -1
src/components/input/s3/common.js
··· 43 43 44 44 /** 45 45 * @param {Bucket} bucket 46 - * @param {string} path 46 + * @param {string} [path] 47 47 */ 48 48 export function buildURI(bucket, path) { 49 49 return URI.serialize({
+15 -1
src/components/input/s3/worker.js
··· 99 99 }), 100 100 ); 101 101 102 - return list 102 + let tracks = list 103 103 .filter((l) => isAudioFile(l.key)) 104 104 .map((l) => { 105 105 const cachedTrack = cache[bid]?.[l.key]; ··· 119 119 120 120 return track; 121 121 }); 122 + 123 + // If a bucket didn't have any tracks, 124 + // keep a placeholder track so the bucket gets 125 + // picked up whenever it is re-contextualized. 126 + if (!tracks.length) { 127 + tracks = [{ 128 + $type: "sh.diffuse.output.tracks", 129 + id: crypto.randomUUID(), 130 + kind: "placeholder", 131 + uri: buildURI(bucket), 132 + }]; 133 + } 134 + 135 + return tracks; 122 136 }); 123 137 124 138 const tracks = (await Promise.all(promises)).flat(1);