diff --git a/client/components/covers/PlaylistCover.vue b/client/components/covers/PlaylistCover.vue
new file mode 100644
index 00000000..95cfa298
--- /dev/null
+++ b/client/components/covers/PlaylistCover.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
![]()
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/client/components/modals/playlists/AddCreateModal.vue b/client/components/modals/playlists/AddCreateModal.vue
index 9fbcecdd..68d06d68 100644
--- a/client/components/modals/playlists/AddCreateModal.vue
+++ b/client/components/modals/playlists/AddCreateModal.vue
@@ -83,9 +83,7 @@ export default {
sortedPlaylists() {
return this.playlists
.map((playlist) => {
- const includesItem = !this.selectedPlaylistItems.some((item) => {
- return !this.checkIsItemInPlaylist(playlist, item)
- })
+ const includesItem = !this.selectedPlaylistItems.some((item) => !this.checkIsItemInPlaylist(playlist, item))
return {
isItemIncluded: includesItem,
@@ -137,7 +135,7 @@ export default {
.$post(`/api/playlists/${playlist.id}/batch/remove`, { items: itemObjects })
.then((updatedPlaylist) => {
console.log(`Items removed from playlist`, updatedPlaylist)
- this.$toast.success('Playlist item(s) added')
+ this.$toast.success('Playlist item(s) removed')
this.processing = false
})
.catch((error) => {
diff --git a/client/components/modals/playlists/UserPlaylistItem.vue b/client/components/modals/playlists/UserPlaylistItem.vue
index fe6f8a56..8522fa91 100644
--- a/client/components/modals/playlists/UserPlaylistItem.vue
+++ b/client/components/modals/playlists/UserPlaylistItem.vue
@@ -2,7 +2,7 @@
-
+
{{ playlist.name }}
diff --git a/client/layouts/default.vue b/client/layouts/default.vue
index 7b316db8..c3c2a86a 100644
--- a/client/layouts/default.vue
+++ b/client/layouts/default.vue
@@ -306,6 +306,23 @@ export default {
}
this.$store.commit('libraries/removeCollection', collection)
},
+ playlistAdded(playlist) {
+ if (playlist.userId !== this.user.id) return
+ this.$store.commit('user/addUpdatePlaylist', playlist)
+ },
+ playlistUpdated(playlist) {
+ if (playlist.userId !== this.user.id) return
+ this.$store.commit('user/addUpdatePlaylist', playlist)
+ },
+ playlistRemoved(playlist) {
+ if (playlist.userId !== this.user.id) return
+ if (this.$route.name.startsWith('playlist')) {
+ if (this.$route.params.id === playlist.id) {
+ this.$router.replace(`/library/${this.$store.state.libraries.currentLibraryId}/bookshelf/playlists`)
+ }
+ }
+ this.$store.commit('user/removePlaylist', playlist)
+ },
rssFeedOpen(data) {
this.$store.commit('feeds/addFeed', data)
},
@@ -382,11 +399,16 @@ export default {
this.socket.on('user_stream_update', this.userStreamUpdate)
this.socket.on('user_item_progress_updated', this.userMediaProgressUpdate)
- // User Collection Listeners
+ // Collection Listeners
this.socket.on('collection_added', this.collectionAdded)
this.socket.on('collection_updated', this.collectionUpdated)
this.socket.on('collection_removed', this.collectionRemoved)
+ // User Playlist Listeners
+ this.socket.on('playlist_added', this.playlistAdded)
+ this.socket.on('playlist_updated', this.playlistUpdated)
+ this.socket.on('playlist_removed', this.playlistRemoved)
+
// Scan Listeners
this.socket.on('scan_start', this.scanStart)
this.socket.on('scan_complete', this.scanComplete)
diff --git a/server/controllers/PlaylistController.js b/server/controllers/PlaylistController.js
index 30629fc5..bbed89fd 100644
--- a/server/controllers/PlaylistController.js
+++ b/server/controllers/PlaylistController.js
@@ -145,7 +145,7 @@ class PlaylistController {
return res.status(400).send('Item does not have libraryItemId')
}
if (playlist.containsItem(item)) {
- playlist.removeItem(item)
+ playlist.removeItem(item.libraryItemId, item.episodeId)
hasUpdated = true
}
}
diff --git a/server/objects/Playlist.js b/server/objects/Playlist.js
index 38594102..56d8130e 100644
--- a/server/objects/Playlist.js
+++ b/server/objects/Playlist.js
@@ -57,11 +57,16 @@ class Playlist {
return null
}
- const episodeJson = episode.toJSONExpanded()
- episodeJson.libraryItem = libraryItem.toJSONMinified()
- return episodeJson
+ return {
+ ...item,
+ episode: episode.toJSONExpanded(),
+ libraryItem: libraryItem.toJSONMinified()
+ }
} else {
- return libraryItem.toJSONExpanded()
+ return {
+ ...item,
+ libraryItem: libraryItem.toJSONExpanded()
+ }
}
}).filter(i => i)
return json
@@ -105,7 +110,7 @@ class Playlist {
removeItem(libraryItemId, episodeId = null) {
if (episodeId) this.items = this.items.filter(i => i.libraryItemId !== libraryItemId || i.episodeId !== episodeId)
- else this.items = this.items.filter(i => i !== i.libraryItemId !== libraryItemId)
+ else this.items = this.items.filter(i => i.libraryItemId !== libraryItemId)
this.lastUpdate = Date.now()
}