Community
{#if online}
{/if}
{#if online}
online as {slsk.username} · Soulseek
{:else if slsk.connection === "connecting"}
signing in…
{/if}
{#if !online}
Sign in to Soulseek
The network's rooms, its people and, next, its music. Your account is kept on this phone only.
{ if (e.key === "Enter") signIn(); }} />
{#if slsk.loginError}
{slsk.loginError}
{/if}
{#if slsk.savedUser && slsk.hasPassword && slsk.connection === "offline"}
{/if}
No account? Soulseek makes one from the first sign-in with a new name.
Spaces, holdings and the sealed inbox come later on the phone.
They live on the private layer; the network side is here first.
{:else}
{#each [["rooms", "Rooms"], ["chat", "Chat"], ["buddies", "Buddies"]] as [k, l] (k)}
{/each}
{#if tab === "rooms"}
{#if joinedNames.length}
Joined · {joinedNames.length}
{#each joinedNames as name (name)}
{@const r = slsk.joined[name]}
{@const last = r.messages[r.messages.length - 1]}
{/each}
{/if}
Rooms · {slsk.rooms.length} on the server
{#if !slsk.rooms.length}
Asking the server for its rooms…
{:else if slsk.rooms.length > 8}
(roomQ = e.currentTarget.value)} type="search" placeholder="Find a room" autocomplete="off" autocapitalize="off" spellcheck="false" aria-label="Find a room" />
{#if roomQ}{/if}
{#if roomQ}{roomsMatching.length} of {slsk.rooms.length} rooms
{/if}
{/if}
{#each otherRooms as r (r.name)}
{/each}
{#if roomsMatching.length > roomCap}
{/if}
{:else if tab === "chat"}
{#if !threads.length}
No conversations yet.A name in a room, or a buddy, opens one.
{/if}
{#each threads as t (t.u)}
{/each}
{:else if tab === "buddies"}
{#if !buddies.length}
No buddies on this account yet.Hold a name in a room to add one, or look one up above.
{/if}
{#each buddies as b (b.u)}
{/each}
{/if}
{/if}