aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco/smileessence/entity/Entities.kt
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2017-10-22 23:12:44 +0900
committerKazuki Yamaguchi <k@rhe.jp>2017-10-22 23:12:44 +0900
commit0b16b186751aca2a6000e5bc949e8511b91c0dfd (patch)
treef5d0a56a7292591c173031eda19a61a52ec12533 /app/src/main/java/net/lacolaco/smileessence/entity/Entities.kt
parent565d3ddf03098be859594f2d6c3ca452c7738d4f (diff)
downloadSmileEssence-0b16b186751aca2a6000e5bc949e8511b91c0dfd.tar.gz
data simplification
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/entity/Entities.kt')
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/Entities.kt55
1 files changed, 55 insertions, 0 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/Entities.kt b/app/src/main/java/net/lacolaco/smileessence/entity/Entities.kt
new file mode 100644
index 00000000..c5437154
--- /dev/null
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/Entities.kt
@@ -0,0 +1,55 @@
+package net.lacolaco.smileessence.entity
+
+import twitter4j.*
+
+import java.util.*
+
+class Entities private constructor(
+ val mentions: List<String>,
+ val hashtags: List<String>,
+ val mediaUrls: List<String>,
+ val urlsExpanded: List<String>,
+ val symbols: List<String>
+) {
+ fun extractText(status: twitter4j.EntitySupport, text: String): String {
+ val set = TreeSet<twitter4j.URLEntity> { a, b -> a.start - b.start }
+ if (status.urlEntities != null)
+ set += status.urlEntities
+ if (status.mediaEntities != null)
+ set += status.mediaEntities
+
+ return set.fold(text) { t, entity ->
+ t.replaceFirst(entity.text.toRegex(), entity.displayURL)
+ }
+ }
+
+ companion object {
+ fun fromTwitter(es: twitter4j.EntitySupport) = Entities(
+ mentions = extractMentions(es.userMentionEntities),
+ hashtags = extractHashtags(es.hashtagEntities),
+ mediaUrls = extractMediaUrls(es.mediaEntities),
+ urlsExpanded = extractExpandedUrls(es.urlEntities),
+ symbols = extractSymbols(es.symbolEntities)
+ )
+
+ private fun extractMentions(entities: Array<UserMentionEntity>?) =
+ entities?.map { it.screenName } ?: listOf()
+
+ private fun extractSymbols(entities: Array<SymbolEntity>?) =
+ entities?.map { it.text } ?: listOf()
+
+ private fun extractExpandedUrls(entities: Array<URLEntity>?) =
+ entities?.map { it.expandedURL } ?: listOf()
+
+ private fun extractMediaUrls(entities: Array<MediaEntity>?) =
+ entities?.map {
+ when (it.type) {
+ "photo" -> it.mediaURLHttps
+ else -> it.expandedURL
+ }
+ } ?: listOf()
+
+ private fun extractHashtags(entities: Array<HashtagEntity>?) =
+ entities?.map { it.text } ?: listOf()
+ }
+}