mirror of https://github.com/halo-dev/halo
chore: provide post content retrieval bean for plugins (#5981)
#### What type of PR is this? /kind improvement /area core /area plugin /milestone 2.16.x #### What this PR does / why we need it: 为插件提供文章内容获取的 bean 以简化文章内容获取 #### Which issue(s) this PR fixes: Fixes # #### Does this PR introduce a user-facing change? ```release-note 为插件提供文章内容获取的 Bean ```pull/5900/head
parent
9ec608be3b
commit
cb2138580c
|
@ -0,0 +1,15 @@
|
||||||
|
package run.halo.app.content;
|
||||||
|
|
||||||
|
import reactor.core.publisher.Flux;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
public interface PostContentService {
|
||||||
|
|
||||||
|
Mono<ContentWrapper> getHeadContent(String postName);
|
||||||
|
|
||||||
|
Mono<ContentWrapper> getReleaseContent(String postName);
|
||||||
|
|
||||||
|
Mono<ContentWrapper> getSpecifiedContent(String postName, String snapshotName);
|
||||||
|
|
||||||
|
Flux<String> listSnapshots(String postName);
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
package run.halo.app.content;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import reactor.core.publisher.Flux;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
import run.halo.app.core.extension.content.Post;
|
||||||
|
import run.halo.app.extension.ReactiveExtensionClient;
|
||||||
|
import run.halo.app.extension.Ref;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides ability to get post content for the specified post.
|
||||||
|
*
|
||||||
|
* @author guqing
|
||||||
|
* @since 2.16.0
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class PostContentServiceImpl extends AbstractContentService implements PostContentService {
|
||||||
|
private final ReactiveExtensionClient client;
|
||||||
|
|
||||||
|
public PostContentServiceImpl(ReactiveExtensionClient client) {
|
||||||
|
super(client);
|
||||||
|
this.client = client;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Mono<ContentWrapper> getHeadContent(String postName) {
|
||||||
|
return client.get(Post.class, postName)
|
||||||
|
.flatMap(post -> {
|
||||||
|
var headSnapshot = post.getSpec().getHeadSnapshot();
|
||||||
|
return super.getContent(headSnapshot, post.getSpec().getBaseSnapshot());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Mono<ContentWrapper> getReleaseContent(String postName) {
|
||||||
|
return client.get(Post.class, postName)
|
||||||
|
.flatMap(post -> {
|
||||||
|
var releaseSnapshot = post.getSpec().getReleaseSnapshot();
|
||||||
|
return super.getContent(releaseSnapshot, post.getSpec().getBaseSnapshot());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Mono<ContentWrapper> getSpecifiedContent(String postName, String snapshotName) {
|
||||||
|
return client.get(Post.class, postName)
|
||||||
|
.flatMap(post -> {
|
||||||
|
var baseSnapshot = post.getSpec().getBaseSnapshot();
|
||||||
|
return super.getContent(snapshotName, baseSnapshot);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Flux<String> listSnapshots(String postName) {
|
||||||
|
return client.get(Post.class, postName)
|
||||||
|
.flatMapMany(page -> listSnapshotsBy(Ref.of(page)))
|
||||||
|
.map(snapshot -> snapshot.getMetadata().getName());
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,7 @@ package run.halo.app.plugin;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.support.GenericApplicationContext;
|
import org.springframework.context.support.GenericApplicationContext;
|
||||||
import org.springframework.security.web.server.context.ServerSecurityContextRepository;
|
import org.springframework.security.web.server.context.ServerSecurityContextRepository;
|
||||||
|
import run.halo.app.content.PostContentService;
|
||||||
import run.halo.app.core.extension.service.AttachmentService;
|
import run.halo.app.core.extension.service.AttachmentService;
|
||||||
import run.halo.app.extension.DefaultSchemeManager;
|
import run.halo.app.extension.DefaultSchemeManager;
|
||||||
import run.halo.app.extension.ExtensionClient;
|
import run.halo.app.extension.ExtensionClient;
|
||||||
|
@ -53,6 +54,8 @@ public enum SharedApplicationContextFactory {
|
||||||
rootContext.getBean(NotificationCenter.class));
|
rootContext.getBean(NotificationCenter.class));
|
||||||
beanFactory.registerSingleton("externalLinkProcessor",
|
beanFactory.registerSingleton("externalLinkProcessor",
|
||||||
rootContext.getBean(ExternalLinkProcessor.class));
|
rootContext.getBean(ExternalLinkProcessor.class));
|
||||||
|
beanFactory.registerSingleton("postContentService",
|
||||||
|
rootContext.getBean(PostContentService.class));
|
||||||
// TODO add more shared instance here
|
// TODO add more shared instance here
|
||||||
|
|
||||||
sharedContext.refresh();
|
sharedContext.refresh();
|
||||||
|
|
Loading…
Reference in New Issue