From 295cb742875b942e3797b2a83f4cc83131e456c6 Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 10 Nov 2023 16:30:46 +0100 Subject: [PATCH] don't show translate for empty decoding --- .../joinmastodon/android/model/Status.java | 5 ++-- .../android/utils/StatusTextEncoder.java | 25 +++++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java index eb13a43fc..452ac8536 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java @@ -4,6 +4,7 @@ import static org.joinmastodon.android.api.MastodonAPIController.gson; import static org.joinmastodon.android.api.MastodonAPIController.gsonWithoutDeserializer; import android.text.TextUtils; +import android.util.Pair; import org.joinmastodon.android.api.ObjectValidationException; import org.joinmastodon.android.api.RequiredField; @@ -223,10 +224,10 @@ public class Status extends BaseModel implements DisplayItemsParent, Searchable{ instanceInfo.v2.configuration.translation.enabled; try { - String bottomText = BOTTOM_TEXT_PATTERN.matcher(getStrippedText()).find() + Pair> decoded=BOTTOM_TEXT_PATTERN.matcher(getStrippedText()).find() ? new StatusTextEncoder(Bottom::decode).decode(getStrippedText(), BOTTOM_TEXT_PATTERN) : null; - if(bottomText==null || bottomText.length()==0 || bottomText.equals("\u0005")) bottomText=null; + String bottomText=decoded==null || decoded.second.stream().allMatch(s->s.trim().isEmpty()) ? null : decoded.first; if(bottomText!=null){ translation=new Translation(); translation.content=bottomText; diff --git a/mastodon/src/main/java/org/joinmastodon/android/utils/StatusTextEncoder.java b/mastodon/src/main/java/org/joinmastodon/android/utils/StatusTextEncoder.java index 12f3d4891..7bf862178 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/utils/StatusTextEncoder.java +++ b/mastodon/src/main/java/org/joinmastodon/android/utils/StatusTextEncoder.java @@ -1,9 +1,9 @@ package org.joinmastodon.android.utils; -import android.text.TextUtils; - -import org.joinmastodon.android.fragments.ComposeFragment; +import android.util.Pair; +import java.util.ArrayList; +import java.util.List; import java.util.function.Function; import java.util.regex.MatchResult; import java.util.regex.Matcher; @@ -40,19 +40,22 @@ public class StatusTextEncoder { } // prettiest almost-exact replica of a pretty function - public String decode(String content, Pattern regex) { - Matcher m = regex.matcher(content); - StringBuilder decodedString = new StringBuilder(); - int previousEnd = 0; + public Pair> decode(String content, Pattern regex) { + Matcher m=regex.matcher(content); + StringBuilder decodedString=new StringBuilder(); + List decodedParts=new ArrayList<>(); + int previousEnd=0; while (m.find()) { - MatchResult res = m.toMatchResult(); + MatchResult res=m.toMatchResult(); // everything before the match - do not decode decodedString.append(content.substring(previousEnd, res.start())); - previousEnd = res.end(); + previousEnd=res.end(); // the match - do decode - decodedString.append(fn.apply(res.group())); + String decoded=fn.apply(res.group()); + decodedParts.add(decoded); + decodedString.append(decoded); } decodedString.append(content.substring(previousEnd)); - return decodedString.toString(); + return Pair.create(decodedString.toString(), decodedParts); } }