diff --git a/components/tables/collection/BookTableRow.vue b/components/tables/collection/BookTableRow.vue index 98331687..9d722f84 100644 --- a/components/tables/collection/BookTableRow.vue +++ b/components/tables/collection/BookTableRow.vue @@ -6,7 +6,7 @@
-

{{ bookTitle }}

+

{{ bookTitle }} download_done

{{ bookAuthor }}

{{ bookDuration }}

@@ -39,6 +39,9 @@ export default { libraryItemId() { return this.book.id }, + localLibraryItem() { + return this.book.localLibraryItem + }, media() { return this.book.media || {} }, @@ -73,18 +76,34 @@ export default { showPlayBtn() { return !this.isMissing && !this.isInvalid && this.tracks.length }, - isStreaming() { + playerIsStartingPlayback() { + // Play has been pressed and waiting for native play response + return this.$store.state.playerIsStartingPlayback + }, + isOpenInPlayer() { + if (this.localLibraryItem && this.$store.getters['getIsMediaStreaming'](this.localLibraryItem.id)) return true return this.$store.getters['getIsMediaStreaming'](this.libraryItemId) }, streamIsPlaying() { - return this.$store.state.playerIsPlaying && this.isStreaming + return this.$store.state.playerIsPlaying && this.isOpenInPlayer } }, methods: { async playClick() { + if (this.playerIsStartingPlayback) return await this.$hapticsImpact() + if (this.streamIsPlaying) { this.$eventBus.$emit('pause-item') + return + } + + this.$store.commit('setPlayerIsStartingPlayback', this.libraryItemId) + if (this.localLibraryItem) { + this.$eventBus.$emit('play-item', { + libraryItemId: this.localLibraryItem.id, + serverLibraryItemId: this.libraryItemId + }) } else { this.$eventBus.$emit('play-item', { libraryItemId: this.libraryItemId diff --git a/components/tables/playlist/ItemTableRow.vue b/components/tables/playlist/ItemTableRow.vue index b3e73916..1d5663f0 100644 --- a/components/tables/playlist/ItemTableRow.vue +++ b/components/tables/playlist/ItemTableRow.vue @@ -113,12 +113,12 @@ export default { showPlayBtn() { return !this.isMissing && !this.isInvalid && (this.tracks.length || this.episode) }, - isStreaming() { + isOpenInPlayer() { if (this.localLibraryItem && this.localEpisode && this.$store.getters['getIsMediaStreaming'](this.localLibraryItem.id, this.localEpisode.id)) return true return this.$store.getters['getIsMediaStreaming'](this.libraryItem.id, this.episodeId) }, streamIsPlaying() { - return this.$store.state.playerIsPlaying && this.isStreaming + return this.$store.state.playerIsPlaying && this.isOpenInPlayer }, playerIsStartingPlayback() { // Play has been pressed and waiting for native play response diff --git a/pages/collection/_id.vue b/pages/collection/_id.vue index fe9b0c2b..964faa19 100644 --- a/pages/collection/_id.vue +++ b/pages/collection/_id.vue @@ -12,9 +12,9 @@ {{ collectionName }}
- - play_arrow - {{ streaming ? $strings.ButtonPlaying : $strings.ButtonPlay }} + + {{ playerIsPlaying ? 'pause' : 'play_arrow' }} + {{ playerIsPlaying ? $strings.ButtonPause : $strings.ButtonPlay }}
@@ -47,6 +47,18 @@ export default { return redirect('/bookshelf') } + // Lookup matching local items and attach to collection items + if (collection.books.length) { + const localLibraryItems = (await app.$db.getLocalLibraryItems('book')) || [] + if (localLibraryItems.length) { + collection.books.forEach((collectionItem) => { + const matchingLocalLibraryItem = localLibraryItems.find((lli) => lli.libraryItemId === collectionItem.id) + if (!matchingLocalLibraryItem) return + collectionItem.localLibraryItem = matchingLocalLibraryItem + }) + } + } + return { collection } @@ -70,13 +82,19 @@ export default { description() { return this.collection.description || '' }, - playableBooks() { + playableItems() { return this.bookItems.filter((book) => { return !book.isMissing && !book.isInvalid && book.media.tracks.length }) }, - streaming() { - return !!this.playableBooks.find((b) => this.$store.getters['getIsMediaStreaming'](b.id)) + playerIsPlaying() { + return this.$store.state.playerIsPlaying && this.isOpenInPlayer + }, + isOpenInPlayer() { + return !!this.playableItems.find((i) => { + if (i.localLibraryItem && this.$store.getters['getIsMediaStreaming'](i.localLibraryItem.id)) return true + return this.$store.getters['getIsMediaStreaming'](i.id) + }) }, playerIsStartingPlayback() { // Play has been pressed and waiting for native play response @@ -88,21 +106,34 @@ export default { return mediaId === this.mediaIdStartingPlayback }, showPlayButton() { - return this.playableBooks.length + return this.playableItems.length } }, methods: { - clickPlay() { + async playClick() { if (this.playerIsStartingPlayback) return + await this.$hapticsImpact() - var nextBookNotRead = this.playableBooks.find((pb) => { - var prog = this.$store.getters['user/getUserMediaProgress'](pb.id) + if (this.playerIsPlaying) { + this.$eventBus.$emit('pause-item') + } else { + this.playNextItem() + } + }, + playNextItem() { + const nextBookNotRead = this.playableItems.find((pb) => { + const prog = this.$store.getters['user/getUserMediaProgress'](pb.id) return !prog?.isFinished }) if (nextBookNotRead) { this.mediaIdStartingPlayback = nextBookNotRead.id this.$store.commit('setPlayerIsStartingPlayback', nextBookNotRead.id) - this.$eventBus.$emit('play-item', { libraryItemId: nextBookNotRead.id }) + + if (nextBookNotRead.localLibraryItem) { + this.$eventBus.$emit('play-item', { libraryItemId: nextBookNotRead.localLibraryItem.id, serverLibraryItemId: nextBookNotRead.id }) + } else { + this.$eventBus.$emit('play-item', { libraryItemId: nextBookNotRead.id }) + } } } }, diff --git a/pages/playlist/_id.vue b/pages/playlist/_id.vue index e56f083b..25096407 100644 --- a/pages/playlist/_id.vue +++ b/pages/playlist/_id.vue @@ -10,9 +10,9 @@ {{ playlistName }}
- - play_arrow - {{ streaming ? $strings.ButtonPlaying : $strings.ButtonPlay }} + + {{ playerIsPlaying ? 'pause' : 'play_arrow' }} + {{ playerIsPlaying ? $strings.ButtonPause : $strings.ButtonPlay }}
@@ -101,7 +101,10 @@ export default { return libraryItem.media.tracks.length }) }, - streaming() { + playerIsPlaying() { + return this.$store.state.playerIsPlaying && this.isOpenInPlayer + }, + isOpenInPlayer() { return !!this.playableItems.find((i) => { if (i.localLibraryItem && this.$store.getters['getIsMediaStreaming'](i.localLibraryItem.id, i.localEpisode?.id)) return true return this.$store.getters['getIsMediaStreaming'](i.libraryItemId, i.episodeId) @@ -126,7 +129,17 @@ export default { this.selectedEpisode = playlistItem.episode this.showMoreMenu = true }, - clickPlay() { + async playClick() { + if (this.playerIsStartingPlayback) return + await this.$hapticsImpact() + + if (this.playerIsPlaying) { + this.$eventBus.$emit('pause-item') + } else { + this.playNextItem() + } + }, + playNextItem() { const nextItem = this.playableItems.find((i) => { const prog = this.$store.getters['user/getUserMediaProgress'](i.libraryItemId, i.episodeId) return !prog?.isFinished diff --git a/strings/ar.json b/strings/ar.json index 8bf85cea..8dc38287 100644 --- a/strings/ar.json +++ b/strings/ar.json @@ -34,7 +34,6 @@ "ButtonPause": "تَوَقَّف", "ButtonPlay": "تشغيل", "ButtonPlayEpisode": "شغل الحلقة", - "ButtonPlaying": "مشغل الآن", "ButtonPlaylists": "قوائم التشغيل", "ButtonRead": "اقرأ", "ButtonReadLess": "قلص", diff --git a/strings/be.json b/strings/be.json index b36792f3..dfe11e20 100644 --- a/strings/be.json +++ b/strings/be.json @@ -29,7 +29,6 @@ "ButtonNextEpisode": "Наступны эпізод", "ButtonOpenFeed": "Адкрыць стужку", "ButtonPause": "Паўза", - "ButtonPlaying": "Прайграваецца", "ButtonPlaylists": "Плэйлісты", "ButtonRemoveFromServer": "Выдаліць з сервера", "ButtonSave": "Захаваць", diff --git a/strings/bn.json b/strings/bn.json index 73419907..b2c9bc45 100644 --- a/strings/bn.json +++ b/strings/bn.json @@ -34,7 +34,6 @@ "ButtonPause": "বিরতি", "ButtonPlay": "বাজান", "ButtonPlayEpisode": "পর্বটি চালান", - "ButtonPlaying": "বাজছে", "ButtonPlaylists": "প্লেলিস্ট", "ButtonRead": "পড়ুন", "ButtonReadLess": "কম পড়ুন", diff --git a/strings/ca.json b/strings/ca.json index 7d81e2e0..4411e421 100644 --- a/strings/ca.json +++ b/strings/ca.json @@ -34,7 +34,6 @@ "ButtonPause": "Pausa", "ButtonPlay": "Reproduir", "ButtonPlayEpisode": "Reproduir episodi", - "ButtonPlaying": "Reproduint", "ButtonPlaylists": "Llistes de reproducció", "ButtonRead": "Llegir", "ButtonReadLess": "Llig menys", diff --git a/strings/cs.json b/strings/cs.json index 96caeaaa..387dc1bd 100644 --- a/strings/cs.json +++ b/strings/cs.json @@ -35,7 +35,6 @@ "ButtonPause": "Pozastavit", "ButtonPlay": "Přehrát", "ButtonPlayEpisode": "Přehrát epizodu", - "ButtonPlaying": "Hraje", "ButtonPlaylists": "Seznamy skladeb", "ButtonRead": "Číst", "ButtonReadLess": "Číst méně", diff --git a/strings/da.json b/strings/da.json index 50a59e38..97f50f36 100644 --- a/strings/da.json +++ b/strings/da.json @@ -35,7 +35,6 @@ "ButtonPause": "Pause", "ButtonPlay": "Afspil", "ButtonPlayEpisode": "Afspil Afsnit", - "ButtonPlaying": "Afspiller", "ButtonPlaylists": "Afspilningslister", "ButtonRead": "Læs", "ButtonReadLess": "Se mindre", diff --git a/strings/de.json b/strings/de.json index 02da5c62..46a0cc7f 100644 --- a/strings/de.json +++ b/strings/de.json @@ -35,7 +35,6 @@ "ButtonPause": "Pausieren", "ButtonPlay": "Abspielen", "ButtonPlayEpisode": "Episode abspielen", - "ButtonPlaying": "Spielt", "ButtonPlaylists": "Wiedergabelisten", "ButtonRead": "Lesen", "ButtonReadLess": "weniger Anzeigen", diff --git a/strings/en-us.json b/strings/en-us.json index b00c90cf..cd911e42 100644 --- a/strings/en-us.json +++ b/strings/en-us.json @@ -35,7 +35,6 @@ "ButtonPause": "Pause", "ButtonPlay": "Play", "ButtonPlayEpisode": "Play Episode", - "ButtonPlaying": "Playing", "ButtonPlaylists": "Playlists", "ButtonRead": "Read", "ButtonReadLess": "Read less", diff --git a/strings/es.json b/strings/es.json index 83e44b3b..086b9df5 100644 --- a/strings/es.json +++ b/strings/es.json @@ -35,7 +35,6 @@ "ButtonPause": "Pausar", "ButtonPlay": "Reproducir", "ButtonPlayEpisode": "Reproducir episodio", - "ButtonPlaying": "Reproduciendo", "ButtonPlaylists": "Listas de reproducción", "ButtonRead": "Leer", "ButtonReadLess": "Leer menos", diff --git a/strings/fi.json b/strings/fi.json index 0784dd01..f30453db 100644 --- a/strings/fi.json +++ b/strings/fi.json @@ -34,7 +34,6 @@ "ButtonPause": "Pysäytä", "ButtonPlay": "Toista", "ButtonPlayEpisode": "Toista jakso", - "ButtonPlaying": "Toistetaan", "ButtonPlaylists": "Soittolistat", "ButtonRead": "Lue", "ButtonReadLess": "Lue vähemmän", diff --git a/strings/fr.json b/strings/fr.json index c484d3d5..34c2bf3e 100644 --- a/strings/fr.json +++ b/strings/fr.json @@ -35,7 +35,6 @@ "ButtonPause": "Pause", "ButtonPlay": "Lire", "ButtonPlayEpisode": "Lire l’épisode", - "ButtonPlaying": "En lecture", "ButtonPlaylists": "Listes de lecture", "ButtonRead": "Lire", "ButtonReadLess": "Lire moins", diff --git a/strings/gu.json b/strings/gu.json index d7a82377..d4d2995c 100644 --- a/strings/gu.json +++ b/strings/gu.json @@ -13,7 +13,6 @@ "ButtonLibrary": "પુસ્તકાલય", "ButtonOpenFeed": "ફીડ ખોલો", "ButtonPlay": "ચલાવો", - "ButtonPlaying": "ચલાવી રહ્યું છે", "ButtonPlaylists": "પ્લેલિસ્ટ", "ButtonRead": "વાંચો", "ButtonRemove": "કાઢી નાખો", diff --git a/strings/he.json b/strings/he.json index ed08c3a5..0269062a 100644 --- a/strings/he.json +++ b/strings/he.json @@ -27,7 +27,6 @@ "ButtonLibrary": "ספרייה", "ButtonPlay": "נגן", "ButtonPlayEpisode": "נגן פרק", - "ButtonPlaying": "מנגן", "ButtonPlaylists": "רשימת השמעה", "HeaderOpenRSSFeed": "פתח ערוץ RSS", "LabelAddedDate": "נוסף ב-{0}" diff --git a/strings/hi.json b/strings/hi.json index 4b3dedbc..03115ae7 100644 --- a/strings/hi.json +++ b/strings/hi.json @@ -13,7 +13,6 @@ "ButtonLibrary": "पुस्तकालय", "ButtonOpenFeed": "फ़ीड खोलें", "ButtonPlay": "चलाएँ", - "ButtonPlaying": "चल रही है", "ButtonPlaylists": "प्लेलिस्ट्स", "ButtonRead": "पढ़ लिया", "ButtonRemove": "हटाएं", diff --git a/strings/hr.json b/strings/hr.json index 2fbe474e..8d6a9366 100644 --- a/strings/hr.json +++ b/strings/hr.json @@ -35,7 +35,6 @@ "ButtonPause": "Pauziraj", "ButtonPlay": "Reproduciraj", "ButtonPlayEpisode": "Reproduciraj nastavak", - "ButtonPlaying": "Izvodi se", "ButtonPlaylists": "Popisi za izvođenje", "ButtonRead": "Pročitaj", "ButtonReadLess": "Pročitaj manje", diff --git a/strings/hu.json b/strings/hu.json index ad37bf19..91ce6ebe 100644 --- a/strings/hu.json +++ b/strings/hu.json @@ -35,7 +35,6 @@ "ButtonPause": "Szünet", "ButtonPlay": "Lejátszás", "ButtonPlayEpisode": "Epizód lejátszása", - "ButtonPlaying": "Lejátszás folyamatban", "ButtonPlaylists": "Lejátszási listák", "ButtonRead": "Olvasás", "ButtonReadLess": "Mutass kevesebbet", diff --git a/strings/it.json b/strings/it.json index 059e0300..01a78110 100644 --- a/strings/it.json +++ b/strings/it.json @@ -35,7 +35,6 @@ "ButtonPause": "Pausa", "ButtonPlay": "Riproduci", "ButtonPlayEpisode": "Riproduci episodio", - "ButtonPlaying": "In riproduzione", "ButtonPlaylists": "Playlist", "ButtonRead": "Leggi", "ButtonReadLess": "Riduci", diff --git a/strings/lt.json b/strings/lt.json index 95d5271f..3e3443b0 100644 --- a/strings/lt.json +++ b/strings/lt.json @@ -28,7 +28,6 @@ "ButtonPause": "Pauzė", "ButtonPlay": "Groti", "ButtonPlayEpisode": "Groti episodą", - "ButtonPlaying": "Grojama", "ButtonPlaylists": "Grojaraščiai", "ButtonRead": "Skaityti", "ButtonReadLess": "Skaityti mažiau", diff --git a/strings/nl.json b/strings/nl.json index 53fdddc8..1ac480cb 100644 --- a/strings/nl.json +++ b/strings/nl.json @@ -34,7 +34,6 @@ "ButtonPause": "Pauze", "ButtonPlay": "Afspelen", "ButtonPlayEpisode": "Aflevering afspelen", - "ButtonPlaying": "Speelt", "ButtonPlaylists": "Afspeellijsten", "ButtonRead": "Lees", "ButtonReadLess": "Minder lezen", diff --git a/strings/no.json b/strings/no.json index 7d34d60f..ec6dcce8 100644 --- a/strings/no.json +++ b/strings/no.json @@ -31,7 +31,6 @@ "ButtonPause": "Pause", "ButtonPlay": "Spill av", "ButtonPlayEpisode": "Spill episode", - "ButtonPlaying": "Spiller av", "ButtonPlaylists": "Spillelister", "ButtonRead": "Les", "ButtonRemove": "Fjern", diff --git a/strings/pl.json b/strings/pl.json index 8f60efed..f9e0df0d 100644 --- a/strings/pl.json +++ b/strings/pl.json @@ -34,7 +34,6 @@ "ButtonPause": "Wstrzymaj", "ButtonPlay": "Odtwarzaj", "ButtonPlayEpisode": "Odtwórz odcinek", - "ButtonPlaying": "Odtwarzane", "ButtonPlaylists": "Listy odtwarzania", "ButtonRead": "Czytaj", "ButtonReadLess": "Czytaj mniej", diff --git a/strings/pt-br.json b/strings/pt-br.json index 01301afd..54b34531 100644 --- a/strings/pt-br.json +++ b/strings/pt-br.json @@ -34,7 +34,6 @@ "ButtonPause": "Pausar", "ButtonPlay": "Reproduzir", "ButtonPlayEpisode": "Reproduzir Episódio", - "ButtonPlaying": "Reproduzindo", "ButtonPlaylists": "Lista de Reprodução", "ButtonRead": "Ler", "ButtonReadLess": "Ler menos", diff --git a/strings/ru.json b/strings/ru.json index 166d38b2..6a32ce25 100644 --- a/strings/ru.json +++ b/strings/ru.json @@ -35,7 +35,6 @@ "ButtonPause": "Пауза", "ButtonPlay": "Слушать", "ButtonPlayEpisode": "Воспроизвести эпизод", - "ButtonPlaying": "Проигрывается", "ButtonPlaylists": "Плейлисты", "ButtonRead": "Читать", "ButtonReadLess": "Читать меньше", diff --git a/strings/sl.json b/strings/sl.json index 8be185f4..12471424 100644 --- a/strings/sl.json +++ b/strings/sl.json @@ -35,7 +35,6 @@ "ButtonPause": "Premor", "ButtonPlay": "Predvajaj", "ButtonPlayEpisode": "Predvajan epizodo", - "ButtonPlaying": "Predvajam", "ButtonPlaylists": "Seznami predvajanj", "ButtonRead": "Preberi", "ButtonReadLess": "Preberi manj", diff --git a/strings/sv.json b/strings/sv.json index cd246434..dd1dfa8b 100644 --- a/strings/sv.json +++ b/strings/sv.json @@ -35,7 +35,6 @@ "ButtonPause": "Pausa", "ButtonPlay": "Spela", "ButtonPlayEpisode": "Spela Episod", - "ButtonPlaying": "Spelar", "ButtonPlaylists": "Spellistor", "ButtonRead": "Läs", "ButtonRemove": "Ta bort", diff --git a/strings/uk.json b/strings/uk.json index 02df6152..7bc46dd4 100644 --- a/strings/uk.json +++ b/strings/uk.json @@ -35,7 +35,6 @@ "ButtonPause": "Призупинити", "ButtonPlay": "Слухати", "ButtonPlayEpisode": "Слухати епізод", - "ButtonPlaying": "Відтворюється", "ButtonPlaylists": "Списки відтворення", "ButtonRead": "Читати", "ButtonReadLess": "Читати менше", diff --git a/strings/vi-vn.json b/strings/vi-vn.json index 0f5d320e..f62be687 100644 --- a/strings/vi-vn.json +++ b/strings/vi-vn.json @@ -32,7 +32,6 @@ "ButtonOverride": "Bỏ Qua", "ButtonPause": "Tạm Dừng", "ButtonPlay": "Phát", - "ButtonPlaying": "Đang Phát", "ButtonPlaylists": "Danh Sách Phát", "ButtonRead": "Đọc", "ButtonRemove": "Xóa", diff --git a/strings/zh-cn.json b/strings/zh-cn.json index b6034d22..ad477280 100644 --- a/strings/zh-cn.json +++ b/strings/zh-cn.json @@ -35,7 +35,6 @@ "ButtonPause": "暂停", "ButtonPlay": "播放", "ButtonPlayEpisode": "播放剧集", - "ButtonPlaying": "正在播放", "ButtonPlaylists": "播放列表", "ButtonRead": "读取", "ButtonReadLess": "阅读较少", diff --git a/strings/zh_Hant.json b/strings/zh_Hant.json index cdbd600f..708e2e1f 100644 --- a/strings/zh_Hant.json +++ b/strings/zh_Hant.json @@ -34,7 +34,6 @@ "ButtonPause": "暫停", "ButtonPlay": "播放", "ButtonPlayEpisode": "播放劇集", - "ButtonPlaying": "正在播放", "ButtonPlaylists": "播放列表", "ButtonRead": "讀取", "ButtonRemove": "移除",