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.

fix: atproto handle error management

+30 -1
+3
src/index.vto
··· 73 73 - url: "components/orchestrator/input/element.js" 74 74 title: "Input" 75 75 desc: "**A default input configuration.** Contains all the inputs provided here." 76 + - url: "components/orchestrator/media-session/element.js" 77 + title: "Media Session" 78 + desc: "Keeps the browser/os media session in sync with queue and audio state. Adds handlers for previous, next, seek to, etc." 76 79 - url: "components/orchestrator/output/element.js" 77 80 title: "Output" 78 81 desc: "**A default output configuration.** Contains all the outputs provided here along with the relevant transformers."
+27 -1
src/themes/webamp/configurators/output/element.js
··· 39 39 /** @type {S3OutputElement | null} */ (null), 40 40 ); 41 41 42 + $atprotoError = signal(/** @type {string | null} */ (null)); 42 43 $tab = signal("overview"); 43 44 44 45 // LIFECYCLE ··· 89 90 button.textContent = "Loading ..."; 90 91 } 91 92 92 - await atproto.login(handle); 93 + this.$atprotoError.value = null; 94 + 95 + try { 96 + await atproto.login(handle); 97 + } catch (err) { 98 + this.$atprotoError.value = err instanceof Error 99 + ? err.message 100 + : "login failed"; 101 + if (button) { 102 + button.disabled = false; 103 + button.textContent = "Sign in"; 104 + } 105 + } 93 106 }; 94 107 95 108 #handleAtprotoLogout = async () => { ··· 410 423 /> 411 424 </div> 412 425 </fieldset> 426 + 427 + ${this.$atprotoError.value 428 + ? html` 429 + <fieldset> 430 + <span class="with-icon with-icon--large"> 431 + <img src="images/icons/windows_98/msg_error-0.png" width="24" /> 432 + <span> 433 + Sign in failed, please check the provided handle and try again. 434 + </span> 435 + </span> 436 + </fieldset> 437 + ` 438 + : nothing} 413 439 414 440 <p> 415 441 <button type="submit" id="atproto-submit">Sign in</button>