[gitlab] better presentation for system discussions in timeline

GitOrigin-RevId: 31b2df577246a56c9144f334b5ce195a95d16bc4
This commit is contained in:
Ivan Semenov
2023-01-13 19:07:01 +01:00
committed by intellij-monorepo-bot
parent 8f86e85ce5
commit 92e1b8b39a
3 changed files with 38 additions and 3 deletions

View File

@@ -57,5 +57,7 @@
<orderEntry type="module" module-name="intellij.vcs.git" />
<orderEntry type="module" module-name="intellij.platform.vcs.log.impl" />
<orderEntry type="module" module-name="intellij.platform.vcs.impl" />
<orderEntry type="library" name="jetbrains.markdown" level="project" />
<orderEntry type="module" module-name="intellij.platform.markdown.utils" />
</component>
</module>

View File

@@ -9,6 +9,7 @@ import com.intellij.collaboration.ui.codereview.CodeReviewChatItemUIUtil
import com.intellij.collaboration.ui.codereview.timeline.StatusMessageComponentFactory
import com.intellij.collaboration.ui.codereview.timeline.StatusMessageType
import com.intellij.collaboration.ui.icon.IconsProvider
import com.intellij.openapi.diagnostic.thisLogger
import com.intellij.openapi.editor.colors.EditorColorsManager
import com.intellij.openapi.util.text.HtmlBuilder
import com.intellij.openapi.util.text.HtmlChunk
@@ -25,6 +26,7 @@ import org.jetbrains.annotations.Nls
import org.jetbrains.plugins.gitlab.api.dto.*
import org.jetbrains.plugins.gitlab.mergerequest.data.GitLabMergeRequestTimelineItem
import org.jetbrains.plugins.gitlab.mergerequest.ui.timeline.GitLabMergeRequestTimelineViewModel.LoadingState
import org.jetbrains.plugins.gitlab.ui.GitLabUIUtil
import org.jetbrains.plugins.gitlab.util.GitLabBundle
import java.util.*
import javax.swing.JComponent
@@ -95,11 +97,27 @@ object GitLabMergeRequestTimelineComponentFactory {
private fun createDiscussionContent(item: GitLabMergeRequestTimelineItem.Discussion): JComponent {
val firstNote = item.discussion.notes.first()
return if (firstNote.system) {
StatusMessageComponentFactory.create(SimpleHtmlPane(firstNote.body))
if (firstNote.system) {
val body = firstNote.body
if (body.contains("Compare with previous version")) {
try {
val lines = body.lines()
val title = lines[0]
val commits = lines[2]
return VerticalListPanel().apply {
add(SimpleHtmlPane(title))
add(StatusMessageComponentFactory.create(SimpleHtmlPane(commits)))
}
}
catch (e: Exception) {
thisLogger().warn("Error occurred while parsing the note with added commits", e)
}
}
return StatusMessageComponentFactory.create(SimpleHtmlPane(GitLabUIUtil.convertToHtml(body)))
}
else {
SimpleHtmlPane(firstNote.body)
return SimpleHtmlPane(GitLabUIUtil.convertToHtml(firstNote.body))
}
}

View File

@@ -0,0 +1,15 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.plugins.gitlab.ui
import com.intellij.markdown.utils.MarkdownToHtmlConverter
import com.intellij.openapi.util.NlsSafe
import org.intellij.markdown.flavours.gfm.GFMFlavourDescriptor
object GitLabUIUtil {
private val mdConverter = MarkdownToHtmlConverter(GFMFlavourDescriptor())
internal fun convertToHtml(markdownSource: String): @NlsSafe String {
return mdConverter.convertMarkdownToHtml(markdownSource)
}
}