diff --git a/components/modals/ItemMoreMenuModal.vue b/components/modals/ItemMoreMenuModal.vue
index 319598bc..87a3a993 100644
--- a/components/modals/ItemMoreMenuModal.vue
+++ b/components/modals/ItemMoreMenuModal.vue
@@ -26,6 +26,10 @@ export default {
type: Object,
default: () => null
},
+ playlist: {
+ type: Object,
+ default: () => null
+ },
hideRssFeedOption: Boolean
},
data() {
@@ -92,6 +96,15 @@ export default {
}
}
+ // If on playlist page show remove from playlist option
+ if (this.playlist) {
+ items.push({
+ text: this.$strings.LabelRemoveFromPlaylist,
+ value: 'removeFromPlaylist',
+ icon: 'playlist_remove'
+ })
+ }
+
if (this.showRSSFeedOption) {
items.push({
text: this.rssFeed ? this.$strings.HeaderRSSFeed : this.$strings.HeaderOpenRSSFeed,
@@ -255,6 +268,8 @@ export default {
} else if (action === 'playlist') {
this.$store.commit('globals/setSelectedPlaylistItems', [{ libraryItem: this.libraryItem, episode: this.episode }])
this.$store.commit('globals/setShowPlaylistsAddCreateModal', true)
+ } else if (action === 'removeFromPlaylist') {
+ this.removeFromPlaylistClick()
} else if (action === 'markFinished') {
if (this.episode) this.toggleEpisodeFinished()
else this.toggleFinished()
@@ -456,6 +471,29 @@ export default {
.finally(() => {
this.$emit('update:processing', false)
})
+ },
+ removeFromPlaylistClick() {
+ if (!this.playlist) {
+ this.$toast.error('Invalid: No Playlist')
+ return
+ }
+
+ this.$emit('update:processing', true)
+ let url = `/api/playlists/${this.playlist.id}/item/${this.serverLibraryItemId}`
+ if (this.serverEpisodeId) url += `/${this.serverEpisodeId}`
+ this.$axios
+ .$delete(url)
+ .then(() => {
+ this.$toast.success('Item removed from playlist')
+ })
+ .catch((error) => {
+ const errorMsg = error.response?.data || 'Unknown error'
+ console.error('Failed to remove item from playlist', error)
+ this.$toast.error('Failed to remove from playlist: ' + errorMsg)
+ })
+ .finally(() => {
+ this.$emit('update:processing', false)
+ })
}
},
mounted() {}
diff --git a/pages/playlist/_id.vue b/pages/playlist/_id.vue
index 14be40d3..e56f083b 100644
--- a/pages/playlist/_id.vue
+++ b/pages/playlist/_id.vue
@@ -24,7 +24,7 @@
-
+
@@ -140,8 +140,24 @@ export default {
this.$eventBus.$emit('play-item', { libraryItemId: nextItem.libraryItemId, episodeId: nextItem.episodeId })
}
}
+ },
+ playlistUpdated(playlist) {
+ if (this.playlist.id !== playlist.id) return
+ this.playlist = playlist
+ },
+ playlistRemoved(playlist) {
+ if (this.playlist.id === playlist.id) {
+ this.$router.replace('/bookshelf/playlists')
+ }
}
},
- mounted() {}
+ mounted() {
+ this.$socket.$on('playlist_updated', this.playlistUpdated)
+ this.$socket.$on('playlist_removed', this.playlistRemoved)
+ },
+ beforeDestroy() {
+ this.$socket.$off('playlist_updated', this.playlistUpdated)
+ this.$socket.$off('playlist_removed', this.playlistRemoved)
+ }
}
\ No newline at end of file
diff --git a/strings/cs.json b/strings/cs.json
index 31e72bdf..2c342dc5 100644
--- a/strings/cs.json
+++ b/strings/cs.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Číst znovu",
"LabelRecentlyAdded": "Nedávno přidáno",
"LabelRecentSeries": "Nedávné série",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Vlastní e-mail vlastníka",
"LabelRSSFeedCustomOwnerName": "Vlastní jméno vlastníka",
"LabelRSSFeedPreventIndexing": "Zabránit indexování",
diff --git a/strings/da.json b/strings/da.json
index 8a314f2f..285d9298 100644
--- a/strings/da.json
+++ b/strings/da.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Brugerdefineret ejerens e-mail",
"LabelRSSFeedCustomOwnerName": "Brugerdefineret ejerens navn",
"LabelRSSFeedPreventIndexing": "Forhindrer indeksering",
diff --git a/strings/de.json b/strings/de.json
index 1e94df10..2e5d5cd3 100644
--- a/strings/de.json
+++ b/strings/de.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Erneut lesen",
"LabelRecentlyAdded": "Kürzlich hinzugefügt",
"LabelRecentSeries": "Aktuelle Serien",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Benutzerdefinierte Eigentümer-E-Mail",
"LabelRSSFeedCustomOwnerName": "Benutzerdefinierter Name des Eigentümers",
"LabelRSSFeedPreventIndexing": "Indizierung verhindern",
diff --git a/strings/en-us.json b/strings/en-us.json
index eeab4b7b..c48c5907 100644
--- a/strings/en-us.json
+++ b/strings/en-us.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Custom owner Email",
"LabelRSSFeedCustomOwnerName": "Custom owner Name",
"LabelRSSFeedPreventIndexing": "Prevent Indexing",
diff --git a/strings/es.json b/strings/es.json
index e22cc00f..9a09bdd5 100644
--- a/strings/es.json
+++ b/strings/es.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Email de dueño personalizado",
"LabelRSSFeedCustomOwnerName": "Nombre de dueño personalizado",
"LabelRSSFeedPreventIndexing": "Prevenir Indexado",
diff --git a/strings/fr.json b/strings/fr.json
index 512c387f..437fe1e2 100644
--- a/strings/fr.json
+++ b/strings/fr.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Courriel du propriétaire personnalisé",
"LabelRSSFeedCustomOwnerName": "Nom propriétaire personnalisé",
"LabelRSSFeedPreventIndexing": "Empêcher l’indexation",
diff --git a/strings/gu.json b/strings/gu.json
index 965bc350..0b011652 100644
--- a/strings/gu.json
+++ b/strings/gu.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Custom owner Email",
"LabelRSSFeedCustomOwnerName": "Custom owner Name",
"LabelRSSFeedPreventIndexing": "Prevent Indexing",
diff --git a/strings/hi.json b/strings/hi.json
index 11ceb47d..eaa8fea2 100644
--- a/strings/hi.json
+++ b/strings/hi.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Custom owner Email",
"LabelRSSFeedCustomOwnerName": "Custom owner Name",
"LabelRSSFeedPreventIndexing": "Prevent Indexing",
diff --git a/strings/hr.json b/strings/hr.json
index a5145122..9acf4b2a 100644
--- a/strings/hr.json
+++ b/strings/hr.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Custom owner Email",
"LabelRSSFeedCustomOwnerName": "Custom owner Name",
"LabelRSSFeedPreventIndexing": "Prevent Indexing",
diff --git a/strings/hu.json b/strings/hu.json
index 58869039..0b8ffb4b 100644
--- a/strings/hu.json
+++ b/strings/hu.json
@@ -191,9 +191,7 @@
"LabelReadAgain": "Újraolvasás",
"LabelRecentlyAdded": "Legutóbb hozzáadva",
"LabelRecentSeries": "Legutóbbi sorozatok",
- "MessageConfirmMarkAsFinished": "Biztosan befejezettnek jelöli ezt az elemet?",
- "MessageConfirmRemoveBookmark": "Biztosan eltávolítja a könyvjelzőt?",
- "MessageDiscardProgress": "Haladás elvetése",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Egyéni tulajdonos e-mail",
"LabelRSSFeedCustomOwnerName": "Egyéni tulajdonos neve",
"LabelRSSFeedPreventIndexing": "Indexelés megakadályozása",
@@ -246,6 +244,9 @@
"MessageConfirmDeleteLocalEpisode": "\"{0}\" helyi epizód eltávolítása az eszközről? A szerveren lévő fájl nem érintett.",
"MessageConfirmDeleteLocalFiles": "Ezen elem helyi fájljainak eltávolítása az eszközről? A szerveren lévő fájlok és a haladás nem érintettek.",
"MessageConfirmDiscardProgress": "Biztosan alaphelyzetbe akarja állítani a haladást?",
+ "MessageConfirmMarkAsFinished": "Biztosan befejezettnek jelöli ezt az elemet?",
+ "MessageConfirmRemoveBookmark": "Biztosan eltávolítja a könyvjelzőt?",
+ "MessageDiscardProgress": "Haladás elvetése",
"MessageDownloadCompleteProcessing": "Letöltés kész. Feldolgozás...",
"MessageDownloading": "Letöltés...",
"MessageDownloadingEpisode": "Epizód letöltése",
diff --git a/strings/it.json b/strings/it.json
index 87ea31b3..efb01ef6 100644
--- a/strings/it.json
+++ b/strings/it.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Leggi Ancora",
"LabelRecentlyAdded": "Aggiunti Recentemente",
"LabelRecentSeries": "Serie Recenti",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Email del proprietario personalizzato",
"LabelRSSFeedCustomOwnerName": "Nome del proprietario personalizzato",
"LabelRSSFeedPreventIndexing": "Impedisci l'indicizzazione",
diff --git a/strings/lt.json b/strings/lt.json
index 1adce67a..bbd58b36 100644
--- a/strings/lt.json
+++ b/strings/lt.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Pasirinktinis savininko el. paštas",
"LabelRSSFeedCustomOwnerName": "Pasirinktinis savininko vardas",
"LabelRSSFeedPreventIndexing": "Neleisti indeksuoti",
diff --git a/strings/nl.json b/strings/nl.json
index d8de3f5b..8b8e212d 100644
--- a/strings/nl.json
+++ b/strings/nl.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Aangepast e-mailadres eigenaar",
"LabelRSSFeedCustomOwnerName": "Aangepaste naam eigenaar",
"LabelRSSFeedPreventIndexing": "Voorkom indexering",
diff --git a/strings/no.json b/strings/no.json
index 0e5deac7..535642e3 100644
--- a/strings/no.json
+++ b/strings/no.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Tilpasset eier Epost",
"LabelRSSFeedCustomOwnerName": "Tilpasset eier Navn",
"LabelRSSFeedPreventIndexing": "Forhindre indeksering",
diff --git a/strings/pl.json b/strings/pl.json
index 1bbe746b..9a347c82 100644
--- a/strings/pl.json
+++ b/strings/pl.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Czytaj ponownie",
"LabelRecentlyAdded": "Ostatnio dodane",
"LabelRecentSeries": "Najnowsze serie",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Custom owner Email",
"LabelRSSFeedCustomOwnerName": "Custom owner Name",
"LabelRSSFeedPreventIndexing": "Zapobiegaj indeksowaniu",
diff --git a/strings/pt-br.json b/strings/pt-br.json
index c82ff2f4..88e975f4 100644
--- a/strings/pt-br.json
+++ b/strings/pt-br.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Ler Novamente",
"LabelRecentlyAdded": "Novidades",
"LabelRecentSeries": "Séries Recentes",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Email do dono personalizado",
"LabelRSSFeedCustomOwnerName": "Nome do dono personalizado",
"LabelRSSFeedPreventIndexing": "Impedir Indexação",
@@ -290,4 +291,4 @@
"ToastPodcastCreateSuccess": "Podcast criado",
"ToastRSSFeedCloseFailed": "Falha ao fechar feed RSS",
"ToastRSSFeedCloseSuccess": "Feed RSS fechado"
-}
+}
\ No newline at end of file
diff --git a/strings/ru.json b/strings/ru.json
index d1ffabc0..39d008fe 100644
--- a/strings/ru.json
+++ b/strings/ru.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Недавно добавленные",
"LabelRecentSeries": "Недавние серии",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Пользовательский Email владельца",
"LabelRSSFeedCustomOwnerName": "Пользовательское Имя владельца",
"LabelRSSFeedPreventIndexing": "Запретить индексирование",
diff --git a/strings/sv.json b/strings/sv.json
index f5b44b1d..816ab080 100644
--- a/strings/sv.json
+++ b/strings/sv.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "Read Again",
"LabelRecentlyAdded": "Recently Added",
"LabelRecentSeries": "Recent Series",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "Anpassad ägarens e-post",
"LabelRSSFeedCustomOwnerName": "Anpassat ägarnamn",
"LabelRSSFeedPreventIndexing": "Förhindra indexering",
diff --git a/strings/zh-cn.json b/strings/zh-cn.json
index c3b30aa5..79149b9f 100644
--- a/strings/zh-cn.json
+++ b/strings/zh-cn.json
@@ -191,6 +191,7 @@
"LabelReadAgain": "再次阅读",
"LabelRecentlyAdded": "最近添加",
"LabelRecentSeries": "最近添加系列",
+ "LabelRemoveFromPlaylist": "Remove from Playlist",
"LabelRSSFeedCustomOwnerEmail": "自定义所有者电子邮件",
"LabelRSSFeedCustomOwnerName": "自定义所有者名称",
"LabelRSSFeedPreventIndexing": "防止索引",