diff --git a/app/src/main/java/eu/faircode/email/DeepL.java b/app/src/main/java/eu/faircode/email/DeepL.java new file mode 100644 index 0000000000..d46613dc7c --- /dev/null +++ b/app/src/main/java/eu/faircode/email/DeepL.java @@ -0,0 +1,88 @@ +package eu.faircode.email; + +/* + This file is part of FairEmail. + + FairEmail 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. + + FairEmail 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 FairEmail. If not, see . + + Copyright 2018-2021 by Marcel Bokhorst (M66B) +*/ + +import android.content.Context; +import android.content.SharedPreferences; + +import androidx.preference.PreferenceManager; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +import javax.net.ssl.HttpsURLConnection; + +public class DeepL { + private static final int DEEPL_TIMEOUT = 20; // seconds + private static final String DEEPL_BASE_URI = "https://api-free.deepl.com/v2/"; + + public static String translate(String text, String target, Context context) throws IOException, JSONException { + String request = + "text=" + URLEncoder.encode(text, StandardCharsets.UTF_8.name()) + + "&target_lang=" + URLEncoder.encode(target, StandardCharsets.UTF_8.name()); + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + String deepl = prefs.getString("deepl", null); + + URL url = new URL(DEEPL_BASE_URI + "translate?auth_key=" + deepl); + HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + connection.setDoOutput(true); + connection.setReadTimeout(DEEPL_TIMEOUT * 1000); + connection.setConnectTimeout(DEEPL_TIMEOUT * 1000); + connection.setRequestProperty("User-Agent", WebViewEx.getUserAgent(context)); + connection.setRequestProperty("Accept", "*/*"); + connection.setRequestProperty("Content-Length", Integer.toString(request.length())); + connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + connection.connect(); + + try { + connection.getOutputStream().write(request.getBytes()); + + int status = connection.getResponseCode(); + if (status != HttpsURLConnection.HTTP_OK) { + String error; + try { + error = Helper.readStream(connection.getErrorStream()); + } catch (Throwable ex) { + Log.w(ex); + error = ex.getMessage(); + } + throw new FileNotFoundException("Error " + status + ": " + error); + } + + String response = Helper.readStream(connection.getInputStream()); + + JSONObject jroot = new JSONObject(response); + JSONArray jtranslations = jroot.getJSONArray("translations"); + JSONObject jtranslation = (JSONObject) jtranslations.get(0); + return jtranslation.getString("text"); + } finally { + connection.disconnect(); + } + } +} diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 9c3df5bda4..8d76c4886b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -164,8 +164,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; -import java.net.URL; -import java.net.URLEncoder; import java.net.UnknownHostException; import java.nio.charset.StandardCharsets; import java.security.GeneralSecurityException; @@ -209,7 +207,6 @@ import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; import javax.mail.internet.ParseException; import javax.mail.util.ByteArrayDataSource; -import javax.net.ssl.HttpsURLConnection; import biweekly.Biweekly; import biweekly.ICalendar; @@ -315,9 +312,6 @@ public class FragmentCompose extends FragmentBase { private static final int REQUEST_SEND = 14; private static final int REQUEST_PERMISSION = 15; - private static final int DEEPL_TIMEOUT = 20; // seconds - private static final String DEEPL_BASE_URI = "https://api-free.deepl.com/v2/"; - private static ExecutorService executor = Helper.getBackgroundExecutor(1, "encrypt"); @Override @@ -2034,49 +2028,7 @@ public class FragmentCompose extends FragmentBase { protected String onExecute(Context context, Bundle args) throws Throwable { String target = args.getString("target"); String text = args.getString("text"); - String request = - "text=" + URLEncoder.encode(text, StandardCharsets.UTF_8.name()) + - "&target_lang=" + URLEncoder.encode(target, StandardCharsets.UTF_8.name()); - - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - String deepl = prefs.getString("deepl", null); - - URL url = new URL(DEEPL_BASE_URI + "translate?auth_key=" + deepl); - HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); - connection.setRequestMethod("POST"); - connection.setDoOutput(true); - connection.setReadTimeout(DEEPL_TIMEOUT * 1000); - connection.setConnectTimeout(DEEPL_TIMEOUT * 1000); - connection.setRequestProperty("User-Agent", WebViewEx.getUserAgent(context)); - connection.setRequestProperty("Accept", "*/*"); - connection.setRequestProperty("Content-Length", Integer.toString(request.length())); - connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); - connection.connect(); - - try { - connection.getOutputStream().write(request.getBytes()); - - int status = connection.getResponseCode(); - if (status != HttpsURLConnection.HTTP_OK) { - String error; - try { - error = Helper.readStream(connection.getErrorStream()); - } catch (Throwable ex) { - Log.w(ex); - error = ex.getMessage(); - } - throw new FileNotFoundException("Error " + status + ": " + error); - } - - String response = Helper.readStream(connection.getInputStream()); - - JSONObject jroot = new JSONObject(response); - JSONArray jtranslations = jroot.getJSONArray("translations"); - JSONObject jtranslation = (JSONObject) jtranslations.get(0); - return jtranslation.getString("text"); - } finally { - connection.disconnect(); - } + return DeepL.translate(text, target, context); } @Override