From e626ff850f0687e227df0fd26c336705c024b273 Mon Sep 17 00:00:00 2001 From: Snd-R <76580768+Snd-R@users.noreply.github.com> Date: Wed, 22 Dec 2021 05:03:04 +0300 Subject: [PATCH] feat: series and book files deletion closes #731 Co-authored-by: Gauthier Roebroeck --- komga-webui/src/components/Dialogs.vue | 68 +++++++ .../src/components/bars/MultiSelectBar.vue | 2 +- .../src/components/menus/BookActionsMenu.vue | 6 + .../components/menus/SeriesActionsMenu.vue | 6 + komga-webui/src/locales/en.json | 17 ++ .../src/services/komga-books.service.ts | 12 ++ .../src/services/komga-series.service.ts | 12 ++ komga-webui/src/store.ts | 30 +++ komga-webui/src/views/BrowseLibraries.vue | 4 + komga-webui/src/views/BrowseSeries.vue | 4 + .../gotson/komga/application/tasks/Task.kt | 13 +- .../komga/application/tasks/TaskHandler.kt | 16 ++ .../komga/application/tasks/TaskReceiver.kt | 12 +- .../persistence/ThumbnailSeriesRepository.kt | 1 + .../komga/domain/service/BookLifecycle.kt | 24 +++ .../komga/domain/service/SeriesLifecycle.kt | 25 +++ .../infrastructure/jooq/ThumbnailSeriesDao.kt | 7 + .../interfaces/api/rest/BookController.kt | 12 ++ .../interfaces/api/rest/SeriesController.kt | 13 ++ .../komga/domain/service/BookLifecycleTest.kt | 138 ++++++++++++++ .../domain/service/SeriesLifecycleTest.kt | 179 +++++++++++++++++- 21 files changed, 596 insertions(+), 5 deletions(-) diff --git a/komga-webui/src/components/Dialogs.vue b/komga-webui/src/components/Dialogs.vue index 339db3480..0d106dca3 100644 --- a/komga-webui/src/components/Dialogs.vue +++ b/komga-webui/src/components/Dialogs.vue @@ -70,6 +70,26 @@ :series="updateSeries" /> + + + + @@ -224,6 +244,20 @@ export default Vue.extend({ updateBulkBooks(): BookDto[] { return this.$store.state.updateBulkBooks }, + deleteBookDialog: { + get(): boolean { + return this.$store.state.deleteBookDialog + }, + set(val) { + this.$store.dispatch('dialogDeleteBookDisplay', val) + }, + }, + booksToDelete(): BookDto | BookDto[] { + return this.$store.state.deleteBooks + }, + booksToDeleteSingle(): boolean { + return !Array.isArray(this.booksToDelete) + }, // series updateSeriesDialog: { get(): boolean { @@ -236,6 +270,20 @@ export default Vue.extend({ updateSeries(): SeriesDto | SeriesDto[] { return this.$store.state.updateSeries }, + deleteSeriesDialog: { + get(): boolean { + return this.$store.state.deleteSeriesDialog + }, + set(val) { + this.$store.dispatch('dialogDeleteSeriesDisplay', val) + }, + }, + seriesToDelete(): SeriesDto | SeriesDto[] { + return this.$store.state.deleteSeries + }, + seriesToDeleteSingle(): boolean { + return !Array.isArray(this.seriesToDelete) + }, }, methods: { async deleteLibrary() { @@ -265,6 +313,26 @@ export default Vue.extend({ } } }, + async deleteSeries() { + const toUpdate = (this.seriesToDeleteSingle ? [this.seriesToDelete] : this.seriesToDelete) as SeriesDto[] + for (const b of toUpdate) { + try { + await this.$komgaSeries.deleteSeries(b.id) + } catch (e) { + this.$eventHub.$emit(ERROR, {message: e.message} as ErrorEvent) + } + } + }, + async deleteBooks() { + const toUpdate = (this.booksToDeleteSingle ? [this.booksToDelete] : this.booksToDelete) as BookDto[] + for (const b of toUpdate) { + try { + await this.$komgaBooks.deleteBook(b.id) + } catch (e) { + this.$eventHub.$emit(ERROR, {message: e.message} as ErrorEvent) + } + } + }, }, }) diff --git a/komga-webui/src/components/bars/MultiSelectBar.vue b/komga-webui/src/components/bars/MultiSelectBar.vue index 72089f1f1..aeed951b5 100644 --- a/komga-webui/src/components/bars/MultiSelectBar.vue +++ b/komga-webui/src/components/bars/MultiSelectBar.vue @@ -79,7 +79,7 @@ - +