diff --git a/src/IntroDownloader.svelte b/src/IntroDownloader.svelte new file mode 100644 index 0000000..d0dff23 --- /dev/null +++ b/src/IntroDownloader.svelte @@ -0,0 +1,2 @@ +

Download New Intro

+ diff --git a/src/IntroSelector.svelte b/src/IntroSelector.svelte index f923f69..9d32471 100644 --- a/src/IntroSelector.svelte +++ b/src/IntroSelector.svelte @@ -1,16 +1,57 @@
- {#if !!introList && !!guildIntros} - {#if introList.length > 0} - {#each introList as intro} - - {/each} - {:else if !!emptyMsg} -

{emptyMsg}

- {:else} -

No intros

- {/if} - {:else if !!exclude && !!guildIntros} - {#each guildIntros as intro, i} - {#if (!exclude.map((e) => e.index).includes(i))} - - {/if} + {#if !!filteredIntroList && filteredIntroList.length > 0} + {#each filteredIntroList as intro (intro.index)} + {/each} {:else} -

No intros

+

{emptyMsg}

{/if}
diff --git a/src/Login.svelte b/src/Login.svelte index 85ac080..d30c0bb 100644 --- a/src/Login.svelte +++ b/src/Login.svelte @@ -1,12 +1,20 @@ @@ -53,19 +56,23 @@
{#each $member.guilds as guild}

{guild.name}

+
{#each guild.channels as channel}

{channel.name}

{#await addIntroPromise then result} {:catch err} -

Failed to add intro: {err}

+

Failed to add intro

+ {/await} + {#await removeIntroPromise then result} + {:catch err} +

Failed to add remove

{/await} x.index)} on:confirm={removeIntros} btnLabel="Remove" emptyMsg="You don't have any intros, try adding one" @@ -73,11 +80,11 @@

Add Intros

x.index)} on:confirm={addIntros} + emptyMsg="There are no intros" />
{/each} diff --git a/src/routes/auth/+page.svelte b/src/routes/auth/+page.svelte index 67dab34..da5c7e2 100644 --- a/src/routes/auth/+page.svelte +++ b/src/routes/auth/+page.svelte @@ -15,10 +15,12 @@ if (!response.ok) { loginFailed = true } else { - await member.login(body.token); + await member.pullData(body.token); await intros.fetchIntros($member.guilds); - goto('/') + window.localStorage.setItem('token', body.token); + + goto('/') } }); diff --git a/src/store.ts b/src/store.ts index 365cf04..317ca1b 100644 --- a/src/store.ts +++ b/src/store.ts @@ -1,26 +1,14 @@ import { readable, writable } from 'svelte/store'; -type IntroIndex = number; -interface MemberStore { - username: string - intros: IntroIndex[] -} - -interface Intro { - name: string - filename: string - length: number -} - -function createMemberStore(): MemberStore { +function createMemberStore() { const { subscribe, set, update } = writable(null) return { subscribe: subscribe, set: set, addIntro: (intro: IntroIndex) => { update((n) => n.intros.push(intro)); return intro }, - login: async (token) => { + pullData: async (token) => { const response = (await (await fetch( 'http://localhost:7756/me', { headers: {"token": token} })).json()) @@ -34,37 +22,36 @@ function createMemberStore(): MemberStore { } } -function createIntroStore(): IntroStore { - const { subscribe, set, update } = writable({}) +function createIntroStore() { + const { subscribe, set, update } = writable(new Map()) return { subscribe: subscribe, - set: set, - update: update, fetchIntros: async (guilds) => { console.debug('Fetching intros'); console.log(guilds) - let intros = {}; + let intros = new Map(); for (const guild of guilds) { const response = (await (await fetch(`http://localhost:7756/intros/${guild.name}`)).json()) if (response !== "NoGuildFound") { - const guild_intros = response.Intros.map((intro) => { + let guild_intros = new Map(); + + Object.entries(response.Intros).forEach(([index, intro]) => { if (!!intro.File) { - return { name: intro.File.friendlyName, filename: intro.File.filename } + guild_intros.set(index, { name: intro.File.friendlyName, filename: intro.File.filename }); } else if (!!intro.Online) { - return { name: intro.Online.friendlyName, url: intro.Online.url } + guild_intros.set(index, { name: intro.Online.friendlyName, filename: intro.Online.filename }); } }) - intros[guild.name] = guild_intros; + intros.set(guild.name, guild_intros); } } console.debug('Setting Intros store'); console.debug(intros); - console.debug(intros[123]); set(intros) } } @@ -72,6 +59,6 @@ function createIntroStore(): IntroStore { } -export const intros: IntroStore = createIntroStore() -export const member: MemberStore = createMemberStore() +export const intros = createIntroStore() +export const member = createMemberStore()