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() }