From 4892945ddfc603bb3350b668010062beea51ac71 Mon Sep 17 00:00:00 2001 From: Gauthier Roebroeck Date: Thu, 6 Feb 2025 11:39:01 +0800 Subject: [PATCH] feat(webui): add user setting to blur unread posters Closes: #1549 --- komga-webui/src/components/ItemCard.vue | 15 +++ komga-webui/src/locales/en.json | 1 + .../src/plugins/komga-settings.plugin.ts | 4 +- komga-webui/src/router.ts | 5 + komga-webui/src/types/komga-clientsettings.ts | 3 +- komga-webui/src/views/HomeView.vue | 4 + komga-webui/src/views/LoginView.vue | 3 +- komga-webui/src/views/StartupView.vue | 3 +- komga-webui/src/views/UISettings.vue | 23 +---- komga-webui/src/views/UIUserSettings.vue | 99 +++++++++++++++++++ 10 files changed, 136 insertions(+), 24 deletions(-) create mode 100644 komga-webui/src/views/UIUserSettings.vue diff --git a/komga-webui/src/components/ItemCard.vue b/komga-webui/src/components/ItemCard.vue index 038855011..ec8716791 100644 --- a/komga-webui/src/components/ItemCard.vue +++ b/komga-webui/src/components/ItemCard.vue @@ -14,6 +14,7 @@ aspect-ratio="0.7071" :contain="!isStretch" :position="isStretch ? 'top' : undefined" + :class="shouldBlurPoster ? 'blur' : undefined" @error="thumbnailError = true" @load="thumbnailError = false" > @@ -277,6 +278,12 @@ export default Vue.extend({ isStretch(): boolean { return this.$store.getters.getClientSettings[CLIENT_SETTING.WEBUI_POSTER_STRETCH]?.value === 'true' }, + isBlurUnread(): boolean { + return this.$store.getters.getClientSettings[CLIENT_SETTING.WEBUI_POSTER_BLUR_UNREAD]?.value === 'true' + }, + shouldBlurPoster(): boolean | undefined { + return (this.isUnread || this.allUnread) && this.isBlurUnread + }, canReadPages(): boolean { return this.$store.getters.mePageStreaming && this.computedItem.type() === ItemTypes.BOOK }, @@ -317,6 +324,10 @@ export default Vue.extend({ if (this.computedItem.type() === ItemTypes.SERIES) return (this.item as SeriesDto).booksUnreadCount + (this.item as SeriesDto).booksInProgressCount return undefined }, + allUnread(): boolean | undefined { + if (this.computedItem.type() === ItemTypes.SERIES) return (this.item as SeriesDto).booksCount == (this.item as SeriesDto).booksUnreadCount + return undefined + }, readProgressPercentage(): number { if (this.computedItem.type() === ItemTypes.BOOK) return getReadProgressPercentage(this.item as BookDto) return 0 @@ -385,6 +396,10 @@ export default Vue.extend({