Skip to content

Commit bddbfa2

Browse files
committed
🐛 修复插件配置修改之后不生效的问题
之前由于错误的将 config 设置在构造函数中,并且将其进行了缓存,导致配置更新之后插件仍旧只能读取到旧数据。
1 parent 87e421c commit bddbfa2

4 files changed

Lines changed: 50 additions & 51 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
plugins {
2-
id "io.github.guqing.plugin-development" version "0.0.6-SNAPSHOT"
2+
id "io.github.guqing.plugin-development" version "0.0.8-SNAPSHOT"
33
id 'java'
44
}
55

src/main/java/run/halo/live2d/Live2dInitProcessor.java

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package run.halo.live2d;
22

33
import com.fasterxml.jackson.databind.JsonNode;
4+
45
import java.util.Objects;
6+
57
import lombok.extern.slf4j.Slf4j;
68
import org.springframework.stereotype.Component;
79
import org.thymeleaf.context.ITemplateContext;
@@ -26,11 +28,10 @@
2628
* 将在网站其他内容加载完成之后再进行初始化,尽量保证不阻塞页面运行。
2729
* </p>
2830
*
29-
* @see <a href="https://github.com/stevenjoezhang/live2d-widget">live2d-widget</a>
30-
*
3131
* @author LIlGG
32-
* @since 2022-11-30
3332
* @version 1.0.1
33+
* @see <a href="https://github.com/stevenjoezhang/live2d-widget">live2d-widget</a>
34+
* @since 2022-11-30
3435
*/
3536
@Component
3637
@Slf4j
@@ -52,10 +53,8 @@ public Live2dInitProcessor(Live2dSetting live2dSetting) {
5253
@Override
5354
public Mono<Void> process(ITemplateContext context, IModel model,
5455
IElementModelStructureHandler structureHandler) {
55-
return live2dSetting.getConfig().map(config -> {
56-
if (log.isDebugEnabled()) {
57-
log.debug("live2d config {}", config.toPrettyString());
58-
}
56+
return this.live2dSetting.getConfig().map(config -> {
57+
log.info("live2d config {}", config.toPrettyString());
5958
final IModelFactory modelFactory = context.getModelFactory();
6059
model.add(modelFactory.createText(live2dAutoloadScript(config)));
6160
return Mono.empty();
@@ -69,30 +68,30 @@ private CharSequence live2dAutoloadScript(JsonNode config) {
6968
loadTime = node.asText(LIVE2D_LOAD_TIME);
7069
}
7170
String template = """
72-
live2d.init("%1$s", %2$s)
73-
""".formatted(LIVE2D_SOURCE_PATH, config.toPrettyString());
71+
live2d.init("%1$s", %2$s)
72+
""".formatted(LIVE2D_SOURCE_PATH, config.toPrettyString());
7473
return """
75-
<script src="%1$sjs/live2d-autoload.min.js" %2$s></script>
76-
<script type="text/javascript">
77-
%3$s
78-
</script>
79-
""".formatted(LIVE2D_SOURCE_PATH, loadTime, loadLive2d(loadTime, template));
74+
<script src="%1$sjs/live2d-autoload.min.js" %2$s></script>
75+
<script type="text/javascript">
76+
%3$s
77+
</script>
78+
""".formatted(LIVE2D_SOURCE_PATH, loadTime, loadLive2d(loadTime, template));
8079
}
8180

8281
private CharSequence loadLive2d(String loadTime, String loadingScript) {
8382
String template;
8483
if (Objects.equals(loadTime, LIVE2D_LOAD_TIME)) {
8584
template = """
86-
document.addEventListener('DOMContentLoaded', () => {
87-
%s
88-
})
89-
""";
85+
document.addEventListener('DOMContentLoaded', () => {
86+
%s
87+
})
88+
""";
9089
} else {
9190
template = """
92-
windows.onload = function() {
93-
%s
94-
}
95-
""";
91+
window.onload = function() {
92+
%s
93+
}
94+
""";
9695
}
9796
return template.formatted(loadingScript);
9897
}

src/main/java/run/halo/live2d/Live2dSettingProcess.java

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
import com.fasterxml.jackson.databind.JsonNode;
44
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
55
import com.fasterxml.jackson.databind.node.ObjectNode;
6+
67
import java.util.Map;
78
import java.util.Optional;
9+
810
import lombok.extern.slf4j.Slf4j;
911
import org.springframework.stereotype.Component;
1012
import run.halo.app.plugin.SettingFetcher;
13+
1114
/**
1215
* Live2d 配置处理器
1316
*
@@ -25,36 +28,40 @@ public class Live2dSettingProcess extends JsonNodeFactory implements Live2dSetti
2528

2629
private final ThemeFetcher themeFetcher;
2730

28-
private final Map<String, JsonNode> settingMap;
31+
private final SettingFetcher settingFetcher;
2932

3033
private ObjectNode configNode;
3134

35+
private Map<String, JsonNode> settingMap;
36+
3237
public Live2dSettingProcess(SettingFetcher settingFetcher,
3338
ThemeFetcher themeFetcher) {
34-
this.settingMap = settingFetcher.getValues();
39+
this.settingFetcher = settingFetcher;
3540
this.themeFetcher = themeFetcher;
3641
initConfigNode();
3742
}
3843

39-
public void initConfigNode() {
44+
public ObjectNode initConfigNode() {
45+
this.settingMap = settingFetcher.getValues();
4046
this.configNode = new ObjectNode(this);
41-
this.settingMap.forEach((group, jsonNode) -> {
42-
JsonNode node = this.settingMap.get(group);
43-
if(log.isDebugEnabled()) {
47+
settingMap.forEach((group, jsonNode) -> {
48+
JsonNode node = settingMap.get(group);
49+
if (log.isDebugEnabled()) {
4450
log.debug("live2d config -> {} group save settingMap json {}", group, node.toPrettyString());
4551
}
4652
if (jsonNode instanceof ObjectNode) {
47-
this.configNode.setAll((ObjectNode) node);
53+
configNode.setAll((ObjectNode) node);
4854
}
4955
});
5056
// 移除不必要的参数
51-
this.configNode.remove("slots");
52-
setThemeLive2dTipsPath();
57+
configNode.remove("slots");
58+
setThemeLive2dTipsPath(configNode);
59+
return configNode;
5360
}
5461

55-
private void setThemeLive2dTipsPath() {
62+
private void setThemeLive2dTipsPath(ObjectNode configNode) {
5663
this.themeFetcher.getActiveThemeName().ifPresent(activeThemeName -> {
57-
this.configNode.put("themeTipsPath", THEME_TIPS_PATH_TEMPLATE.formatted(activeThemeName));
64+
configNode.put("themeTipsPath", THEME_TIPS_PATH_TEMPLATE.formatted(activeThemeName));
5865
});
5966
}
6067

@@ -65,9 +72,10 @@ public JsonNode getValue(String groupName, String key) {
6572

6673
@Override
6774
public Optional<JsonNode> getConfig() {
68-
if(log.isDebugEnabled()) {
69-
log.debug("live2d config -> {}", configNode.toPrettyString());
75+
initConfigNode();
76+
if (log.isDebugEnabled()) {
77+
log.debug("live2d config -> {}", this.configNode.toPrettyString());
7078
}
71-
return Optional.of(configNode);
79+
return Optional.of(this.configNode);
7280
}
7381
}
Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package run.halo.live2d;
22

33
import com.nimbusds.jose.util.JSONObjectUtils;
4+
45
import java.text.ParseException;
56
import java.util.HashMap;
67
import java.util.Map;
78
import java.util.Optional;
9+
810
import org.springframework.stereotype.Component;
911
import run.halo.app.core.extension.Theme;
1012
import run.halo.app.extension.ConfigMap;
@@ -20,16 +22,15 @@ public class ThemeFetcher {
2022

2123
private final ExtensionClient extensionClient;
2224

23-
private final Map<String, String> configMap;
24-
2525
public ThemeFetcher(ExtensionClient extensionClient) {
2626
this.extensionClient = extensionClient;
27-
this.configMap = extensionClient.fetch(ConfigMap.class, SystemSetting.SYSTEM_CONFIG)
28-
.map(ConfigMap::getData)
29-
.orElse(new HashMap<>());
3027
}
3128

3229
public Optional<String> getActiveThemeName() {
30+
final Map<String, String> configMap = this.extensionClient
31+
.fetch(ConfigMap.class, SystemSetting.SYSTEM_CONFIG)
32+
.map(ConfigMap::getData)
33+
.orElse(new HashMap<>());
3334
try {
3435
Map<String, Object> activeJson = JSONObjectUtils.parse(configMap.get("theme"));
3536
return Optional.ofNullable((String) activeJson.get("active"));
@@ -38,13 +39,4 @@ public Optional<String> getActiveThemeName() {
3839
}
3940
return Optional.empty();
4041
}
41-
42-
public Optional<Theme> getActiveTheme() {
43-
Optional<String> activeThemeNameOptional = getActiveThemeName();
44-
if (activeThemeNameOptional.isPresent()) {
45-
String activeThemeName = activeThemeNameOptional.get();
46-
return this.extensionClient.fetch(Theme.class, activeThemeName);
47-
}
48-
return Optional.empty();
49-
}
5042
}

0 commit comments

Comments
 (0)