Avoids to translate URLs and TAGs

This commit is contained in:
tom79 2017-08-21 17:32:09 +02:00
parent 874f482f02
commit 907235878b
3 changed files with 56 additions and 4 deletions

View File

@ -33,6 +33,7 @@ import android.text.Html;
import android.text.SpannableString;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.util.Patterns;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@ -63,7 +64,11 @@ import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import fr.gouv.etalab.mastodon.activities.MediaActivity;
import fr.gouv.etalab.mastodon.activities.ShowAccountActivity;
@ -104,6 +109,8 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
private final int FAVOURITE = 2;
private RetrieveFeedsAsyncTask.Type type;
private String targetedId;
private HashMap<String, String> urlConversion;
private HashMap<String, String> tagConversion;
public StatusListAdapter(Context context, RetrieveFeedsAsyncTask.Type type, String targetedId, boolean isOnWifi, int behaviorWithAttachments, List<Status> statuses){
this.context = context;
@ -301,8 +308,41 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
@Override
public void onClick(View v) {
try {
String text = status.getContent();
if( !status.isTranslated() ){
new YandexQuery(StatusListAdapter.this).getYandexTextview(position, status.getContent(), currentLocale);
tagConversion = new HashMap<>();
urlConversion = new HashMap<>();
Matcher matcher;
//Extracts urls
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT)
matcher = Patterns.WEB_URL.matcher(text);
else
matcher = Helper.urlPattern.matcher(text);
int i = 0;
//replaces them by a kind of variable which shouldn't be translated ie: __u0__, __u1__, etc.
while (matcher.find()){
String key = "__u" + String.valueOf(i) + "__";
String value = matcher.group(0);
if( value != null) {
urlConversion.put(key, value);
text = text.replace(value, key);
}
i++;
}
i = 0;
//Same for tags with __t0__, __t1__, etc.
matcher = Helper.hashtagPattern.matcher(text);
while (matcher.find()){
String key = "__t" + String.valueOf(i) + "__";
String value = matcher.group(0);
tagConversion.put(key, value);
if( value != null) {
tagConversion.put(key, value);
text = text.replace(value, key);
}
i++;
}
new YandexQuery(StatusListAdapter.this).getYandexTextview(position, text, currentLocale);
}else {
status.setTranslationShown(!status.isTranslationShown());
statusListAdapter.notifyDataSetChanged();
@ -872,6 +912,18 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
}else if( statuses.size() > position) {
try {
String aJsonString = yandexTranslateToText(translatedResult);
Iterator itU = urlConversion.entrySet().iterator();
while (itU.hasNext()) {
Map.Entry pair = (Map.Entry)itU.next();
aJsonString = aJsonString.replace(pair.getKey().toString(), pair.getValue().toString());
itU.remove();
}
Iterator itT = tagConversion.entrySet().iterator();
while (itT.hasNext()) {
Map.Entry pair = (Map.Entry)itT.next();
aJsonString = aJsonString.replace(pair.getKey().toString(), pair.getValue().toString());
itT.remove();
}
statuses.get(position).setTranslated(true);
statuses.get(position).setTranslationShown(true);
statuses.get(position).setContent_translated(aJsonString);

View File

@ -247,11 +247,11 @@ public class Helper {
private static final Pattern SHORTNAME_PATTERN = Pattern.compile(":([-+\\w]+):");
private static final Pattern urlPattern = Pattern.compile(
public static final Pattern urlPattern = Pattern.compile(
"(?i)\\b((?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,10}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))",
Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
private static final Pattern hashtagPattern = Pattern.compile("(#[\\w_À-ú-]{1,})");
public static final Pattern hashtagPattern = Pattern.compile("(#[\\w_À-ú-]{1,})");
/**
* Converts emojis in input to unicode
* @param input String

View File

@ -25,7 +25,6 @@ import fr.gouv.etalab.mastodon.interfaces.OnTranslatedInterface;
public class YandexQuery {
private OnTranslatedInterface listener;
public YandexQuery(OnTranslatedInterface listenner) {
this.listener = listenner;
}
@ -35,6 +34,7 @@ public class YandexQuery {
YandexClient.get(text, toLanguage, new AsyncHttpResponseHandler() {
@Override
public void onStart() {
}
@Override