From 1ef38e61de1ffd45c4139ec1ac4a561f4700c17d Mon Sep 17 00:00:00 2001 From: Mariotaku Lee Date: Thu, 1 Dec 2016 11:05:51 +0800 Subject: [PATCH] fixed #635 --- .../library/twitter/model/Status.java | 11 ++++++++++ .../model/util/ParcelableStatusUtils.kt | 20 ++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/Status.java b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/Status.java index a7ce152b2..f05740b77 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/Status.java +++ b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/Status.java @@ -193,6 +193,13 @@ public class Status extends TwitterResponseObject implements Comparable, @JsonField(name = "display_text_range") int[] displayTextRange; + /** + * GNU social value + * Format: {@code "tag:[gnusocial.host],YYYY-MM-DD:noticeId=[noticeId]:objectType=[objectType]"} + */ + @JsonField(name = "uri") + String uri; + @ParcelableNoThanks private transient long sortId = -1; @@ -447,6 +454,10 @@ public class Status extends TwitterResponseObject implements Comparable, return quotedStatusId; } + public String getUri() { + return uri; + } + @Override public int compareTo(@NonNull final Status that) { final long diff = getSortId() - that.getSortId(); diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/model/util/ParcelableStatusUtils.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/model/util/ParcelableStatusUtils.kt index 95ebfd5e7..4ed737ab6 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/model/util/ParcelableStatusUtils.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/model/util/ParcelableStatusUtils.kt @@ -39,7 +39,7 @@ object ParcelableStatusUtils { result.timestamp = getTime(orig.createdAt) result.extras = ParcelableStatus.Extras() - result.extras.external_url = orig.externalUrl + result.extras.external_url = orig.inferExternalUrl() result.extras.support_entities = orig.entities != null result.extras.statusnet_conversation_id = orig.statusnetConversationId result.is_pinned_status = orig.user.pinnedTweetIds?.contains(orig.id) ?: false @@ -58,7 +58,7 @@ object ParcelableStatusUtils { result.retweeted_by_user_screen_name = retweetUser.screenName result.retweeted_by_user_profile_image = TwitterContentUtils.getProfileImageUrl(retweetUser) - result.extras.retweeted_external_url = retweetedStatus.externalUrl + result.extras.retweeted_external_url = retweetedStatus.inferExternalUrl() } else { status = orig } @@ -69,7 +69,7 @@ object ParcelableStatusUtils { if (quoted != null) { val quotedUser = quoted.user result.quoted_id = quoted.id - result.extras.quoted_external_url = quoted.externalUrl + result.extras.quoted_external_url = quoted.inferExternalUrl() val quotedText = quoted.htmlText // Twitter will escape <> to <>, so if a status contains those symbols unescaped @@ -272,4 +272,18 @@ object ParcelableStatusUtils { status.in_reply_to_user_nickname = manager.getUserNickname(status.in_reply_to_user_id!!) } } + + fun Status.inferExternalUrl(): String? { + if (externalUrl != null) { + return externalUrl + } + if (uri != null) { + val r = Regex("tag:([\\w\\d\\.]+),(\\d{4}\\-\\d{2}\\-\\d{2}):noticeId=(\\d+):objectType=(\\w+)") + r.matchEntire(uri)?.let { result: MatchResult -> + return "https://%s/notice/%s".format(Locale.ROOT, result.groups[1]?.value, result.groups[3]?.value) + } + } + return null + } } +