diff --git a/src/main/java/run/halo/app/content/permalinks/PostPermalinkPolicy.java b/src/main/java/run/halo/app/content/permalinks/PostPermalinkPolicy.java index 15730bd02..0df955849 100644 --- a/src/main/java/run/halo/app/content/permalinks/PostPermalinkPolicy.java +++ b/src/main/java/run/halo/app/content/permalinks/PostPermalinkPolicy.java @@ -5,6 +5,7 @@ import java.text.NumberFormat; import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; +import java.util.Objects; import java.util.Properties; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; @@ -53,6 +54,10 @@ public class PostPermalinkPolicy implements PermalinkPolicy, PermalinkWatc @Override public void onPermalinkAdd(Post post) { + if (!post.isPublished() || Objects.equals(true, post.getSpec().getDeleted())) { + return; + } + // publish when post is published and not deleted applicationContext.publishEvent(new PermalinkIndexAddCommand(this, getLocator(post), post.getStatusOrDefault().getPermalink())); } diff --git a/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java b/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java index dd9325012..69b6f7af6 100644 --- a/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java +++ b/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java @@ -61,11 +61,6 @@ public class PostReconciler implements Reconciler { cleanUpResourcesAndRemoveFinalizer(request.name()); return; } - if (Objects.equals(true, post.getSpec().getDeleted())) { - // remove permalink from permalink indexer - postPermalinkPolicy.onPermalinkDelete(post); - return; - } addFinalizerIfNecessary(post); reconcileMetadata(request.name()); @@ -110,9 +105,7 @@ public class PostReconciler implements Reconciler { post.getStatusOrDefault() .setPermalink(postPermalinkPolicy.permalink(post)); - if (isPublished(post)) { - postPermalinkPolicy.onPermalinkAdd(post); - } + postPermalinkPolicy.onPermalinkAdd(post); Post.PostStatus status = post.getStatusOrDefault(); if (status.getPhase() == null) { diff --git a/src/main/java/run/halo/app/core/extension/reconciler/SinglePageReconciler.java b/src/main/java/run/halo/app/core/extension/reconciler/SinglePageReconciler.java index 6e51ca0ac..744f76712 100644 --- a/src/main/java/run/halo/app/core/extension/reconciler/SinglePageReconciler.java +++ b/src/main/java/run/halo/app/core/extension/reconciler/SinglePageReconciler.java @@ -71,12 +71,6 @@ public class SinglePageReconciler implements Reconciler { cleanUpResourcesAndRemoveFinalizer(request.name()); return; } - - if (Objects.equals(true, singlePage.getSpec().getDeleted())) { - // remove permalink from permalink indexer - permalinkOnDelete(singlePage); - return; - } addFinalizerIfNecessary(oldPage); reconcileStatus(request.name()); @@ -167,6 +161,9 @@ public class SinglePageReconciler implements Reconciler { } private void permalinkOnAdd(SinglePage singlePage) { + if (!singlePage.isPublished() || Objects.equals(true, singlePage.getSpec().getDeleted())) { + return; + } ExtensionLocator locator = new ExtensionLocator(GVK, singlePage.getMetadata().getName(), singlePage.getSpec().getSlug()); applicationContext.publishEvent(new PermalinkIndexAddCommand(this, locator, @@ -182,9 +179,7 @@ public class SinglePageReconciler implements Reconciler { permalink = StringUtils.prependIfMissing(permalink, "/"); singlePage.getStatusOrDefault() .setPermalink(permalink); - if (isPublished(singlePage)) { - permalinkOnAdd(singlePage); - } + permalinkOnAdd(singlePage); SinglePage.SinglePageSpec spec = singlePage.getSpec(); SinglePage.SinglePageStatus status = singlePage.getStatusOrDefault(); diff --git a/src/test/java/run/halo/app/core/extension/reconciler/PostReconcilerTest.java b/src/test/java/run/halo/app/core/extension/reconciler/PostReconcilerTest.java index b43242307..25852c049 100644 --- a/src/test/java/run/halo/app/core/extension/reconciler/PostReconcilerTest.java +++ b/src/test/java/run/halo/app/core/extension/reconciler/PostReconcilerTest.java @@ -71,7 +71,7 @@ class PostReconcilerTest { verify(client, times(3)).update(captor.capture()); verify(postPermalinkPolicy, times(1)).permalink(any()); - verify(postPermalinkPolicy, times(0)).onPermalinkAdd(any()); + verify(postPermalinkPolicy, times(1)).onPermalinkAdd(any()); verify(postPermalinkPolicy, times(1)).onPermalinkDelete(any()); verify(postPermalinkPolicy, times(0)).onPermalinkUpdate(any()); diff --git a/src/test/java/run/halo/app/theme/finders/impl/PostFinderImplTest.java b/src/test/java/run/halo/app/theme/finders/impl/PostFinderImplTest.java index 03c93ec88..1d1c681fb 100644 --- a/src/test/java/run/halo/app/theme/finders/impl/PostFinderImplTest.java +++ b/src/test/java/run/halo/app/theme/finders/impl/PostFinderImplTest.java @@ -31,6 +31,7 @@ import run.halo.app.theme.finders.ContributorFinder; import run.halo.app.theme.finders.TagFinder; import run.halo.app.theme.finders.vo.ContentVo; import run.halo.app.theme.finders.vo.PostArchiveVo; +import run.halo.app.theme.finders.vo.PostArchiveYearMonthVo; /** * Tests for {@link PostFinderImpl}. @@ -106,11 +107,10 @@ class PostFinderImplTest { assertThat(items.size()).isEqualTo(2); assertThat(items.get(0).getYear()).isEqualTo("2022"); - assertThat(items.get(0).getMonths().size()).isEqualTo(2); - assertThat(items.get(0).getMonths().get(0).getMonth()).isEqualTo("10"); - assertThat(items.get(0).getMonths().get(1).getMonth()).isEqualTo("12"); - assertThat(items.get(0).getMonths().get(1).getPosts().size()).isEqualTo(1); - assertThat(items.get(0).getMonths().get(1).getPosts().size()).isEqualTo(1); + assertThat(items.get(0).getMonths().size()).isEqualTo(1); + List months = items.get(0).getMonths(); + assertThat(months.get(0).getMonth()).isEqualTo("12"); + assertThat(months.get(0).getPosts()).hasSize(2); assertThat(items.get(1).getYear()).isEqualTo("2021"); assertThat(items.get(1).getMonths()).hasSize(1); @@ -177,8 +177,8 @@ class PostFinderImplTest { post2.getMetadata().setCreationTimestamp(Instant.now()); Post post3 = post(3); - post2.getSpec().setPublished(true); - post2.getSpec().setPublishTime(Instant.parse("2022-12-03T00:00:00Z")); + post3.getSpec().setPublished(true); + post3.getSpec().setPublishTime(Instant.parse("2022-12-03T00:00:00Z")); post3.getMetadata().setCreationTimestamp(Instant.now()); return List.of(post1, post2, post3); }