From 27e151a5748d68aa256cac34b64845217b05bd14 Mon Sep 17 00:00:00 2001 From: guqing <38999863+guqing@users.noreply.github.com> Date: Wed, 28 Sep 2022 23:46:17 +0800 Subject: [PATCH] feat: add location for theme (#2484) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind improvement /area core /milestone 2.0 #### What this PR does / why we need it: 主题支持展示绝对路径位置 #### Which issue(s) this PR fixes: Fixes #2461 #### Special notes for your reviewer: /cc @halo-dev/sig-halo #### Does this PR introduce a user-facing change? ```release-note None ``` --- .../java/run/halo/app/core/extension/Theme.java | 7 +++++++ .../extension/reconciler/ThemeReconciler.java | 15 +++++++++++++++ .../extension/reconciler/ThemeReconcilerTest.java | 8 ++++---- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/main/java/run/halo/app/core/extension/Theme.java b/src/main/java/run/halo/app/core/extension/Theme.java index 3f3506751..1e6f2ec50 100644 --- a/src/main/java/run/halo/app/core/extension/Theme.java +++ b/src/main/java/run/halo/app/core/extension/Theme.java @@ -25,6 +25,8 @@ public class Theme extends AbstractExtension { @Schema(required = true) private ThemeSpec spec; + private ThemeStatus status; + @Data @ToString public static class ThemeSpec { @@ -69,6 +71,11 @@ public class Theme extends AbstractExtension { } } + @Data + public static class ThemeStatus { + private String location; + } + @Data @ToString public static class Author { diff --git a/src/main/java/run/halo/app/core/extension/reconciler/ThemeReconciler.java b/src/main/java/run/halo/app/core/extension/reconciler/ThemeReconciler.java index f8c4bac5e..9e3aa5149 100644 --- a/src/main/java/run/halo/app/core/extension/reconciler/ThemeReconciler.java +++ b/src/main/java/run/halo/app/core/extension/reconciler/ThemeReconciler.java @@ -47,10 +47,25 @@ public class ThemeReconciler implements Reconciler { reconcileThemeDeletion(theme); } themeSettingDefaultConfig(theme); + reconcileStatus(request.name()); }); return new Result(false, null); } + private void reconcileStatus(String name) { + client.fetch(Theme.class, name).ifPresent(theme -> { + Theme oldTheme = JsonUtils.deepCopy(theme); + if (theme.getStatus() == null) { + theme.setStatus(new Theme.ThemeStatus()); + } + Path themePath = themePathPolicy.generate(theme); + theme.getStatus().setLocation(themePath.toAbsolutePath().toString()); + if (!oldTheme.equals(theme)) { + client.update(theme); + } + }); + } + private void themeSettingDefaultConfig(Theme theme) { if (StringUtils.isBlank(theme.getSpec().getSettingName())) { return; diff --git a/src/test/java/run/halo/app/core/extension/reconciler/ThemeReconcilerTest.java b/src/test/java/run/halo/app/core/extension/reconciler/ThemeReconcilerTest.java index f8d25a44c..559560cf1 100644 --- a/src/test/java/run/halo/app/core/extension/reconciler/ThemeReconcilerTest.java +++ b/src/test/java/run/halo/app/core/extension/reconciler/ThemeReconcilerTest.java @@ -102,7 +102,7 @@ class ThemeReconcilerTest { themeReconciler.reconcile(new Reconciler.Request(metadata.getName())); - verify(extensionClient, times(2)).fetch(eq(Theme.class), eq(metadata.getName())); + verify(extensionClient, times(3)).fetch(eq(Theme.class), eq(metadata.getName())); verify(extensionClient, times(2)).fetch(eq(Setting.class), eq(themeSpec.getSettingName())); assertThat(Files.exists(testWorkDir)).isTrue(); @@ -133,7 +133,7 @@ class ThemeReconcilerTest { Reconciler.Result reconcile = themeReconciler.reconcile(new Reconciler.Request(metadata.getName())); assertThat(reconcile.reEnqueue()).isFalse(); - verify(extensionClient, times(1)).fetch(eq(Theme.class), eq(metadata.getName())); + verify(extensionClient, times(2)).fetch(eq(Theme.class), eq(metadata.getName())); // setting exists themeSpec.setSettingName("theme-test-setting"); @@ -142,9 +142,9 @@ class ThemeReconcilerTest { assertThat(theme.getSpec().getConfigMapName()).isNull(); ArgumentCaptor captor = ArgumentCaptor.forClass(Theme.class); themeReconciler.reconcile(new Reconciler.Request(metadata.getName())); - verify(extensionClient, times(3)) + verify(extensionClient, times(5)) .fetch(eq(Theme.class), eq(metadata.getName())); - verify(extensionClient, times(1)) + verify(extensionClient, times(2)) .update(captor.capture()); Theme value = captor.getValue(); assertThat(value.getSpec().getConfigMapName()).isNotNull();