diff --git a/src/components/a.svelte b/src/components/a.svelte index b78936c..c4f26ea 100644 --- a/src/components/a.svelte +++ b/src/components/a.svelte @@ -6,6 +6,9 @@ $: isOnPage = href === $page.route.id; - + diff --git a/src/components/playingnow.svelte b/src/components/playingnow.svelte new file mode 100644 index 0000000..9a7dfcf --- /dev/null +++ b/src/components/playingnow.svelte @@ -0,0 +1,99 @@ + + +{#if $playingNow !== null} +
+
+{/if} + + diff --git a/src/components/track.svelte b/src/components/track.svelte index 10eb2e5..98953de 100644 --- a/src/components/track.svelte +++ b/src/components/track.svelte @@ -1,26 +1,30 @@ -
-
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 2b7d168..9802332 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -6,9 +6,10 @@ import '../app.css'; import { AppShell, Toast, toastStore } from '@skeletonlabs/skeleton'; - import Navbar from '../components/navbar.svelte'; - import { address, token, tracks, tracksSorted } from '../stores'; + import { address, playingNow, token, tracks, tracksSorted } from '../stores'; import { _metadataComm as comm } from './+layout'; + import Navbar from '../components/navbar.svelte'; + import PlayingNow from '../components/playingnow.svelte'; comm.setCallbacks({ onConnect: () => { @@ -24,6 +25,7 @@ background: 'variant-filled-error', autohide: false }); + playingNow.set(null); }, onIncompatible: (reason) => { toastStore.trigger({ @@ -52,25 +54,24 @@ remaining -= 500; } }); + + $: title = $playingNow !== null ? `${$playingNow.track.title} - musikspider` : `musikspider`; - musikspider + {title} -
-
-
-
-
- now playing -
-
volume
+
+
+
+ +
volume
- + diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index ee84bae..2d24682 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -2,14 +2,16 @@ import VirtualList from 'svelte-tiny-virtual-list'; import { tracks, tracksSorted } from '../stores'; import TrackComponent from '../components/track.svelte'; - import type { Track } from '../types'; + import type { Track, TrackWithId } from '../types'; $: trackCount = $tracksSorted.size; - let trackItemSize = 72; + let trackItemSize = 62; let listHeight = 0; - function getTrack(index: number): Track { - return $tracks.get($tracksSorted.get(index)!)!; + function getTrack(index: number): TrackWithId { + let id = $tracksSorted.get(index)!; + let track = $tracks.get(id)!; + return { id, track }; } @@ -21,7 +23,7 @@ overscanCount={1} >
-
+
diff --git a/src/stores.ts b/src/stores.ts index 95e1e24..352cec6 100644 --- a/src/stores.ts +++ b/src/stores.ts @@ -1,5 +1,5 @@ import { writable } from 'svelte/store'; -import type { ResourceId, Track } from './types'; +import type { ResourceId, Track, TrackWithId } from './types'; function writableStorage(key: string, defaultValue: string) { const store = writable(localStorage.getItem(key) ?? defaultValue); @@ -7,8 +7,18 @@ function writableStorage(key: string, defaultValue: string) { return store; } +export function makeThumbnailUrl(address: string, token: string, id: ResourceId) { + return `http://${address}/thumbnail/${id}?token=${token}`; +} + +export function makeAudioUrl(address: string, token: string, id: ResourceId) { + return `http://${address}/audio/id/${id}?token=${token}`; +} + export const address = writableStorage("address", "127.0.0.1:5505"); export const token = writableStorage("token", ""); export const tracks = writable>(new Map()); -export const tracksSorted = writable>(new Map()); \ No newline at end of file +export const tracksSorted = writable>(new Map()); + +export const playingNow = writable(null); \ No newline at end of file