diff --git a/.devcontainer/dev.js b/.devcontainer/dev.js index 0d113a3e..b5f6714e 100644 --- a/.devcontainer/dev.js +++ b/.devcontainer/dev.js @@ -5,5 +5,6 @@ module.exports.config = { ConfigPath: Path.resolve('config'), MetadataPath: Path.resolve('metadata'), FFmpegPath: '/usr/bin/ffmpeg', - FFProbePath: '/usr/bin/ffprobe' + FFProbePath: '/usr/bin/ffprobe', + SkipBinariesCheck: false } \ No newline at end of file diff --git a/client/components/app/BookShelfToolbar.vue b/client/components/app/BookShelfToolbar.vue index bd31768b..9064c914 100644 --- a/client/components/app/BookShelfToolbar.vue +++ b/client/components/app/BookShelfToolbar.vue @@ -98,6 +98,9 @@ @@ -183,6 +186,30 @@ export default { } ] }, + authorSortItems() { + return [ + { + text: this.$strings.LabelAuthorFirstLast, + value: 'name' + }, + { + text: this.$strings.LabelAuthorLastFirst, + value: 'lastFirst' + }, + { + text: this.$strings.LabelNumberOfBooks, + value: 'numBooks' + }, + { + text: this.$strings.LabelAddedAt, + value: 'addedAt' + }, + { + text: this.$strings.LabelUpdatedAt, + value: 'updatedAt' + } + ] + }, userIsAdminOrUp() { return this.$store.getters['user/getIsAdminOrUp'] }, @@ -455,6 +482,9 @@ export default { updateCollapseBookSeries() { this.saveSettings() }, + updateAuthorSort() { + this.saveSettings() + }, saveSettings() { this.$store.dispatch('user/updateUserSettings', this.settings) }, diff --git a/client/components/controls/LibraryFilterSelect.vue b/client/components/controls/LibraryFilterSelect.vue index 5ed4400b..04dd11af 100644 --- a/client/components/controls/LibraryFilterSelect.vue +++ b/client/components/controls/LibraryFilterSelect.vue @@ -368,9 +368,17 @@ export default { id: 'ebook', name: this.$strings.LabelHasEbook }, + { + id: 'no-ebook', + name: this.$strings.LabelMissingEbook + }, { id: 'supplementary', name: this.$strings.LabelHasSupplementaryEbook + }, + { + id: 'no-supplementary', + name: this.$strings.LabelMissingSupplementaryEbook } ] }, diff --git a/client/components/modals/item/tabs/Match.vue b/client/components/modals/item/tabs/Match.vue index 7051a444..72aa7116 100644 --- a/client/components/modals/item/tabs/Match.vue +++ b/client/components/modals/item/tabs/Match.vue @@ -49,8 +49,8 @@

Current

- - + +
diff --git a/client/components/modals/libraries/EditModal.vue b/client/components/modals/libraries/EditModal.vue index 2a68dd63..27e3ec6d 100644 --- a/client/components/modals/libraries/EditModal.vue +++ b/client/components/modals/libraries/EditModal.vue @@ -127,6 +127,7 @@ export default { skipMatchingMediaWithIsbn: false, autoScanCronExpression: null, hideSingleBookSeries: false, + onlyShowLaterBooksInContinueSeries: false, metadataPrecedence: ['folderStructure', 'audioMetatags', 'nfoFile', 'txtFiles', 'opfFile', 'absMetadata'] } } diff --git a/client/components/modals/libraries/LibrarySettings.vue b/client/components/modals/libraries/LibrarySettings.vue index 4712d6a2..5a8a7a40 100644 --- a/client/components/modals/libraries/LibrarySettings.vue +++ b/client/components/modals/libraries/LibrarySettings.vue @@ -49,6 +49,17 @@ +
+
+ + +

+ {{ $strings.LabelSettingsOnlyShowLaterBooksInContinueSeries }} + info_outlined +

+
+
+
@@ -73,6 +84,7 @@ export default { skipMatchingMediaWithIsbn: false, audiobooksOnly: false, hideSingleBookSeries: false, + onlyShowLaterBooksInContinueSeries: false, podcastSearchRegion: 'us' } }, @@ -107,6 +119,7 @@ export default { skipMatchingMediaWithIsbn: !!this.skipMatchingMediaWithIsbn, audiobooksOnly: !!this.audiobooksOnly, hideSingleBookSeries: !!this.hideSingleBookSeries, + onlyShowLaterBooksInContinueSeries: !!this.onlyShowLaterBooksInContinueSeries, podcastSearchRegion: this.podcastSearchRegion } } @@ -121,6 +134,7 @@ export default { this.skipMatchingMediaWithIsbn = !!this.librarySettings.skipMatchingMediaWithIsbn this.audiobooksOnly = !!this.librarySettings.audiobooksOnly this.hideSingleBookSeries = !!this.librarySettings.hideSingleBookSeries + this.onlyShowLaterBooksInContinueSeries = !!this.librarySettings.onlyShowLaterBooksInContinueSeries this.podcastSearchRegion = this.librarySettings.podcastSearchRegion || 'us' } }, diff --git a/client/components/player/PlayerTrackBar.vue b/client/components/player/PlayerTrackBar.vue index 2f832785..3afc5d06 100644 --- a/client/components/player/PlayerTrackBar.vue +++ b/client/components/player/PlayerTrackBar.vue @@ -57,7 +57,6 @@ export default { }, watch: { duration: { - immediate: true, handler() { this.setChapterTicks() } @@ -205,10 +204,14 @@ export default { }, windowResize() { this.setTrackWidth() + this.setChapterTicks() + this.updatePlayedTrackWidth() + this.updateBufferTrack() } }, mounted() { this.setTrackWidth() + this.setChapterTicks() window.addEventListener('resize', this.windowResize) }, beforeDestroy() { diff --git a/client/components/ui/MultiSelect.vue b/client/components/ui/MultiSelect.vue index 2009b28d..516b062d 100644 --- a/client/components/ui/MultiSelect.vue +++ b/client/components/ui/MultiSelect.vue @@ -11,13 +11,13 @@ {{ item }} - +