diff --git a/src/components/playlisteditor/playlisteditor.ts b/src/components/playlisteditor/playlisteditor.ts
index 54a5388c23..5d15a39095 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);
}
@@ -150,6 +153,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()) {
@@ -158,8 +186,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;
diff --git a/src/strings/en-us.json b/src/strings/en-us.json
index 87ac6bd400..9a9b2b9e0f 100644
--- a/src/strings/en-us.json
+++ b/src/strings/en-us.json
@@ -1263,6 +1263,8 @@
"PlayCount": "Play count",
"Played": "Played",
"PlayFromBeginning": "Play from beginning",
+ "PlaylistError.AddFailed": "Error adding to playlist",
+ "PlaylistError.CreateFailed": "Error creating playlist",
"PlaylistPublic": "Allow public access",
"PlaylistPublicDescription": "Allow this playlist to be viewed by any logged in user.",
"Playlists": "Playlists",