diff --git a/client/components/cards/LazyBookCard.vue b/client/components/cards/LazyBookCard.vue index 0fffe3dc..0b7f4109 100644 --- a/client/components/cards/LazyBookCard.vue +++ b/client/components/cards/LazyBookCard.vue @@ -750,7 +750,7 @@ export default { this.$toast.success(this.$getString('ToastSendEbookToDeviceSuccess', [deviceName])) }) .catch((error) => { - console.error('Failed to send e-book to device', error) + console.error('Failed to send ebook to device', error) this.$toast.error(this.$strings.ToastSendEbookToDeviceFailed) }) .finally(() => { diff --git a/client/components/controls/LibraryFilterSelect.vue b/client/components/controls/LibraryFilterSelect.vue index 254e2d1d..abe8df88 100644 --- a/client/components/controls/LibraryFilterSelect.vue +++ b/client/components/controls/LibraryFilterSelect.vue @@ -185,6 +185,11 @@ export default { value: 'tracks', sublist: true }, + { + text: this.$strings.LabelEbook, + value: 'ebook', + sublist: false + }, { text: this.$strings.LabelAbridged, value: 'abridged', diff --git a/client/pages/item/_id/index.vue b/client/pages/item/_id/index.vue index 254e2553..b41302c8 100644 --- a/client/pages/item/_id/index.vue +++ b/client/pages/item/_id/index.vue @@ -733,7 +733,7 @@ export default { this.$toast.success(this.$getString('ToastSendEbookToDeviceSuccess', [deviceName])) }) .catch((error) => { - console.error('Failed to send e-book to device', error) + console.error('Failed to send ebook to device', error) this.$toast.error(this.$strings.ToastSendEbookToDeviceFailed) }) .finally(() => { diff --git a/client/strings/de.json b/client/strings/de.json index 0b046f3b..1e9e9df1 100644 --- a/client/strings/de.json +++ b/client/strings/de.json @@ -222,6 +222,7 @@ "LabelDownload": "Herunterladen", "LabelDuration": "Laufzeit", "LabelDurationFound": "Gefundene Laufzeit:", + "LabelEbook": "Ebook", "LabelEdit": "Bearbeiten", "LabelEmail": "Email", "LabelEmailSettingsFromAddress": "From Address", @@ -360,7 +361,7 @@ "LabelSearchTitle": "Titel", "LabelSearchTitleOrASIN": "Titel oder ASIN", "LabelSeason": "Staffel", - "LabelSendEbookToDevice": "Send E-Book to...", + "LabelSendEbookToDevice": "Send Ebook to...", "LabelSequence": "Reihenfolge", "LabelSeries": "Serien", "LabelSeriesName": "Serienname", @@ -660,8 +661,8 @@ "ToastRemoveItemFromCollectionSuccess": "Medium aus der Sammlung gelöscht", "ToastRSSFeedCloseFailed": "RSS-Feed konnte nicht geschlossen werden", "ToastRSSFeedCloseSuccess": "RSS-Feed geschlossen", - "ToastSendEbookToDeviceFailed": "Failed to send e-book to device", - "ToastSendEbookToDeviceSuccess": "E-book sent to device \"{0}\"", + "ToastSendEbookToDeviceFailed": "Failed to send ebook to device", + "ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"", "ToastSeriesUpdateFailed": "Aktualisierung der Serien fehlgeschlagen", "ToastSeriesUpdateSuccess": "Serien aktualisiert", "ToastSessionDeleteFailed": "Sitzung konnte nicht gelöscht werden", @@ -671,4 +672,4 @@ "ToastSocketFailedToConnect": "Verbindung zum WebSocket fehlgeschlagen", "ToastUserDeleteFailed": "Benutzer konnte nicht gelöscht werden", "ToastUserDeleteSuccess": "Benutzer gelöscht" -} +} \ No newline at end of file diff --git a/client/strings/en-us.json b/client/strings/en-us.json index e92695ee..73f12dc0 100644 --- a/client/strings/en-us.json +++ b/client/strings/en-us.json @@ -222,6 +222,7 @@ "LabelDownload": "Download", "LabelDuration": "Duration", "LabelDurationFound": "Duration found:", + "LabelEbook": "Ebook", "LabelEdit": "Edit", "LabelEmail": "Email", "LabelEmailSettingsFromAddress": "From Address", @@ -360,7 +361,7 @@ "LabelSearchTitle": "Search Title", "LabelSearchTitleOrASIN": "Search Title or ASIN", "LabelSeason": "Season", - "LabelSendEbookToDevice": "Send E-Book to...", + "LabelSendEbookToDevice": "Send Ebook to...", "LabelSequence": "Sequence", "LabelSeries": "Series", "LabelSeriesName": "Series Name", @@ -660,8 +661,8 @@ "ToastRemoveItemFromCollectionSuccess": "Item removed from collection", "ToastRSSFeedCloseFailed": "Failed to close RSS feed", "ToastRSSFeedCloseSuccess": "RSS feed closed", - "ToastSendEbookToDeviceFailed": "Failed to send e-book to device", - "ToastSendEbookToDeviceSuccess": "E-book sent to device \"{0}\"", + "ToastSendEbookToDeviceFailed": "Failed to send ebook to device", + "ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"", "ToastSeriesUpdateFailed": "Series update failed", "ToastSeriesUpdateSuccess": "Series update success", "ToastSessionDeleteFailed": "Failed to delete session", diff --git a/client/strings/es.json b/client/strings/es.json index 5d142d1f..696e1098 100644 --- a/client/strings/es.json +++ b/client/strings/es.json @@ -222,6 +222,7 @@ "LabelDownload": "Descargar", "LabelDuration": "Duración", "LabelDurationFound": "Duración Comprobada:", + "LabelEbook": "Ebook", "LabelEdit": "Editar", "LabelEmail": "Email", "LabelEmailSettingsFromAddress": "From Address", @@ -360,7 +361,7 @@ "LabelSearchTitle": "Buscar Titulo", "LabelSearchTitleOrASIN": "Buscar Titulo o ASIN", "LabelSeason": "Temporada", - "LabelSendEbookToDevice": "Send E-Book to...", + "LabelSendEbookToDevice": "Send Ebook to...", "LabelSequence": "Secuencia", "LabelSeries": "Series", "LabelSeriesName": "Nombre de la Serie", @@ -660,8 +661,8 @@ "ToastRemoveItemFromCollectionSuccess": "Elemento eliminado de la colección.", "ToastRSSFeedCloseFailed": "Error al cerrar fuente RSS", "ToastRSSFeedCloseSuccess": "Fuente RSS cerrada", - "ToastSendEbookToDeviceFailed": "Failed to send e-book to device", - "ToastSendEbookToDeviceSuccess": "E-book sent to device \"{0}\"", + "ToastSendEbookToDeviceFailed": "Failed to Send Ebook to device", + "ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"", "ToastSeriesUpdateFailed": "Error al actualizar la serie", "ToastSeriesUpdateSuccess": "Series actualizada", "ToastSessionDeleteFailed": "Error al eliminar sesión", diff --git a/client/strings/fr.json b/client/strings/fr.json index 31474eec..f4844d77 100644 --- a/client/strings/fr.json +++ b/client/strings/fr.json @@ -222,6 +222,7 @@ "LabelDownload": "Téléchargement", "LabelDuration": "Durée", "LabelDurationFound": "Durée trouvée :", + "LabelEbook": "Ebook", "LabelEdit": "Modifier", "LabelEmail": "Email", "LabelEmailSettingsFromAddress": "From Address", @@ -360,7 +361,7 @@ "LabelSearchTitle": "Titre de recherche", "LabelSearchTitleOrASIN": "Recherche du titre ou ASIN", "LabelSeason": "Saison", - "LabelSendEbookToDevice": "Send E-Book to...", + "LabelSendEbookToDevice": "Send Ebook to...", "LabelSequence": "Séquence", "LabelSeries": "Séries", "LabelSeriesName": "Nom de la série", @@ -660,8 +661,8 @@ "ToastRemoveItemFromCollectionSuccess": "Article supprimé de la collection", "ToastRSSFeedCloseFailed": "Échec de la fermeture du flux RSS", "ToastRSSFeedCloseSuccess": "Flux RSS fermé", - "ToastSendEbookToDeviceFailed": "Failed to send e-book to device", - "ToastSendEbookToDeviceSuccess": "E-book sent to device \"{0}\"", + "ToastSendEbookToDeviceFailed": "Failed to Send Ebook to device", + "ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"", "ToastSeriesUpdateFailed": "Échec de la mise à jour de la série", "ToastSeriesUpdateSuccess": "Mise à jour de la série réussie", "ToastSessionDeleteFailed": "Échec de la suppression de session", diff --git a/client/strings/gu.json b/client/strings/gu.json index da8e8d92..d565bcb0 100644 --- a/client/strings/gu.json +++ b/client/strings/gu.json @@ -222,6 +222,7 @@ "LabelDownload": "Download", "LabelDuration": "Duration", "LabelDurationFound": "Duration found:", + "LabelEbook": "Ebook", "LabelEdit": "Edit", "LabelEmail": "Email", "LabelEmailSettingsFromAddress": "From Address", @@ -360,7 +361,7 @@ "LabelSearchTitle": "Search Title", "LabelSearchTitleOrASIN": "Search Title or ASIN", "LabelSeason": "Season", - "LabelSendEbookToDevice": "Send E-Book to...", + "LabelSendEbookToDevice": "Send Ebook to...", "LabelSequence": "Sequence", "LabelSeries": "Series", "LabelSeriesName": "Series Name", @@ -660,8 +661,8 @@ "ToastRemoveItemFromCollectionSuccess": "Item removed from collection", "ToastRSSFeedCloseFailed": "Failed to close RSS feed", "ToastRSSFeedCloseSuccess": "RSS feed closed", - "ToastSendEbookToDeviceFailed": "Failed to send e-book to device", - "ToastSendEbookToDeviceSuccess": "E-book sent to device \"{0}\"", + "ToastSendEbookToDeviceFailed": "Failed to Send Ebook to device", + "ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"", "ToastSeriesUpdateFailed": "Series update failed", "ToastSeriesUpdateSuccess": "Series update success", "ToastSessionDeleteFailed": "Failed to delete session", diff --git a/client/strings/hi.json b/client/strings/hi.json index 81bacfa9..123b8755 100644 --- a/client/strings/hi.json +++ b/client/strings/hi.json @@ -222,6 +222,7 @@ "LabelDownload": "Download", "LabelDuration": "Duration", "LabelDurationFound": "Duration found:", + "LabelEbook": "Ebook", "LabelEdit": "Edit", "LabelEmail": "Email", "LabelEmailSettingsFromAddress": "From Address", @@ -360,7 +361,7 @@ "LabelSearchTitle": "Search Title", "LabelSearchTitleOrASIN": "Search Title or ASIN", "LabelSeason": "Season", - "LabelSendEbookToDevice": "Send E-Book to...", + "LabelSendEbookToDevice": "Send Ebook to...", "LabelSequence": "Sequence", "LabelSeries": "Series", "LabelSeriesName": "Series Name", @@ -660,8 +661,8 @@ "ToastRemoveItemFromCollectionSuccess": "Item removed from collection", "ToastRSSFeedCloseFailed": "Failed to close RSS feed", "ToastRSSFeedCloseSuccess": "RSS feed closed", - "ToastSendEbookToDeviceFailed": "Failed to send e-book to device", - "ToastSendEbookToDeviceSuccess": "E-book sent to device \"{0}\"", + "ToastSendEbookToDeviceFailed": "Failed to Send Ebook to device", + "ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"", "ToastSeriesUpdateFailed": "Series update failed", "ToastSeriesUpdateSuccess": "Series update success", "ToastSessionDeleteFailed": "Failed to delete session", diff --git a/client/strings/hr.json b/client/strings/hr.json index 736312c4..23ab4fc8 100644 --- a/client/strings/hr.json +++ b/client/strings/hr.json @@ -222,6 +222,7 @@ "LabelDownload": "Preuzmi", "LabelDuration": "Trajanje", "LabelDurationFound": "Pronađeno trajanje:", + "LabelEbook": "Ebook", "LabelEdit": "Uredi", "LabelEmail": "Email", "LabelEmailSettingsFromAddress": "From Address", @@ -360,7 +361,7 @@ "LabelSearchTitle": "Traži naslov", "LabelSearchTitleOrASIN": "Traži naslov ili ASIN", "LabelSeason": "Sezona", - "LabelSendEbookToDevice": "Send E-Book to...", + "LabelSendEbookToDevice": "Send Ebook to...", "LabelSequence": "Sekvenca", "LabelSeries": "Serije", "LabelSeriesName": "Ime serije", @@ -660,8 +661,8 @@ "ToastRemoveItemFromCollectionSuccess": "Stavka uklonjena iz kolekcije", "ToastRSSFeedCloseFailed": "Neuspješno zatvaranje RSS Feeda", "ToastRSSFeedCloseSuccess": "RSS Feed zatvoren", - "ToastSendEbookToDeviceFailed": "Failed to send e-book to device", - "ToastSendEbookToDeviceSuccess": "E-book sent to device \"{0}\"", + "ToastSendEbookToDeviceFailed": "Failed to Send Ebook to device", + "ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"", "ToastSeriesUpdateFailed": "Series update failed", "ToastSeriesUpdateSuccess": "Series update success", "ToastSessionDeleteFailed": "Neuspješno brisanje serije", diff --git a/client/strings/it.json b/client/strings/it.json index 40c6da1c..bee9d951 100644 --- a/client/strings/it.json +++ b/client/strings/it.json @@ -222,6 +222,7 @@ "LabelDownload": "Download", "LabelDuration": "Durata", "LabelDurationFound": "Durata Trovata:", + "LabelEbook": "Ebook", "LabelEdit": "Modifica", "LabelEmail": "Email", "LabelEmailSettingsFromAddress": "From Address", @@ -360,7 +361,7 @@ "LabelSearchTitle": "Cerca Titolo", "LabelSearchTitleOrASIN": "Cerca titolo o ASIN", "LabelSeason": "Stagione", - "LabelSendEbookToDevice": "Send E-Book to...", + "LabelSendEbookToDevice": "Send Ebook to...", "LabelSequence": "Sequenza", "LabelSeries": "Serie", "LabelSeriesName": "Nome Serie", @@ -660,8 +661,8 @@ "ToastRemoveItemFromCollectionSuccess": "Oggetto rimosso dalla Raccolta", "ToastRSSFeedCloseFailed": "Errore chiusura RSS feed", "ToastRSSFeedCloseSuccess": "RSS feed chiuso", - "ToastSendEbookToDeviceFailed": "Failed to send e-book to device", - "ToastSendEbookToDeviceSuccess": "E-book sent to device \"{0}\"", + "ToastSendEbookToDeviceFailed": "Failed to Send Ebook to device", + "ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"", "ToastSeriesUpdateFailed": "Aggiornaento Serie Fallito", "ToastSeriesUpdateSuccess": "Serie Aggornate", "ToastSessionDeleteFailed": "Errore eliminazione sessione", diff --git a/client/strings/nl.json b/client/strings/nl.json index aaa5d965..59935d77 100644 --- a/client/strings/nl.json +++ b/client/strings/nl.json @@ -222,6 +222,7 @@ "LabelDownload": "Download", "LabelDuration": "Duur", "LabelDurationFound": "Gevonden duur:", + "LabelEbook": "Ebook", "LabelEdit": "Wijzig", "LabelEmail": "Email", "LabelEmailSettingsFromAddress": "From Address", @@ -360,7 +361,7 @@ "LabelSearchTitle": "Zoek titel", "LabelSearchTitleOrASIN": "Zoek titel of ASIN", "LabelSeason": "Seizoen", - "LabelSendEbookToDevice": "Send E-Book to...", + "LabelSendEbookToDevice": "Send Ebook to...", "LabelSequence": "Sequentie", "LabelSeries": "Serie", "LabelSeriesName": "Naam serie", @@ -660,8 +661,8 @@ "ToastRemoveItemFromCollectionSuccess": "Onderdeel verwijderd uit collectie", "ToastRSSFeedCloseFailed": "Sluiten RSS-feed mislukt", "ToastRSSFeedCloseSuccess": "RSS-feed gesloten", - "ToastSendEbookToDeviceFailed": "Failed to send e-book to device", - "ToastSendEbookToDeviceSuccess": "E-book sent to device \"{0}\"", + "ToastSendEbookToDeviceFailed": "Failed to Send Ebook to device", + "ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"", "ToastSeriesUpdateFailed": "Bijwerken serie mislukt", "ToastSeriesUpdateSuccess": "Bijwerken serie gelukt", "ToastSessionDeleteFailed": "Verwijderen sessie mislukt", diff --git a/client/strings/pl.json b/client/strings/pl.json index fe581b6d..6c463272 100644 --- a/client/strings/pl.json +++ b/client/strings/pl.json @@ -222,6 +222,7 @@ "LabelDownload": "Pobierz", "LabelDuration": "Czas trwania", "LabelDurationFound": "Znaleziona długość:", + "LabelEbook": "Ebook", "LabelEdit": "Edytuj", "LabelEmail": "Email", "LabelEmailSettingsFromAddress": "From Address", @@ -360,7 +361,7 @@ "LabelSearchTitle": "Wyszukaj tytuł", "LabelSearchTitleOrASIN": "Szukaj tytuł lub ASIN", "LabelSeason": "Sezon", - "LabelSendEbookToDevice": "Send E-Book to...", + "LabelSendEbookToDevice": "Send Ebook to...", "LabelSequence": "Kolejność", "LabelSeries": "Serie", "LabelSeriesName": "Nazwy serii", @@ -660,8 +661,8 @@ "ToastRemoveItemFromCollectionSuccess": "Pozycja usunięta z kolekcji", "ToastRSSFeedCloseFailed": "Zamknięcie kanału RSS nie powiodło się", "ToastRSSFeedCloseSuccess": "Zamknięcie kanału RSS powiodło się", - "ToastSendEbookToDeviceFailed": "Failed to send e-book to device", - "ToastSendEbookToDeviceSuccess": "E-book sent to device \"{0}\"", + "ToastSendEbookToDeviceFailed": "Failed to Send Ebook to device", + "ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"", "ToastSeriesUpdateFailed": "Series update failed", "ToastSeriesUpdateSuccess": "Series update success", "ToastSessionDeleteFailed": "Nie udało się usunąć sesji", diff --git a/client/strings/ru.json b/client/strings/ru.json index 65caafb6..3c7d5613 100644 --- a/client/strings/ru.json +++ b/client/strings/ru.json @@ -222,6 +222,7 @@ "LabelDownload": "Скачать", "LabelDuration": "Длина", "LabelDurationFound": "Найденная длина:", + "LabelEbook": "Ebook", "LabelEdit": "Редактировать", "LabelEmail": "Email", "LabelEmailSettingsFromAddress": "From Address", @@ -360,7 +361,7 @@ "LabelSearchTitle": "Поиск по названию", "LabelSearchTitleOrASIN": "Поиск по названию или ASIN", "LabelSeason": "Сезон", - "LabelSendEbookToDevice": "Send E-Book to...", + "LabelSendEbookToDevice": "Send Ebook to...", "LabelSequence": "Последовательность", "LabelSeries": "Серия", "LabelSeriesName": "Имя серии", @@ -660,8 +661,8 @@ "ToastRemoveItemFromCollectionSuccess": "Элемент удален из коллекции", "ToastRSSFeedCloseFailed": "Не удалось закрыть RSS-канал", "ToastRSSFeedCloseSuccess": "RSS-канал закрыт", - "ToastSendEbookToDeviceFailed": "Failed to send e-book to device", - "ToastSendEbookToDeviceSuccess": "E-book sent to device \"{0}\"", + "ToastSendEbookToDeviceFailed": "Failed to Send Ebook to device", + "ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"", "ToastSeriesUpdateFailed": "Не удалось обновить серию", "ToastSeriesUpdateSuccess": "Успешное обновление серии", "ToastSessionDeleteFailed": "Не удалось удалить сеанс", diff --git a/client/strings/zh-cn.json b/client/strings/zh-cn.json index b767018f..bfa66fae 100644 --- a/client/strings/zh-cn.json +++ b/client/strings/zh-cn.json @@ -222,6 +222,7 @@ "LabelDownload": "下载", "LabelDuration": "持续时间", "LabelDurationFound": "找到持续时间:", + "LabelEbook": "Ebook", "LabelEdit": "编辑", "LabelEmail": "Email", "LabelEmailSettingsFromAddress": "From Address", @@ -360,7 +361,7 @@ "LabelSearchTitle": "搜索标题", "LabelSearchTitleOrASIN": "搜索标题或 ASIN", "LabelSeason": "季", - "LabelSendEbookToDevice": "Send E-Book to...", + "LabelSendEbookToDevice": "Send Ebook to...", "LabelSequence": "序列", "LabelSeries": "系列", "LabelSeriesName": "系列名称", @@ -660,8 +661,8 @@ "ToastRemoveItemFromCollectionSuccess": "项目已从收藏中删除", "ToastRSSFeedCloseFailed": "关闭 RSS 源失败", "ToastRSSFeedCloseSuccess": "RSS 源已关闭", - "ToastSendEbookToDeviceFailed": "Failed to send e-book to device", - "ToastSendEbookToDeviceSuccess": "E-book sent to device \"{0}\"", + "ToastSendEbookToDeviceFailed": "Failed to send Ebook to device", + "ToastSendEbookToDeviceSuccess": "Ebook sent to device \"{0}\"", "ToastSeriesUpdateFailed": "更新系列失败", "ToastSeriesUpdateSuccess": "系列已更新", "ToastSessionDeleteFailed": "删除会话失败", diff --git a/server/utils/libraryHelpers.js b/server/utils/libraryHelpers.js index f7dd1c7f..3ca27da4 100644 --- a/server/utils/libraryHelpers.js +++ b/server/utils/libraryHelpers.js @@ -18,7 +18,7 @@ module.exports = { if (group) { const filterVal = filterBy.replace(`${group}.`, '') const filter = this.decode(filterVal) - if (group === 'genres') filtered = filtered.filter(li => li.media.metadata && li.media.metadata.genres.includes(filter)) + if (group === 'genres') filtered = filtered.filter(li => li.media.metadata.genres?.includes(filter)) else if (group === 'tags') filtered = filtered.filter(li => li.media.tags.includes(filter)) else if (group === 'series') { if (filter === 'no-series') filtered = filtered.filter(li => li.isBook && !li.media.metadata.series.length) @@ -58,7 +58,7 @@ module.exports = { } }) } else if (group === 'languages') { - filtered = filtered.filter(li => li.media.metadata && li.media.metadata.language === filter) + filtered = filtered.filter(li => li.media.metadata.language === filter) } else if (group === 'tracks') { if (filter === 'single') filtered = filtered.filter(li => li.isBook && li.media.numTracks === 1) else if (filter === 'multi') filtered = filtered.filter(li => li.isBook && li.media.numTracks > 1) @@ -69,6 +69,8 @@ module.exports = { filtered = filtered.filter(li => feedsArray.some(feed => feed.entityId === li.id)) } else if (filterBy === 'abridged') { filtered = filtered.filter(li => !!li.media.metadata?.abridged) + } else if (filterBy === 'ebook') { + filtered = filtered.filter(li => li.media.ebookFile) } return filtered @@ -82,12 +84,12 @@ module.exports = { var filterVal = filterBy.replace(`${group}.`, '') var filter = this.decode(filterVal) - if (group === 'genres') return libraryItem.media.metadata && libraryItem.media.metadata.genres.includes(filter) + if (group === 'genres') return libraryItem.media.metadata.genres.includes(filter) else if (group === 'tags') return libraryItem.media.tags.includes(filter) - else if (group === 'authors') return libraryItem.mediaType === 'book' && libraryItem.media.metadata.hasAuthor(filter) - else if (group === 'narrators') return libraryItem.mediaType === 'book' && libraryItem.media.metadata.hasNarrator(filter) + else if (group === 'authors') return libraryItem.isBook && libraryItem.media.metadata.hasAuthor(filter) + else if (group === 'narrators') return libraryItem.isBook && libraryItem.media.metadata.hasNarrator(filter) else if (group === 'languages') { - return libraryItem.media.metadata && libraryItem.media.metadata.language === filter + return libraryItem.media.metadata.language === filter } } return true