diff --git a/assets/app.css b/assets/app.css index 2b06265c..2eb7cfa7 100644 --- a/assets/app.css +++ b/assets/app.css @@ -117,6 +117,20 @@ Bookshelf Label filter: blur(20px); } +.episode-subtitle { + word-break: break-word; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + line-height: 16px; + /* fallback */ + max-height: 32px; + /* fallback */ + -webkit-line-clamp: 2; + /* number of lines to show */ + -webkit-box-orient: vertical; +} + .line-clamp-2 { overflow: hidden; display: -webkit-box; diff --git a/components/app/AudioPlayer.vue b/components/app/AudioPlayer.vue index 635f4e29..1a6d39e7 100644 --- a/components/app/AudioPlayer.vue +++ b/components/app/AudioPlayer.vue @@ -12,7 +12,7 @@
more_vert
-

{{ isDirectPlayMethod ? 'Direct' : isLocalPlayMethod ? 'Local' : 'Transcode' }}

+

{{ isDirectPlayMethod ? 'Direct' : isLocalPlayMethod ? 'Local' : 'Transcode' }}

diff --git a/components/cards/AuthorSearchCard.vue b/components/cards/AuthorSearchCard.vue index 5db367e1..6afbab77 100644 --- a/components/cards/AuthorSearchCard.vue +++ b/components/cards/AuthorSearchCard.vue @@ -7,26 +7,6 @@

{{ name }}

- + + \ No newline at end of file diff --git a/components/tables/podcast/EpisodeRow.vue b/components/tables/podcast/EpisodeRow.vue index b9dd9894..36c7ed43 100644 --- a/components/tables/podcast/EpisodeRow.vue +++ b/components/tables/podcast/EpisodeRow.vue @@ -17,7 +17,15 @@ {{ title }}

-

{{ subtitle }}

+

+ +

+
Episode #{{ episodeNumber }}
+
Season #{{ season }}
+
+ {{ episodeType }} +
+
@@ -90,7 +98,17 @@ export default { return this.episode.title || '' }, subtitle() { - return this.episode.subtitle || '' + return this.episode.subtitle || this.episode.description || '' + }, + episodeNumber() { + return this.episode.episode + }, + season() { + return this.episode.season + }, + episodeType() { + if (this.episode.episodeType === 'full') return null // only show Trailer/Bonus + return this.episode.episodeType }, duration() { return this.$secondsToTimestamp(this.episode.duration) diff --git a/components/tables/podcast/LatestEpisodeRow.vue b/components/tables/podcast/LatestEpisodeRow.vue index 9f7d797b..09bd1156 100644 --- a/components/tables/podcast/LatestEpisodeRow.vue +++ b/components/tables/podcast/LatestEpisodeRow.vue @@ -16,7 +16,16 @@

{{ title }}

-

{{ subtitle }}

+ +

+ +

+
Episode #{{ episodeNumber }}
+
Season #{{ season }}
+
+ {{ episodeType }} +
+
@@ -92,7 +101,17 @@ export default { return this.episode.title || '' }, subtitle() { - return this.episode.subtitle || '' + return this.episode.subtitle || this.episode.description || '' + }, + episodeNumber() { + return this.episode.episode + }, + season() { + return this.episode.season + }, + episodeType() { + if (this.episode.episodeType === 'full') return null // only show Trailer/Bonus + return this.episode.episodeType }, duration() { return this.$secondsToTimestamp(this.episode.duration) diff --git a/pages/bookshelf/index.vue b/pages/bookshelf/index.vue index 262568a5..d73f9683 100644 --- a/pages/bookshelf/index.vue +++ b/pages/bookshelf/index.vue @@ -37,7 +37,6 @@ export default { data() { return { shelves: [], - isSettingsLoaded: false, isFirstNetworkConnection: true, lastServerFetch: 0, lastServerFetchLibraryId: null, @@ -258,11 +257,6 @@ export default { return cat }) - // TODO: iOS has its own implementation of this. Android & iOS should be consistent here. - if (!this.isIos) { - this.openMediaPlayerWithMostRecentListening() - } - // Only add the local shelf with the same media type const localShelves = localCategories.filter((cat) => cat.type === this.currentLibraryMediaType && !cat.localOnly) this.shelves.push(...localShelves) @@ -277,53 +271,6 @@ export default { this.isLoading = false }, - async waitForSettings() { - // Wait up to 3 seconds - for (let i = 0; i < 6; i++) { - if (this.isSettingsLoaded) return true - await new Promise((resolve) => setTimeout(resolve, 500)) - } - return false - }, - async openMediaPlayerWithMostRecentListening() { - // If we don't already have a player open - // Try opening the first book from continue-listening without playing it - if (this.$store.state.playerLibraryItemId || !this.$store.state.isFirstAudioLoad) return - this.$store.commit('setIsFirstAudioLoad', false) // Only run this once on app launch - - // Wait for settings to load to prevent race condition when setting playback speed. - if (!this.isSettingsLoaded) { - await this.waitForSettings() - } - - const continueListeningShelf = this.shelves.find((cat) => cat.id === 'continue-listening') - const mostRecentEntity = continueListeningShelf?.entities?.find((li) => li.media?.audioTracks?.length || li.media?.numTracks) - if (mostRecentEntity) { - const playObject = { - libraryItemId: mostRecentEntity.id, - episodeId: mostRecentEntity.recentEpisode?.id || null, - paused: true - } - - // Check if there is a local copy - if (mostRecentEntity.localLibraryItem) { - if (mostRecentEntity.recentEpisode) { - // Check if the podcast episode has a local copy - const localEpisode = mostRecentEntity.localLibraryItem.media.episodes.find((ep) => ep.serverEpisodeId === mostRecentEntity.recentEpisode.id) - if (localEpisode) { - playObject.libraryItemId = mostRecentEntity.localLibraryItem.id - playObject.episodeId = localEpisode.id - playObject.serverLibraryItemId = mostRecentEntity.id - playObject.serverEpisodeId = mostRecentEntity.recentEpisode.id - } - } else { - playObject.libraryItemId = mostRecentEntity.localLibraryItem.id - playObject.serverLibraryItemId = mostRecentEntity.id - } - } - this.$eventBus.$emit('play-item', playObject) - } - }, libraryChanged() { if (this.currentLibraryId) { console.log(`[categories] libraryChanged so fetching categories`) @@ -370,16 +317,11 @@ export default { } }) }, - settingsUpdated() { - this.isSettingsLoaded = true - }, initListeners() { this.$eventBus.$on('library-changed', this.libraryChanged) - this.$eventBus.$on('user-settings', this.settingsUpdated) }, removeListeners() { this.$eventBus.$off('library-changed', this.libraryChanged) - this.$eventBus.$off('user-settings', this.settingsUpdated) } }, mounted() { diff --git a/pages/item/_id/_episode/index.vue b/pages/item/_id/_episode/index.vue index 3c78570f..c90cd1e8 100644 --- a/pages/item/_id/_episode/index.vue +++ b/pages/item/_id/_episode/index.vue @@ -16,6 +16,14 @@ {{ title }}

+
+
Episode #{{ episodeNumber }}
+
Season #{{ season }}
+
+ {{ episodeType }} +
+
+

Your Progress: {{ Math.round(progressPercent * 100) }}%

@@ -160,6 +168,16 @@ export default { description() { return this.episode.description || '' }, + episodeNumber() { + return this.episode.episode + }, + season() { + return this.episode.season + }, + episodeType() { + if (this.episode.episodeType === 'full') return null // only show Trailer/Bonus + return this.episode.episodeType + }, duration() { return this.$secondsToTimestamp(this.episode.duration) }, diff --git a/pages/item/_id/index.vue b/pages/item/_id/index.vue index 9cab5bd7..28e34be0 100644 --- a/pages/item/_id/index.vue +++ b/pages/item/_id/index.vue @@ -86,6 +86,9 @@
+
Type
+
{{ podcastType }}
+
Series