diff --git a/src/data/storeHelper.ts b/src/data/storeHelper.ts index 10427e79..4fecedf3 100644 --- a/src/data/storeHelper.ts +++ b/src/data/storeHelper.ts @@ -16,6 +16,16 @@ import { get } from "svelte/store"; import { remove } from "lodash-es"; import type SmartQuery from "src/lib/smart-query/Query"; +export function appendToQueue(songs: Song[]) { + const newQueue = [...get(queue), ...songs]; + const newDuration = songs.reduce((total, song) => { + return total + song.fileInfo.duration; + }, get(queueDuration)); + + queue.set(newQueue); + queueDuration.set(newDuration); +} + export function findQueueIndex({ id }: Song): number { return get(queue).findIndex((song) => song.id === id); } diff --git a/src/lib/albums/AltAlbumMenu.svelte b/src/lib/albums/AltAlbumMenu.svelte new file mode 100644 index 00000000..eff420b7 --- /dev/null +++ b/src/lib/albums/AltAlbumMenu.svelte @@ -0,0 +1,51 @@ + + +{#if showMenu} + + + + + +{/if} diff --git a/src/lib/library/AltTrackMenu.svelte b/src/lib/library/AltTrackMenu.svelte new file mode 100644 index 00000000..646f208b --- /dev/null +++ b/src/lib/library/AltTrackMenu.svelte @@ -0,0 +1,54 @@ + + +{#if showMenu} + + + + + +{/if} diff --git a/src/lib/library/CanvasLibrary.svelte b/src/lib/library/CanvasLibrary.svelte index a8e5b879..993a5b4e 100644 --- a/src/lib/library/CanvasLibrary.svelte +++ b/src/lib/library/CanvasLibrary.svelte @@ -88,6 +88,7 @@ } from "../../data/storeHelper"; import QueryResultsPlaceholder from "./QueryResultsPlaceholder.svelte"; import ScrollTo from "../ui/ScrollTo.svelte"; + import AltTrackMenu from "./AltTrackMenu.svelte"; export let allSongs: Observable = null; export let columnOrder; @@ -947,6 +948,7 @@ let rangeEndSongIdx = null; let highlightedSongIdx = 0; let trackMenu: TrackMenu; + let altTrackMenu: AltTrackMenu; let currentSongInView = false; let currentSongScrollIdx = null; @@ -990,19 +992,29 @@ $rightClickedTrack = song; } + let position = null; + // reposition menu if in a virtual-list const list = e.target.closest(".virtual-list-inner"); if (list) { const rect = list.getBoundingClientRect(); - trackMenu.open( + position = { x: e.clientX - rect.left, y: e.clientY - rect.top }; + } else { + position = { x: e.clientX, y: e.clientY }; + } + + console.log(e); + + if (($os === "macos" && e.metaKey) || e.ctrlKey) { + altTrackMenu.open( songsHighlighted.length > 1 ? songsHighlighted : song, - { x: e.clientX - rect.left, y: e.clientY - rect.top }, + position, ); } else { trackMenu.open( songsHighlighted.length > 1 ? songsHighlighted : song, - { x: e.clientX, y: e.clientY }, + position, ); } } @@ -1737,6 +1749,7 @@ bind:this={trackMenu} onUnselect={() => (songsHighlighted.length = 0)} /> + a.trackNumber - b.trackNumber); - albumMenu.open(album, songs, { x: e.clientX, y: e.clientY }); + if (($os === "macos" && e.metaKey) || e.ctrlKey) { + altAlbumMenu.open(album, songs, { x: e.clientX, y: e.clientY }); + } else { + albumMenu.open(album, songs, { x: e.clientX, y: e.clientY }); + } } async function onLeftClick(e, album, index) { @@ -330,6 +337,12 @@ highlightedAlbum = null; }} /> + { + highlightedAlbum = null; + }} +/>
{#if isLoading}