Commit 4be595ea authored by Thomas's avatar Thomas
Browse files

Add deepl support

parent b9eca58c
Loading
Loading
Loading
Loading
+17 −77
Original line number Diff line number Diff line
@@ -21,14 +21,12 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Point;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.text.Html;
import android.view.Display;
import android.view.Menu;
import android.view.MenuItem;
@@ -44,15 +42,8 @@ import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.preference.PreferenceManager;
import androidx.viewpager.widget.ViewPager;

import com.github.stom79.mytransl.MyTransL;
import com.github.stom79.mytransl.client.HttpsConnectionException;
import com.github.stom79.mytransl.client.Results;
import com.github.stom79.mytransl.translate.Params;
import com.github.stom79.mytransl.translate.Translate;

import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
@@ -63,6 +54,7 @@ import app.fedilab.android.client.entities.api.Status;
import app.fedilab.android.databinding.ActivityMediaPagerBinding;
import app.fedilab.android.helper.Helper;
import app.fedilab.android.helper.MediaHelper;
import app.fedilab.android.helper.TranslateHelper;
import app.fedilab.android.interfaces.OnDownloadInterface;
import app.fedilab.android.ui.fragment.media.FragmentMedia;
import es.dmoral.toasty.Toasty;
@@ -157,41 +149,15 @@ public class MediaActivity extends BaseTransparentActivity implements OnDownload
            binding.mediaDescription.setText(description);
            binding.translate.setOnClickListener(v -> {
                String descriptionToTranslate = attachments.get(mediaPosition - 1).description;
                MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE;
                final MyTransL myTransL = MyTransL.getInstance(et);
                myTransL.setObfuscation(true);
                Params params = new Params();
                params.setSplit_sentences(false);
                params.setFormat(Params.fType.TEXT);
                params.setSource_lang("auto");
                myTransL.setLibretranslateDomain("translate.fedilab.app");
                String statusToTranslate;
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
                    statusToTranslate = Html.fromHtml(descriptionToTranslate, Html.FROM_HTML_MODE_LEGACY).toString();
                else
                    statusToTranslate = Html.fromHtml(descriptionToTranslate).toString();
                SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(MediaActivity.this);
                String translate = sharedpreferences.getString(getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale());
                if (translate != null && translate.equalsIgnoreCase("default")) {
                    translate = MyTransL.getLocale();
                }
                myTransL.translate(statusToTranslate, translate, params, new Results() {
                    @Override
                    public void onSuccess(Translate translate) {
                        if (translate.getTranslatedContent() != null) {
                            attachments.get(mediaPosition - 1).translation = translate.getTranslatedContent();
                            binding.mediaDescriptionTranslated.setText(translate.getTranslatedContent());
                TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, translated -> {
                    if (translated != null) {
                        attachments.get(mediaPosition - 1).translation = translated;
                        binding.mediaDescriptionTranslated.setText(translated);
                        binding.mediaDescriptionTranslated.setVisibility(View.VISIBLE);
                        binding.mediaDescription.setVisibility(View.GONE);
                    } else {
                        Toasty.error(MediaActivity.this, getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
                    }
                    }

                    @Override
                    public void onFail(HttpsConnectionException httpsConnectionException) {

                    }
                });
            });
            if (attachments.get(mediaPosition - 1).translation != null) {
@@ -222,41 +188,15 @@ public class MediaActivity extends BaseTransparentActivity implements OnDownload
                }
                binding.translate.setOnClickListener(v -> {
                    String descriptionToTranslate = attachments.get(position).description;
                    MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE;
                    final MyTransL myTransL = MyTransL.getInstance(et);
                    myTransL.setObfuscation(true);
                    Params params = new Params();
                    params.setSplit_sentences(false);
                    params.setFormat(Params.fType.TEXT);
                    params.setSource_lang("auto");
                    myTransL.setLibretranslateDomain("translate.fedilab.app");
                    String statusToTranslate;
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
                        statusToTranslate = Html.fromHtml(descriptionToTranslate, Html.FROM_HTML_MODE_LEGACY).toString();
                    else
                        statusToTranslate = Html.fromHtml(descriptionToTranslate).toString();
                    SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(MediaActivity.this);
                    String translate = sharedpreferences.getString(getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale());
                    if (translate != null && translate.equalsIgnoreCase("default")) {
                        translate = MyTransL.getLocale();
                    }
                    myTransL.translate(statusToTranslate, translate, params, new Results() {
                        @Override
                        public void onSuccess(Translate translate) {
                            if (translate.getTranslatedContent() != null) {
                                attachments.get(position).translation = translate.getTranslatedContent();
                                binding.mediaDescriptionTranslated.setText(translate.getTranslatedContent());
                    TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, translated -> {
                        if (translated != null) {
                            attachments.get(position).translation = translated;
                            binding.mediaDescriptionTranslated.setText(translated);
                            binding.mediaDescriptionTranslated.setVisibility(View.VISIBLE);
                            binding.mediaDescription.setVisibility(View.GONE);
                        } else {
                            Toasty.error(MediaActivity.this, getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
                        }
                        }

                        @Override
                        public void onFail(HttpsConnectionException httpsConnectionException) {

                        }
                    });
                });
                if (!fullscreen) {
+5 −1
Original line number Diff line number Diff line
@@ -124,14 +124,17 @@ import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
import java.util.Set;
import java.util.TimeZone;
import java.util.UUID;
import java.util.regex.Matcher;
@@ -1236,7 +1239,8 @@ public class Helper {
                counter++;
                Date now = new Date();
                attachment.filename = formatter.format(now) + "." + extension;
                if (attachment.mimeType.startsWith("image")) {
                Set<String> imageType = new HashSet<>(Arrays.asList("image/png", "image/jpeg", "image/jpg"));
                if (imageType.contains(attachment.mimeType)) {
                    final File certCacheDir = new File(context.getCacheDir(), TEMP_MEDIA_DIRECTORY);
                    boolean isCertCacheDirExists = certCacheDir.exists();
                    if (!isCertCacheDirExists) {
+91 −0
Original line number Diff line number Diff line
package app.fedilab.android.helper;
/* Copyright 2022 Thomas Schneider
 *
 * This file is a part of Fedilab
 *
 * This program is free software; you can redistribute it and/or modify it under the terms of the
 * GNU General Public License as published by the Free Software Foundation; either version 3 of the
 * License, or (at your option) any later version.
 *
 * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 * Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with Fedilab; if not,
 * see <http://www.gnu.org/licenses>. */

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import android.text.Html;
import android.widget.Toast;

import androidx.preference.PreferenceManager;

import com.github.stom79.mytransl.MyTransL;
import com.github.stom79.mytransl.client.HttpsConnectionException;
import com.github.stom79.mytransl.client.Results;
import com.github.stom79.mytransl.translate.Params;

import app.fedilab.android.R;
import es.dmoral.toasty.Toasty;

public class TranslateHelper {

    public static void translate(Context context, String toTranslate, Translate callback) {
        String statusToTranslate;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
            statusToTranslate = Html.fromHtml(toTranslate, Html.FROM_HTML_MODE_LEGACY).toString();
        else
            statusToTranslate = Html.fromHtml(toTranslate).toString();
        SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
        String translator = sharedpreferences.getString(context.getString(R.string.SET_TRANSLATOR), "FEDILAB");
        MyTransL.translatorEngine et;
        if (translator.compareToIgnoreCase("FEDILAB") == 0) {
            et = MyTransL.translatorEngine.LIBRETRANSLATE;
        } else {
            et = MyTransL.translatorEngine.DEEPL;
        }
        final MyTransL myTransL = MyTransL.getInstance(et);
        myTransL.setObfuscation(true);
        Params params = new Params();
        params.setSplit_sentences(false);
        params.setFormat(Params.fType.TEXT);
        params.setSource_lang("auto");
        if (translator.compareToIgnoreCase("FEDILAB") == 0) {
            myTransL.setLibretranslateDomain("translate.fedilab.app");
        } else {
            String translatorVersion = sharedpreferences.getString(context.getString(R.string.SET_TRANSLATOR_VERSION), "PRO");
            params.setPro(translatorVersion.equals("PRO"));
            String apikey = sharedpreferences.getString(context.getString(R.string.SET_TRANSLATOR_API_KEY), null);
            myTransL.setDeeplAPIKey(apikey.trim());
        }

        String translate = sharedpreferences.getString(context.getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale());
        if (translate.equalsIgnoreCase("default")) {
            translate = MyTransL.getLocale();
        }

        myTransL.translate(statusToTranslate, translate, params, new Results() {
            @Override
            public void onSuccess(com.github.stom79.mytransl.translate.Translate translate) {
                if (translate.getTranslatedContent() != null) {
                    callback.onTranslate(translate.getTranslatedContent());
                } else {
                    callback.onTranslate("");
                    Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
                }
            }

            @Override
            public void onFail(HttpsConnectionException httpsConnectionException) {
                callback.onTranslate("");
                Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
            }
        });
    }

    public interface Translate {
        void onTranslate(String translated);
    }
}
+8 −38
Original line number Diff line number Diff line
@@ -16,28 +16,21 @@ package app.fedilab.android.ui.drawer;


import android.content.Context;
import android.content.SharedPreferences;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.RecyclerView;

import com.github.stom79.mytransl.MyTransL;
import com.github.stom79.mytransl.client.HttpsConnectionException;
import com.github.stom79.mytransl.client.Results;
import com.github.stom79.mytransl.translate.Params;
import com.github.stom79.mytransl.translate.Translate;

import java.util.List;
import java.util.Locale;

import app.fedilab.android.R;
import app.fedilab.android.client.entities.app.ReleaseNote;
import app.fedilab.android.databinding.DrawerReleaseNoteBinding;
import app.fedilab.android.helper.TranslateHelper;
import es.dmoral.toasty.Toasty;


@@ -81,37 +74,14 @@ public class ReleaseNoteAdapter extends RecyclerView.Adapter<ReleaseNoteAdapter.
            holder.binding.containerTrans.setVisibility(View.GONE);
            holder.binding.translate.setVisibility(View.VISIBLE);
        }
        holder.binding.translate.setOnClickListener(v -> {
            MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE;
            final MyTransL myTransL = MyTransL.getInstance(et);
            myTransL.setObfuscation(true);
            Params params = new Params();
            params.setSplit_sentences(false);
            params.setFormat(Params.fType.TEXT);
            params.setSource_lang("auto");
            myTransL.setLibretranslateDomain("translate.fedilab.app");
            SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
            String translate = sharedpreferences.getString(context.getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale());
            if (translate != null && translate.equalsIgnoreCase("default")) {
                translate = MyTransL.getLocale();
            }
            myTransL.translate(note.note, translate, params, new Results() {
                @Override
                public void onSuccess(Translate translate) {
                    if (translate.getTranslatedContent() != null) {
                        note.noteTranslated = translate.getTranslatedContent();
        holder.binding.translate.setOnClickListener(v -> TranslateHelper.translate(context, note.note, translated -> {
            if (translated != null) {
                note.noteTranslated = translated;
                notifyItemChanged(holder.getBindingAdapterPosition());
            } else {
                Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
            }
                }

                @Override
                public void onFail(HttpsConnectionException httpsConnectionException) {
                    Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
                }
            });
        });
        }));
    }


+9 −36
Original line number Diff line number Diff line
@@ -87,10 +87,6 @@ import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.github.stom79.mytransl.MyTransL;
import com.github.stom79.mytransl.client.HttpsConnectionException;
import com.github.stom79.mytransl.client.Results;
import com.github.stom79.mytransl.translate.Params;
import com.github.stom79.mytransl.translate.Translate;
import com.vanniktech.emoji.EmojiManager;
import com.vanniktech.emoji.EmojiPopup;
import com.vanniktech.emoji.one.EmojiOneProvider;
@@ -145,6 +141,7 @@ import app.fedilab.android.helper.MediaHelper;
import app.fedilab.android.helper.SpannableHelper;
import app.fedilab.android.helper.ThemeHelper;
import app.fedilab.android.helper.TimelineHelper;
import app.fedilab.android.helper.TranslateHelper;
import app.fedilab.android.ui.fragment.timeline.FragmentMastodonContext;
import app.fedilab.android.viewmodel.mastodon.AccountsVM;
import app.fedilab.android.viewmodel.mastodon.SearchVM;
@@ -1982,6 +1979,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>

    }


    private static void translate(Context context, Status statusToDeal,
                                  StatusViewHolder holder,
                                  RecyclerView.Adapter<RecyclerView.ViewHolder> adapter) {
@@ -1990,41 +1988,16 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
            statusToTranslate = Html.fromHtml(statusToDeal.content, Html.FROM_HTML_MODE_LEGACY).toString();
        else
            statusToTranslate = Html.fromHtml(statusToDeal.content).toString();

        int countMorseChar = ComposeAdapter.countMorseChar(statusToTranslate);
        if (countMorseChar < 4) {
            MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE;
            final MyTransL myTransL = MyTransL.getInstance(et);
            myTransL.setObfuscation(true);
            Params params = new Params();
            params.setSplit_sentences(false);
            params.setFormat(Params.fType.TEXT);
            params.setSource_lang("auto");
            myTransL.setLibretranslateDomain("translate.fedilab.app");

            SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
            String translate = sharedpreferences.getString(context.getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale());
            if (translate != null && translate.equalsIgnoreCase("default")) {
                translate = MyTransL.getLocale();
            }


            myTransL.translate(statusToTranslate, translate, params, new Results() {
                @Override
                public void onSuccess(Translate translate) {
                    if (translate.getTranslatedContent() != null) {
            TranslateHelper.translate(context, statusToDeal.content, translated -> {
                if (translated != null) {
                    statusToDeal.translationShown = true;
                        statusToDeal.translationContent = translate.getTranslatedContent();
                    statusToDeal.translationContent = translated;
                    adapter.notifyItemChanged(holder.getBindingAdapterPosition());
                } else {
                    Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
                }
                }

                @Override
                public void onFail(HttpsConnectionException httpsConnectionException) {

                }
            });
        } else {
            statusToDeal.translationShown = true;
Loading