diff --git a/bun.lockb b/bun.lockb index abf32e4..44fe1c3 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index ba9e5b0..71d7de2 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "build:proto": "bunx protoc --ts_out ./src/lib/proto/ --proto_path protos protos/*" }, "devDependencies": { + "@iconify-json/lucide": "^1.2.17", "@sveltejs/adapter-auto": "^3.0.0", "@sveltejs/kit": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^4.0.0", @@ -19,7 +20,7 @@ "bits-ui": "^1.0.0-next.64", "clsx": "^2.1.1", "globals": "^15.0.0", - "lucide-svelte": "^0.460.1", + "lucide-svelte": "^0.462.0", "prettier": "^3.3.2", "prettier-plugin-svelte": "^3.2.6", "prettier-plugin-tailwindcss": "^0.6.5", @@ -30,6 +31,7 @@ "tailwindcss": "^3.4.9", "tailwindcss-animate": "^1.0.7", "typescript": "^5.0.0", + "unplugin-icons": "^0.20.2", "vite": "^5.0.3" }, "dependencies": { diff --git a/src/app.d.ts b/src/app.d.ts index da08e6d..a97ca57 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,3 +1,5 @@ +import 'unplugin-icons/types/svelte'; + // See https://svelte.dev/docs/kit/types#app.d.ts // for information about these interfaces declare global { diff --git a/src/lib/components/groove/Queue.svelte b/src/lib/components/groove/Queue.svelte index d9a277f..9781dc2 100644 --- a/src/lib/components/groove/Queue.svelte +++ b/src/lib/components/groove/Queue.svelte @@ -64,7 +64,7 @@
diff --git a/src/lib/components/groove/TrackListing.svelte b/src/lib/components/groove/TrackListing.svelte index c59e2bc..7fdd6c7 100644 --- a/src/lib/components/groove/TrackListing.svelte +++ b/src/lib/components/groove/TrackListing.svelte @@ -1,149 +1,42 @@ - oncontextmenu?.(e, track.hash)} > - - -
- - -
- -
-
-
-

{track.name}

-

{track.artistName}

-
-
- - - - - - - -
- -
-
- -
- -
-
-
-
- +
+ +
+ +
+
+
+

{track.name}

+

{track.artistName}

+
+ diff --git a/src/lib/search.svelte.ts b/src/lib/search.svelte.ts index 72a62b4..35d0a25 100644 --- a/src/lib/search.svelte.ts +++ b/src/lib/search.svelte.ts @@ -8,7 +8,7 @@ class SearchState { filterTracks(tracks: Track[]) { const fzf = new Fzf(tracks, { selector: (t) => `${t.name} ${t.artistName}`, - sort: true, + sort: true }); return fzf.find(this.input); } diff --git a/src/routes/tracks/+page.svelte b/src/routes/tracks/+page.svelte index 7b01150..1002c37 100644 --- a/src/routes/tracks/+page.svelte +++ b/src/routes/tracks/+page.svelte @@ -1,61 +1,150 @@ -
- {#each search.input.length > 0 ? (search.filterTracks(data.tracks).map(r => r.item) ?? []) : data.tracks as track (track.hash)} - + {#each data.tracks as track} + { + e.stopPropagation(); + e.preventDefault(); + contextMenuTarget = hash; + }} + /> {/each} -
+ + + { + if (!value) { + contextMenuTarget = null; + } + }} +> + + +
+ +
+
+ +
+ +
+
+ +
+ +
+
+
+
+ + { + e.preventDefault(); + + if (contextMenuTarget) { + contextMenuTarget = null; + } + }} +/> diff --git a/src/routes/tracks/[hash]/+page.server.ts b/src/routes/tracks/[hash]/+page.server.ts index 777a6b3..53a3971 100644 --- a/src/routes/tracks/[hash]/+page.server.ts +++ b/src/routes/tracks/[hash]/+page.server.ts @@ -7,17 +7,22 @@ import type { PlayTrackResponse, Queue } from '$lib/proto/player'; export const actions = { play: async ({ params }) => { - const client = new PlayerClient(protoTransport); + try { + const client = new PlayerClient(protoTransport); - const response = await client.playTrack({ - hash: params.hash - }); + const response = await client.playTrack({ + hash: params.hash + }); - if (response.response.track === undefined) { - return fail(500); + if (response.response.track === undefined) { + return fail(500); + } + + return serializable(response.response); + } catch (e) { + console.log('play error:'); + console.log(e); } - - return serializable(response.response); }, 'add-to-queue': async ({ params }) => { const client = new PlayerClient(protoTransport); diff --git a/vite.config.ts b/vite.config.ts index bbf8c7d..8911bd4 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,6 +1,12 @@ import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; +import Icons from 'unplugin-icons/vite'; export default defineConfig({ - plugins: [sveltekit()] + plugins: [ + sveltekit(), + Icons({ + compiler: 'svelte' + }) + ] });