in space-slack-sync/src/main/kotlin/org/jetbrains/spaceSlackSync/slack/SlackMessageParsing.kt [21:80]
suspend fun buildMessage(
slackClient: SlackClient,
slackDomain: String,
layoutBlocks: List<LayoutBlock>,
fields: List<Field>,
messageText: String?,
slackUserDataById: Map<String, SlackUserData>,
color: String?,
principalName: String?,
): ChatMessage {
val plainTextPart = buildString {
principalName?.let { append("**$it** says:\n") }
plainTextPart(layoutBlocks, slackClient, slackDomain, slackUserDataById, messageText)
}
val sectionBlocks = layoutBlocks.filterIsInstance<SectionBlock>()
return if (sectionBlocks.isNotEmpty() || fields.isNotEmpty()) {
message {
if (plainTextPart.isNotEmpty()) {
section {
text(plainTextPart, MessageStyle.PRIMARY)
}
}
val messageStyle = getMessageStyle(color)
sectionBlocks
.mapNotNull { it.fields }
.filter { it.isNotEmpty() }
.forEach { fields ->
section(style = messageStyle) {
fields {
fields.forEach { field ->
val text = convertMarkdown(field.text)
val newLineIndex = text.indexOf('\n')
if (newLineIndex != -1) {
val fieldName = text.substringBefore("\n")
val fieldValue = text.substringAfter("\n")
field(fieldName.take(64), fieldValue)
} else {
field("", text)
}
}
}
}
}
if (fields.isNotEmpty()) {
section(style = messageStyle) {
fields {
fields.forEach {
field(it.title.take(64), convertMarkdown(it.value))
}
}
}
}
}
} else {
ChatMessage.Text(plainTextPart)
}
}