From 30f21c50abae3aee9983ef8ff0f8249e581204bd Mon Sep 17 00:00:00 2001 From: johnniang Date: Mon, 6 May 2019 19:01:18 +0800 Subject: [PATCH] Return post summary for listing --- .../app/service/impl/BasePostServiceImpl.java | 31 +++++++++++++++++-- .../app/service/impl/PostServiceImpl.java | 10 ++++-- .../app/service/impl/SheetServiceImpl.java | 6 ++-- .../run/halo/app/utils/MarkdownUtils.java | 26 +++++++++++++++- 4 files changed, 66 insertions(+), 7 deletions(-) diff --git a/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java b/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java index ee920d027..bb28f1cf0 100644 --- a/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java @@ -7,6 +7,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import run.halo.app.exception.AlreadyExistsException; @@ -17,7 +18,9 @@ import run.halo.app.model.dto.post.BasePostMinimalDTO; import run.halo.app.model.dto.post.BasePostSimpleDTO; import run.halo.app.model.entity.BasePost; import run.halo.app.model.enums.PostStatus; +import run.halo.app.model.properties.PostProperties; import run.halo.app.repository.base.BasePostRepository; +import run.halo.app.service.OptionService; import run.halo.app.service.base.AbstractCrudService; import run.halo.app.service.base.BasePostService; import run.halo.app.utils.DateUtils; @@ -44,9 +47,13 @@ public abstract class BasePostServiceImpl extends Abstrac private final BasePostRepository basePostRepository; - public BasePostServiceImpl(BasePostRepository basePostRepository) { + private final OptionService optionService; + + public BasePostServiceImpl(BasePostRepository basePostRepository, + OptionService optionService) { super(basePostRepository); this.basePostRepository = basePostRepository; + this.optionService = optionService; } @Override @@ -264,7 +271,14 @@ public abstract class BasePostServiceImpl extends Abstrac public BasePostSimpleDTO convertToSimple(POST post) { Assert.notNull(post, "Post must not be null"); - return new BasePostSimpleDTO().convertFrom(post); + BasePostSimpleDTO basePostSimpleDTO = new BasePostSimpleDTO().convertFrom(post); + + // Set summary + if (StringUtils.isBlank(basePostSimpleDTO.getSummary())) { + basePostSimpleDTO.setSummary(convertToSummary(post.getOriginalContent())); + } + + return basePostSimpleDTO; } @Override @@ -331,4 +345,17 @@ public abstract class BasePostServiceImpl extends Abstrac throw new AlreadyExistsException("The post url " + post.getUrl() + " has been exist"); } } + + @NonNull + protected String convertToSummary(@Nullable String markdownContent) { + // Render text content + String textContent = MarkdownUtils.renderText(markdownContent); + + // Get summary length + Integer summaryLength = optionService.getByPropertyOrDefault(PostProperties.SUMMARY_LENGTH, Integer.class, 150); + + // Set summary + return StringUtils.substring(textContent, 0, summaryLength); + } + } diff --git a/src/main/java/run/halo/app/service/impl/PostServiceImpl.java b/src/main/java/run/halo/app/service/impl/PostServiceImpl.java index 64004aac2..93516b0fb 100644 --- a/src/main/java/run/halo/app/service/impl/PostServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/PostServiceImpl.java @@ -67,8 +67,9 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe PostTagService postTagService, PostCategoryService postCategoryService, PostCommentService postCommentService, - ApplicationEventPublisher eventPublisher) { - super(postRepository); + ApplicationEventPublisher eventPublisher, + OptionService optionService) { + super(postRepository, optionService); this.postRepository = postRepository; this.tagService = tagService; this.categoryService = categoryService; @@ -333,6 +334,11 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe return postPage.map(post -> { PostListVO postListVO = new PostListVO().convertFrom(post); + if (StringUtils.isBlank(postListVO.getSummary())) { + // Set summary + postListVO.setSummary(convertToSummary(post.getOriginalContent())); + } + Optional.ofNullable(tagListMap.get(post.getId())).orElseGet(LinkedList::new); // Set tags diff --git a/src/main/java/run/halo/app/service/impl/SheetServiceImpl.java b/src/main/java/run/halo/app/service/impl/SheetServiceImpl.java index 5ccbe1190..5ea62d187 100644 --- a/src/main/java/run/halo/app/service/impl/SheetServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/SheetServiceImpl.java @@ -10,6 +10,7 @@ import run.halo.app.model.entity.Sheet; import run.halo.app.model.enums.PostStatus; import run.halo.app.model.vo.SheetListVO; import run.halo.app.repository.SheetRepository; +import run.halo.app.service.OptionService; import run.halo.app.service.SheetCommentService; import run.halo.app.service.SheetService; import run.halo.app.utils.ServiceUtils; @@ -35,8 +36,9 @@ public class SheetServiceImpl extends BasePostServiceImpl implements Shee public SheetServiceImpl(SheetRepository sheetRepository, ApplicationEventPublisher eventPublisher, - SheetCommentService sheetCommentService) { - super(sheetRepository); + SheetCommentService sheetCommentService, + OptionService optionService) { + super(sheetRepository, optionService); this.sheetRepository = sheetRepository; this.eventPublisher = eventPublisher; this.sheetCommentService = sheetCommentService; diff --git a/src/main/java/run/halo/app/utils/MarkdownUtils.java b/src/main/java/run/halo/app/utils/MarkdownUtils.java index 5ad0c6bf2..acd60e4f3 100644 --- a/src/main/java/run/halo/app/utils/MarkdownUtils.java +++ b/src/main/java/run/halo/app/utils/MarkdownUtils.java @@ -1,6 +1,6 @@ package run.halo.app.utils; -import run.halo.app.model.support.HaloConst; +import org.apache.commons.lang3.StringUtils; import org.commonmark.Extension; import org.commonmark.ext.front.matter.YamlFrontMatterExtension; import org.commonmark.ext.front.matter.YamlFrontMatterVisitor; @@ -8,6 +8,10 @@ import org.commonmark.ext.gfm.tables.TablesExtension; import org.commonmark.node.Node; import org.commonmark.parser.Parser; import org.commonmark.renderer.html.HtmlRenderer; +import org.commonmark.renderer.text.TextContentRenderer; +import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; +import run.halo.app.model.support.HaloConst; import java.util.Collections; import java.util.List; @@ -42,6 +46,11 @@ public class MarkdownUtils { */ private static final HtmlRenderer RENDERER = HtmlRenderer.builder().extensions(EXTENSIONS_YAML).extensions(EXTENSIONS_TABLE).build(); + /** + * Render text content + */ + private static final TextContentRenderer TEXT_CONTENT_RENDERER = TextContentRenderer.builder().extensions(EXTENSIONS_YAML).extensions(EXTENSIONS_TABLE).build(); + /** * Render Markdown content * @@ -67,6 +76,21 @@ public class MarkdownUtils { return renderContent; } + /** + * Render text content. + * + * @param markdownContent markdown content + * @return text content or empty string if markdown content is blank + */ + @NonNull + public static String renderText(@Nullable String markdownContent) { + if (StringUtils.isBlank(markdownContent)) { + return ""; + } + + return TEXT_CONTENT_RENDERER.render(PARSER.parse(markdownContent)); + } + /** * Get front-matter *