From 87791cf21d0792a8e3bca619d21915ce23fd8115 Mon Sep 17 00:00:00 2001 From: Kamil Date: Tue, 3 Dec 2024 12:48:27 +0000 Subject: [PATCH] - Support multiple music providers - feat: Doubleclick on track in Table view to get technical information about it --- static/images/placeholder.png | Bin 0 -> 8056 bytes static/js/preview.js | 10 +- templates/base.html | 60 +++++--- templates/browse.html | 61 ++++++++ templates/browse_page.html | 12 ++ templates/monitored_playlists.html | 16 ++ templates/partials/_add_remove_button.html | 2 +- templates/partials/_jf_search_results.html | 2 +- templates/partials/_playlist_info.html | 10 +- templates/partials/_track_table.html | 170 ++++++++++++--------- templates/partials/playlist_item.html | 49 ++++++ templates/partials/track_details.html | 23 +++ 12 files changed, 306 insertions(+), 109 deletions(-) create mode 100644 static/images/placeholder.png create mode 100644 templates/browse.html create mode 100644 templates/browse_page.html create mode 100644 templates/monitored_playlists.html create mode 100644 templates/partials/playlist_item.html create mode 100644 templates/partials/track_details.html diff --git a/static/images/placeholder.png b/static/images/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..12516164e3cd1ef7f2c3b86734100d178279e440 GIT binary patch literal 8056 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 console.error('Error fetching Jellyfin stream URL:', error)); } -function handleJellyfinClick(event, jellyfinId, trackTitle, spotifyId) { +function handleJellyfinClick(event, jellyfinId, trackTitle, providerTrackId) { if (event.ctrlKey) { // CTRL key is pressed, open the search modal - openSearchModal(trackTitle, spotifyId); + openSearchModal(trackTitle, providerTrackId); } else { // CTRL key is not pressed, play the track playJellyfinTrack(event.target, jellyfinId); diff --git a/templates/base.html b/templates/base.html index 6203a42..93bb6b7 100644 --- a/templates/base.html +++ b/templates/base.html @@ -34,12 +34,22 @@