From 2b238cccaf4f8997e9aeb6d9027cb82e82ac9717 Mon Sep 17 00:00:00 2001 From: Gauthier Roebroeck Date: Fri, 28 Jul 2023 16:03:06 +0800 Subject: [PATCH] feat(webui): oneshots handling --- komga-webui/src/components/FileImportRow.vue | 2 +- komga-webui/src/components/ItemCard.vue | 20 +- .../src/components/ReusableDialogs.vue | 21 +- komga-webui/src/components/SearchBox.vue | 9 +- .../src/components/bars/MultiSelectBar.vue | 8 +- .../components/dialogs/EditOneshotDialog.vue | 1128 +++++++++++++++++ .../components/dialogs/LibraryEditDialog.vue | 19 + .../components/dialogs/SeriesPickerDialog.vue | 6 +- .../components/menus/OneshotActionsMenu.vue | 111 ++ komga-webui/src/locales/en.json | 4 + komga-webui/src/router.ts | 6 + .../src/services/komga-libraries.service.ts | 2 +- .../src/services/komga-series.service.ts | 20 +- komga-webui/src/store.ts | 22 +- komga-webui/src/types/items.ts | 95 +- komga-webui/src/types/komga-books.ts | 1 + komga-webui/src/types/komga-libraries.ts | 3 + komga-webui/src/types/komga-series.ts | 8 +- komga-webui/src/views/BookReader.vue | 13 +- komga-webui/src/views/BrowseBook.vue | 19 +- komga-webui/src/views/BrowseCollection.vue | 30 +- komga-webui/src/views/BrowseLibraries.vue | 46 +- komga-webui/src/views/BrowseOneshot.vue | 796 ++++++++++++ komga-webui/src/views/BrowseReadList.vue | 26 +- komga-webui/src/views/BrowseSeries.vue | 6 +- komga-webui/src/views/DashboardView.vue | 49 +- komga-webui/src/views/DuplicateFiles.vue | 5 +- komga-webui/src/views/ImportBooks.vue | 2 +- komga-webui/src/views/MediaAnalysis.vue | 5 +- komga-webui/src/views/SearchView.vue | 44 +- 30 files changed, 2414 insertions(+), 112 deletions(-) create mode 100644 komga-webui/src/components/dialogs/EditOneshotDialog.vue create mode 100644 komga-webui/src/components/menus/OneshotActionsMenu.vue create mode 100644 komga-webui/src/views/BrowseOneshot.vue diff --git a/komga-webui/src/components/FileImportRow.vue b/komga-webui/src/components/FileImportRow.vue index 8bebfee3..a3758521 100644 --- a/komga-webui/src/components/FileImportRow.vue +++ b/komga-webui/src/components/FileImportRow.vue @@ -31,7 +31,7 @@ - + diff --git a/komga-webui/src/components/ItemCard.vue b/komga-webui/src/components/ItemCard.vue index ec19c3eb..efea3b8c 100644 --- a/komga-webui/src/components/ItemCard.vue +++ b/komga-webui/src/components/ItemCard.vue @@ -20,7 +20,7 @@
- @@ -72,11 +72,19 @@
- + - + @@ -128,7 +136,7 @@ - + @@ -166,10 +174,11 @@ import { } from '@/types/komga-sse' import {coverBase64} from '@/types/image' import {ReadListDto} from '@/types/komga-readlists' +import OneShotActionsMenu from '@/components/menus/OneshotActionsMenu.vue' export default Vue.extend({ name: 'ItemCard', - components: {BookActionsMenu, SeriesActionsMenu, CollectionActionsMenu, ReadListActionsMenu}, + components: {OneShotActionsMenu, BookActionsMenu, SeriesActionsMenu, CollectionActionsMenu, ReadListActionsMenu}, props: { item: { type: Object as () => BookDto | SeriesDto | CollectionDto | ReadListDto, @@ -291,6 +300,7 @@ export default Vue.extend({ }, isUnread(): boolean { if (this.computedItem.type() === ItemTypes.BOOK) return getReadProgress(this.item as BookDto) === ReadStatus.UNREAD + if (this.computedItem.type() === ItemTypes.SERIES && (this.item as SeriesDto).oneshot) return (this.item as SeriesDto).booksUnreadCount + (this.item as SeriesDto).booksInProgressCount > 0 return false }, unreadCount(): number | undefined { diff --git a/komga-webui/src/components/ReusableDialogs.vue b/komga-webui/src/components/ReusableDialogs.vue index ef5f1ebe..8b68924a 100644 --- a/komga-webui/src/components/ReusableDialogs.vue +++ b/komga-webui/src/components/ReusableDialogs.vue @@ -65,6 +65,11 @@ :books="updateBulkBooks" /> + + {{ data.item.metadata.title }} - {{ data.item.seriesTitle }} - {{ data.item.metadata.number }} + {{ data.item.seriesTitle }} - {{ + data.item.metadata.number + }} + {{ $t('searchbox.in_library', {library: getLibraryName(data.item)}) }} @@ -144,6 +147,10 @@ export default Vue.extend({ }) if (val.type === 'series') this.$router.push({name: 'browse-series', params: {seriesId: val.id}}) + else if (val.type === 'book' && val.oneshot) this.$router.push({ + name: 'browse-oneshot', + params: {seriesId: val.seriesId}, + }) else if (val.type === 'book') this.$router.push({name: 'browse-book', params: {bookId: val.id}}) else if (val.type === 'collection') this.$router.push({ name: 'browse-collection', diff --git a/komga-webui/src/components/bars/MultiSelectBar.vue b/komga-webui/src/components/bars/MultiSelectBar.vue index aeed951b..7596f653 100644 --- a/komga-webui/src/components/bars/MultiSelectBar.vue +++ b/komga-webui/src/components/bars/MultiSelectBar.vue @@ -43,7 +43,7 @@ - +