diff --git a/client/components/cards/LazyBookCard.vue b/client/components/cards/LazyBookCard.vue index d837bf90c..d51ed2085 100644 --- a/client/components/cards/LazyBookCard.vue +++ b/client/components/cards/LazyBookCard.vue @@ -89,7 +89,7 @@
-

{{ series }}

+

{{ seriesName }}

@@ -218,6 +218,9 @@ export default { // Only included when filtering by series or collapse series or Continue Series shelf on home page return this.mediaMetadata.series }, + seriesName() { + return this.series?.name || null + }, seriesSequence() { return this.series?.sequence || null }, diff --git a/client/components/modals/authors/EditModal.vue b/client/components/modals/authors/EditModal.vue index 40292dcaf..3af642498 100644 --- a/client/components/modals/authors/EditModal.vue +++ b/client/components/modals/authors/EditModal.vue @@ -33,8 +33,10 @@
- {{ $strings.ButtonQuickMatch }} + {{ $strings.ButtonRemove }}
+ {{ $strings.ButtonQuickMatch }} + {{ $strings.ButtonSave }}
@@ -91,6 +93,9 @@ export default { }, libraryProvider() { return this.$store.getters['libraries/getLibraryProvider'](this.currentLibraryId) || 'google' + }, + userCanDelete() { + return this.$store.getters['user/getUserCanDelete'] } }, methods: { @@ -100,6 +105,31 @@ export default { this.authorCopy.description = this.author.description this.authorCopy.imagePath = this.author.imagePath }, + removeClick() { + const payload = { + message: this.$getString('MessageConfirmRemoveAuthor', [this.author.name]), + callback: (confirmed) => { + if (confirmed) { + this.processing = true + this.$axios + .$delete(`/api/authors/${this.authorId}`) + .then(() => { + this.$toast.success('Author removed') + this.show = false + }) + .catch((error) => { + console.error('Failed to remove author', error) + this.$toast.error('Failed to remove author') + }) + .finally(() => { + this.processing = false + }) + } + }, + type: 'yesNo' + } + this.$store.commit('globals/setConfirmPrompt', payload) + }, async submitForm() { var keysToCheck = ['name', 'asin', 'description', 'imagePath'] var updatePayload = {} diff --git a/client/components/modals/libraries/EditLibrary.vue b/client/components/modals/libraries/EditLibrary.vue index 83f37ab72..598f3bcd4 100644 --- a/client/components/modals/libraries/EditLibrary.vue +++ b/client/components/modals/libraries/EditLibrary.vue @@ -20,7 +20,7 @@

{{ $strings.LabelFolders }}

folder - + close
@@ -67,10 +67,6 @@ export default { value: 'podcast', text: this.$strings.LabelPodcasts } - // { - // value: 'music', - // text: 'Music' - // } ] }, folderPaths() { @@ -110,6 +106,11 @@ export default { formUpdated() { this.$emit('update', this.getLibraryData()) }, + existingFolderInputBlurred(folder) { + if (!folder.fullPath) { + this.removeFolder(folder) + } + }, newFolderInputBlurred() { if (this.newFolderPath) { this.folders.push({ fullPath: this.newFolderPath }) @@ -149,6 +150,7 @@ export default { this.folders = this.library ? this.library.folders.map((p) => ({ ...p })) : [] this.icon = this.library ? this.library.icon : 'default' this.mediaType = this.library ? this.library.mediaType : 'book' + this.showDirectoryPicker = false } }, diff --git a/client/components/modals/libraries/EditModal.vue b/client/components/modals/libraries/EditModal.vue index 2d1ceac5d..633b76465 100644 --- a/client/components/modals/libraries/EditModal.vue +++ b/client/components/modals/libraries/EditModal.vue @@ -120,7 +120,7 @@ export default { for (const key in this.libraryCopy) { if (library[key] !== undefined) { if (key === 'folders') { - this.libraryCopy.folders = library.folders.map((f) => ({ ...f })) + this.libraryCopy.folders = library.folders.map((f) => ({ ...f })).filter((f) => !!f.fullPath?.trim()) } else if (key === 'settings') { for (const settingKey in library.settings) { this.libraryCopy.settings[settingKey] = library.settings[settingKey] diff --git a/client/components/tables/podcast/EpisodesTable.vue b/client/components/tables/podcast/EpisodesTable.vue index fcfe705e0..9534b34e1 100644 --- a/client/components/tables/podcast/EpisodesTable.vue +++ b/client/components/tables/podcast/EpisodesTable.vue @@ -191,6 +191,7 @@ export default { } }, methods: { + submit() {}, inputUpdate() { clearTimeout(this.searchTimeout) this.searchTimeout = setTimeout(() => { diff --git a/client/package-lock.json b/client/package-lock.json index cf9491cc4..25000ab00 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,12 +1,12 @@ { "name": "audiobookshelf-client", - "version": "2.4.3", + "version": "2.4.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "audiobookshelf-client", - "version": "2.4.3", + "version": "2.4.4", "license": "ISC", "dependencies": { "@nuxtjs/axios": "^5.13.6", diff --git a/client/package.json b/client/package.json index 3c90c31f2..cc7859269 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "audiobookshelf-client", - "version": "2.4.3", + "version": "2.4.4", "description": "Self-hosted audiobook and podcast client", "main": "index.js", "scripts": { diff --git a/client/pages/config/sessions.vue b/client/pages/config/sessions.vue index e6925c696..0b74955c6 100644 --- a/client/pages/config/sessions.vue +++ b/client/pages/config/sessions.vue @@ -53,8 +53,10 @@

{{ $strings.MessageNoListeningSessions }}

+
+ -

Open Listening Sessions

+

Open Listening Sessions

@@ -73,8 +75,7 @@

{{ session.displayAuthor }}