From e13f0ba2344775edd3e3d5dc8f7e2acfbbf4ee09 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sun, 5 May 2024 04:50:48 -0400 Subject: [PATCH 1/2] Add edit permission check for adding to playlist --- .../playlisteditor/playlisteditor.ts | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/components/playlisteditor/playlisteditor.ts b/src/components/playlisteditor/playlisteditor.ts index 45b41e82d6..eeb4c97adc 100644 --- a/src/components/playlisteditor/playlisteditor.ts +++ b/src/components/playlisteditor/playlisteditor.ts @@ -149,6 +149,31 @@ function populatePlaylists(editorOptions: PlaylistEditorOptions, panel: DialogEl recursive: true }) .then(({ data }) => { + return Promise.all((data.Items || []).map(item => { + const playlist = { + item, + permissions: undefined + }; + + if (!item.Id) return playlist; + + return getPlaylistsApi(api) + .getPlaylistUser({ + playlistId: item.Id, + userId: apiClient.getCurrentUserId() + }) + .then(({ data: permissions }) => ({ + ...playlist, + permissions + })) + .catch((err) => { + console.warn('[PlaylistEditor] Failed to fetch playlist permissions', err); + + return playlist; + }); + })); + }) + .then(playlists => { let html = ''; if ((editorOptions.enableAddToPlayQueue !== false && playbackManager.isPlaying()) || SyncPlay?.Manager.isSyncPlayEnabled()) { @@ -157,8 +182,10 @@ function populatePlaylists(editorOptions: PlaylistEditorOptions, panel: DialogEl html += ``; - html += data.Items?.map(i => { - return ``; + html += playlists.map(({ item, permissions }) => { + if (!permissions?.CanEdit) return ''; + + return ``; }); select.innerHTML = html; From 048d07e1a181a8a362cb0e0ad82483f1cd233505 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sun, 5 May 2024 14:34:56 -0400 Subject: [PATCH 2/2] Add error messages for playlist editor --- src/components/playlisteditor/playlisteditor.ts | 3 +++ src/strings/en-us.json | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/components/playlisteditor/playlisteditor.ts b/src/components/playlisteditor/playlisteditor.ts index eeb4c97adc..193c86da7f 100644 --- a/src/components/playlisteditor/playlisteditor.ts +++ b/src/components/playlisteditor/playlisteditor.ts @@ -4,6 +4,7 @@ import { getItemsApi } from '@jellyfin/sdk/lib/utils/api/items-api'; import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api'; import escapeHtml from 'escape-html'; +import toast from 'components/toast/toast'; import dom from 'scripts/dom'; import globalize from 'scripts/globalize'; import { currentSettings as userSettings } from 'scripts/settings/userSettings'; @@ -52,12 +53,14 @@ function onSubmit(this: HTMLElement, e: Event) { addToPlaylist(panel, playlistId) .catch(err => { console.error('[PlaylistEditor] Failed to add to playlist %s', playlistId, err); + toast(globalize.translate('PlaylistError.AddFailed')); }) .finally(loading.hide); } else { createPlaylist(panel) .catch(err => { console.error('[PlaylistEditor] Failed to create playlist', err); + toast(globalize.translate('PlaylistError.CreateFailed')); }) .finally(loading.hide); } diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 7ac237d099..d3ed646508 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1257,6 +1257,8 @@ "PlayCount": "Play count", "Played": "Played", "PlayFromBeginning": "Play from beginning", + "PlaylistError.AddFailed": "Error adding to playlist", + "PlaylistError.CreateFailed": "Error creating playlist", "Playlists": "Playlists", "PlayNext": "Play next", "PlayNextEpisodeAutomatically": "Play next episode automatically",