From 50a4b61cbcfe41f80a9b77a65554a52d28cb3c81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinar?= Date: Thu, 14 May 2026 17:08:25 +0200 Subject: [PATCH 1/4] Search podcast episode title and description --- server/utils/queries/libraryItemsPodcastFilters.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/utils/queries/libraryItemsPodcastFilters.js b/server/utils/queries/libraryItemsPodcastFilters.js index 8bb5dc110..b739fbb35 100644 --- a/server/utils/queries/libraryItemsPodcastFilters.js +++ b/server/utils/queries/libraryItemsPodcastFilters.js @@ -414,10 +414,10 @@ module.exports = { }) } - // Search podcast episode title + // Search podcast episode title and description const podcastEpisodes = await Database.podcastEpisodeModel.findAll({ where: [ - Sequelize.literal(textSearchQuery.matchExpression('podcastEpisode.title')), + Sequelize.literal(`(${textSearchQuery.matchExpression('podcastEpisode.title')} OR ${textSearchQuery.matchExpression('podcastEpisode.description')})`), { '$podcast.libraryItem.libraryId$': library.id } From 61740bf08dea76b20bece8471fe140f5c059ce3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinar?= Date: Thu, 14 May 2026 17:10:18 +0200 Subject: [PATCH 2/4] Enable episode deep linking via episodeId Wire episodeId query parameter through item links and search results, and preselect/show the corresponding episode on item page load. --- client/components/cards/LazyBookCard.vue | 1 + client/components/controls/GlobalSearch.vue | 2 +- client/pages/item/_id/index.vue | 10 ++++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/client/components/cards/LazyBookCard.vue b/client/components/cards/LazyBookCard.vue index 51f657dbc..2258c306c 100644 --- a/client/components/cards/LazyBookCard.vue +++ b/client/components/cards/LazyBookCard.vue @@ -711,6 +711,7 @@ export default { var router = this.$router || this.$nuxt.$router if (router) { if (this.collapsedSeries) router.push(`/library/${this.libraryId}/series/${this.collapsedSeries.id}`) + else if (this.recentEpisode) router.push(`/item/${this.libraryItemId}?episodeId=${this.recentEpisode.id}`) else router.push(`/item/${this.libraryItemId}`) } } diff --git a/client/components/controls/GlobalSearch.vue b/client/components/controls/GlobalSearch.vue index 6f3a819bf..c70c8ce8c 100644 --- a/client/components/controls/GlobalSearch.vue +++ b/client/components/controls/GlobalSearch.vue @@ -42,7 +42,7 @@

{{ $strings.LabelEpisodes }}

+
  • + +
  • From 3f2b6e8adc8efefd98cc23b3b5a5dd36f8d337d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dav=C3=AD=C3=B0=20Steinar?= Date: Thu, 14 May 2026 17:12:01 +0200 Subject: [PATCH 4/4] Add play button and play action to ViewEpisode modal --- client/components/modals/podcast/ViewEpisode.vue | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/client/components/modals/podcast/ViewEpisode.vue b/client/components/modals/podcast/ViewEpisode.vue index 2502a5ea4..b317c69e2 100644 --- a/client/components/modals/podcast/ViewEpisode.vue +++ b/client/components/modals/podcast/ViewEpisode.vue @@ -14,6 +14,9 @@

    {{ podcastTitle }}

    {{ podcastAuthor }}

    +

    {{ title }}

    @@ -105,6 +108,13 @@ export default { } }, methods: { + play() { + this.$eventBus.$emit('play-item', { + libraryItemId: this.libraryItem.id, + episodeId: this.episodeId + }) + this.show = false + }, handleDescriptionClick(e) { if (e.target.matches('span.time-marker')) { const time = parseInt(e.target.dataset.time)