package net.lacolaco.smileessence.entity import twitter4j.* import java.util.* abstract class EntitySupport(status: twitter4j.EntitySupport) { open val mentions: List = extractMentions(status.userMentionEntities) open val hashtags: List = extractHashtags(status.hashtagEntities) open val mediaUrls: List = extractMediaUrls(status.mediaEntities) open val urlsExpanded: List = extractExpandedUrls(status.urlEntities) open val symbols: List = extractSymbols(status.symbolEntities) private fun extractMentions(entities: Array?) = entities?.map { it.screenName } ?: listOf() private fun extractSymbols(entities: Array?) = entities?.map { it.text } ?: listOf() private fun extractExpandedUrls(entities: Array?) = entities?.map { it.expandedURL } ?: listOf() private fun extractMediaUrls(entities: Array?) = entities?.map { when (it.type) { "photo" -> it.mediaURLHttps else -> it.expandedURL } } ?: listOf() private fun extractHashtags(entities: Array?) = entities?.map { it.text } ?: listOf() protected fun extractText(status: twitter4j.Status, expand: Boolean) = extractText(status, status.text, expand) protected fun extractText(status: twitter4j.DirectMessage, expand: Boolean) = extractText(status, status.text, expand) private fun extractText(status: twitter4j.EntitySupport, text: String, expand: Boolean): String { val set = TreeSet { a, b -> a.start - b.start } if (status.urlEntities != null) set += status.urlEntities if (status.mediaEntities != null) set += status.mediaEntities var t = text for (entity in set) { val newString = if (expand) entity.expandedURL else entity.displayURL t = t.replaceFirst(entity.text.toRegex(), newString) } return t } }