aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco/smileessence/entity/EntitySupport.kt
diff options
context:
space:
mode:
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.kt106
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
+ }
+}