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.

chore: output loading tweaks

+33 -5
+1 -2
src/common/pages/dashboard.js
··· 38 38 You haven't saved anything yet. Add a facet by browsing the <a 39 39 href="featured/" 40 40 >featured ones</a> or any of the other categories. You can click the toggle 41 - to quickly add or remove from your collection. Alternatively, add one using 42 - an URI: 41 + to quickly add or remove from your collection. 43 42 </span> 44 43 </p> 45 44 `;
+32 -3
src/components/output/raw/atproto/element.js
··· 50 50 /** @type {PromiseWithResolvers<void>} */ 51 51 #authenticated = Promise.withResolvers(); 52 52 53 + /** @type {PromiseWithResolvers<void>} */ 54 + #restoreSettled = Promise.withResolvers(); 55 + 53 56 /** @type {Client | null} */ 54 57 #rpc = null; 55 58 ··· 71 74 72 75 /** @type {OutputManager} */ 73 76 this.#manager = outputManager({ 77 + init: async () => { 78 + await this.#restoreSettled.promise; 79 + return true; 80 + }, 74 81 facets: { 75 82 empty: () => [], 76 83 get: () => this.listRecords("sh.diffuse.output.facet"), ··· 258 265 } else { 259 266 throw err; 260 267 } 268 + } finally { 269 + this.#restoreSettled.resolve(); 261 270 } 262 271 } 263 272 ··· 290 299 this.#authenticated.resolve(); 291 300 this.#startFirehose(); 292 301 this.#fetchHandle(session.info.sub); 302 + 303 + this.#manager.facets.reload(); 304 + this.#manager.playlistItems.reload(); 305 + this.#manager.settings.reload(); 306 + this.#manager.tracks.reload(); 293 307 } 294 308 295 309 /** ··· 300 314 if (!rpc) return; 301 315 try { 302 316 const result = await ok(rpc.get("com.atproto.repo.describeRepo", { 303 - params: { repo: /** @type {import("@atcute/lexicons").ActorIdentifier} */ (did) }, 317 + params: { 318 + repo: /** @type {import("@atcute/lexicons").ActorIdentifier} */ (did), 319 + }, 304 320 })); 305 321 if (this.#did.value === did) { 306 322 this.#handle.value = result.handle ?? null; ··· 462 478 let cursor; 463 479 do { 464 480 const page = await ok(this.#rpc.get("com.atproto.repo.listRecords", { 465 - params: { repo: /** @type {import("@atcute/lexicons").ActorIdentifier} */ (did), collection: /** @type {`${string}.${string}.${string}`} */ (collection), limit: 100, cursor }, 481 + params: { 482 + repo: 483 + /** @type {import("@atcute/lexicons").ActorIdentifier} */ (did), 484 + collection: 485 + /** @type {`${string}.${string}.${string}`} */ (collection), 486 + limit: 100, 487 + cursor, 488 + }, 466 489 })); 467 490 records.push(...page.records.map((r) => /** @type {T} */ (r.value))); 468 491 cursor = page.cursor; ··· 590 613 let cursor; 591 614 do { 592 615 const page = await ok(rpc.get("com.atproto.repo.listRecords", { 593 - params: { repo: did, collection: /** @type {`${string}.${string}.${string}`} */ (collection), limit: 100, cursor }, 616 + params: { 617 + repo: did, 618 + collection: 619 + /** @type {`${string}.${string}.${string}`} */ (collection), 620 + limit: 100, 621 + cursor, 622 + }, 594 623 })); 595 624 for (const { uri, value } of page.records) { 596 625 const record = /** @type {any} */ (value);