diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/CategoryReconciler.java b/application/src/main/java/run/halo/app/core/extension/reconciler/CategoryReconciler.java index 498757e9e..d4abf4862 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/CategoryReconciler.java +++ b/application/src/main/java/run/halo/app/core/extension/reconciler/CategoryReconciler.java @@ -42,6 +42,7 @@ public class CategoryReconciler implements Reconciler { .ifPresent(category -> { if (ExtensionUtil.isDeleted(category)) { if (removeFinalizers(category.getMetadata(), Set.of(FINALIZER_NAME))) { + refreshHiddenState(category, false); client.update(category); } return; @@ -50,20 +51,24 @@ public class CategoryReconciler implements Reconciler { populatePermalinkPattern(category); populatePermalink(category); - checkHideFromListState(category); + checkHiddenState(category); client.update(category); }); return Result.doNotRetry(); } - /** - * TODO move this logic to before-create/update hook in the future see {@code gh-4343}. - */ - private void checkHideFromListState(Category category) { + private void checkHiddenState(Category category) { final boolean hidden = categoryService.isCategoryHidden(category.getMetadata().getName()) .blockOptional() .orElse(false); + refreshHiddenState(category, hidden); + } + + /** + * TODO move this logic to before-create/update hook in the future see {@code gh-4343}. + */ + private void refreshHiddenState(Category category, boolean hidden) { category.getSpec().setHideFromList(hidden); if (isHiddenStateChanged(category)) { publishHiddenStateChangeEvent(category); diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java b/application/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java index 2c36d022b..55f8f28b7 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java +++ b/application/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java @@ -28,6 +28,7 @@ import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; +import run.halo.app.content.CategoryService; import run.halo.app.content.ContentWrapper; import run.halo.app.content.NotificationReasonConst; import run.halo.app.content.PostService; @@ -83,6 +84,7 @@ public class PostReconciler implements Reconciler { private final PostPermalinkPolicy postPermalinkPolicy; private final CounterService counterService; private final CommentService commentService; + private final CategoryService categoryService; private final ApplicationEventPublisher eventPublisher; private final NotificationCenter notificationCenter; @@ -185,6 +187,8 @@ public class PostReconciler implements Reconciler { status.setInProgress( !StringUtils.equals(headSnapshot, post.getSpec().getReleaseSnapshot())); + computeHiddenState(post); + // version + 1 is required to truly equal version // as a version will be incremented after the update status.setObservedVersion(post.getMetadata().getVersion() + 1); @@ -196,6 +200,19 @@ public class PostReconciler implements Reconciler { return Result.doNotRetry(); } + private void computeHiddenState(Post post) { + var categories = post.getSpec().getCategories(); + if (categories == null) { + post.getStatusOrDefault().setHideFromList(false); + return; + } + var hidden = categories.stream() + .anyMatch(categoryName -> categoryService.isCategoryHidden(categoryName) + .blockOptional().orElse(false) + ); + post.getStatusOrDefault().setHideFromList(hidden); + } + private void populateLabels(Post post, Set events) { var labels = nullSafeLabels(post); labels.put(Post.DELETED_LABEL, String.valueOf(isTrue(post.getSpec().getDeleted())));