Refactoring

This commit is contained in:
M66B 2021-05-19 07:22:36 +02:00
parent bb5e226c26
commit 0c2248f671
2 changed files with 89 additions and 49 deletions

View File

@ -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 <http://www.gnu.org/licenses/>.
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();
}
}
}

View File

@ -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