diff options
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/entity/EntitySupport.kt')
-rw-r--r-- | app/src/main/java/net/lacolaco/smileessence/entity/EntitySupport.kt | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/EntitySupport.kt b/app/src/main/java/net/lacolaco/smileessence/entity/EntitySupport.kt new file mode 100644 index 00000000..c1b3e4a3 --- /dev/null +++ b/app/src/main/java/net/lacolaco/smileessence/entity/EntitySupport.kt @@ -0,0 +1,106 @@ +package net.lacolaco.smileessence.entity + +import net.lacolaco.smileessence.util.UIObservable +import twitter4j.* + +import java.util.* + +abstract class EntitySupport : UIObservable() { + open lateinit var mentions: List<String> + protected set + open lateinit var hashtags: List<String> + protected set + open lateinit var mediaUrls: List<String> + protected set + open lateinit var urlsExpanded: List<String> + protected set + open lateinit var symbols: List<String> + protected set + + protected fun updateEntities(status: twitter4j.EntitySupport) { + mentions = extractMentions(status.userMentionEntities) + hashtags = extractHashtags(status.hashtagEntities) + mediaUrls = extractMediaUrls(status.mediaEntities) + urlsExpanded = extractExpandedUrls(status.urlEntities) + symbols = extractSymbols(status.symbolEntities) + } + + private fun extractMentions(entities: Array<UserMentionEntity>?): List<String> { + val names = ArrayList<String>() + if (entities != null) { + for (entity in entities) { + names.add(entity.screenName) + } + } + return names + } + + private fun extractSymbols(entities: Array<SymbolEntity>?): List<String> { + val names = ArrayList<String>() + if (entities != null) { + for (entity in entities) { + names.add(entity.text) + } + } + return names + } + + private fun extractExpandedUrls(entities: Array<URLEntity>?): List<String> { + val names = ArrayList<String>() + if (entities != null) { + for (entity in entities) { + names.add(entity.expandedURL) + } + } + return names + } + + private fun extractMediaUrls(entities: Array<MediaEntity>?): List<String> { + val names = ArrayList<String>() + if (entities != null) { + for (entity in entities) { + if ("photo" == entity.type) { + names.add(entity.mediaURLHttps) + } else { + names.add(entity.expandedURL) + } + } + } + return names + } + + private fun extractHashtags(entities: Array<HashtagEntity>?): List<String> { + val names = ArrayList<String>() + if (entities != null) { + for (entity in entities) { + names.add(entity.text) + } + } + return names + } + + protected fun extractText(status: twitter4j.Status, expand: Boolean): String { + return extractText(status, status.text, expand) + } + + protected fun extractText(status: twitter4j.DirectMessage, expand: Boolean): String { + return extractText(status, status.text, expand) + } + + private fun extractText(status: twitter4j.EntitySupport, text: String, expand: Boolean): String { + val set = TreeSet<twitter4j.URLEntity> { a, b -> a.start - b.start } + if (status.urlEntities != null) { + Collections.addAll(set, *status.urlEntities) + } + if (status.mediaEntities != null) { + Collections.addAll(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 + } +} |