summaryrefslogtreecommitdiffstats
path: root/mytransl/src/main/java/com/github/stom79/mytransl/async/TransAsync.java
diff options
context:
space:
mode:
Diffstat (limited to 'mytransl/src/main/java/com/github/stom79/mytransl/async/TransAsync.java')
-rw-r--r--mytransl/src/main/java/com/github/stom79/mytransl/async/TransAsync.java181
1 files changed, 181 insertions, 0 deletions
diff --git a/mytransl/src/main/java/com/github/stom79/mytransl/async/TransAsync.java b/mytransl/src/main/java/com/github/stom79/mytransl/async/TransAsync.java
new file mode 100644
index 000000000..7c9052199
--- /dev/null
+++ b/mytransl/src/main/java/com/github/stom79/mytransl/async/TransAsync.java
@@ -0,0 +1,181 @@
+package com.github.stom79.mytransl.async;
+/* Copyright 2017 Thomas Schneider
+ *
+ * This file is a part of MyTransL
+ *
+ * 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.
+ *
+ * MyTransL 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 MyTransL; if not,
+ * see <http://www.gnu.org/licenses>. */
+
+import android.os.Handler;
+import android.os.Looper;
+
+import com.github.stom79.mytransl.MyTransL;
+import com.github.stom79.mytransl.client.Client;
+import com.github.stom79.mytransl.client.HttpsConnectionException;
+import com.github.stom79.mytransl.client.Results;
+import com.github.stom79.mytransl.translate.Helper;
+import com.github.stom79.mytransl.translate.Params;
+import com.github.stom79.mytransl.translate.Translate;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+
+
+/**
+ * Created by @stom79 on 27/11/2017.
+ * Asynchronous task to get the translation
+ * Changed 10/01/2021
+ */
+
+public class TransAsync {
+
+ private final Results listener;
+ private final MyTransL.translatorEngine te;
+ private final int timeout;
+ private final Translate translate;
+ private final boolean obfuscation;
+ private final String contentToSend;
+ private final String toLanguage;
+ private final Params params;
+ private Params.fType format;
+ private HttpsConnectionException e;
+
+ public TransAsync(MyTransL.translatorEngine te, String content, Params.fType format, String toLanguage, int timeout, boolean obfuscation, Results results) {
+ this.listener = results;
+ this.te = te;
+ this.timeout = timeout;
+ this.obfuscation = obfuscation;
+ //An instance of the Translate class will be hydrated depending of the translator engine
+ translate = new Translate();
+ translate.setTranslatorEngine(te);
+ translate.setInitialContent(content);
+ translate.setTargetedLanguage(toLanguage);
+ translate.setFormat(format);
+ //Obfuscation if asked
+ if (obfuscation)
+ translate.obfuscate();
+ if (obfuscation) {
+ contentToSend = translate.getObfuscateContent();
+ } else {
+ contentToSend = translate.getInitialContent();
+ }
+ this.toLanguage = toLanguage;
+ this.params = new Params();
+
+ new Thread(() -> {
+ String response = doInBackground();
+ Handler mainHandler = new Handler(Looper.getMainLooper());
+ Runnable myRunnable = () -> onPostExecute(response);
+ mainHandler.post(myRunnable);
+ }).start();
+ }
+
+ public TransAsync(MyTransL.translatorEngine te, String content, String toLanguage, Params params, int timeout, boolean obfuscation, Results results) {
+ this.listener = results;
+ this.te = te;
+ this.timeout = timeout;
+ this.obfuscation = obfuscation;
+ //An instance of the Translate class will be hydrated depending of the translator engine
+ translate = new Translate();
+ translate.setTranslatorEngine(te);
+ translate.setInitialContent(content);
+ translate.setTargetedLanguage(toLanguage);
+ //Obfuscation if asked
+ if (obfuscation) {
+ translate.obfuscate();
+ }
+ if (obfuscation) {
+ contentToSend = translate.getObfuscateContent();
+ } else {
+ contentToSend = translate.getInitialContent();
+ }
+ this.toLanguage = toLanguage;
+ this.params = params;
+ new Thread(() -> {
+ String response = doInBackground();
+ Handler mainHandler = new Handler(Looper.getMainLooper());
+ MyTransL.getLocale();
+ Runnable myRunnable = () -> onPostExecute(response);
+ mainHandler.post(myRunnable);
+ }).start();
+ }
+
+
+ protected String doInBackground() {
+ String str_response = null;
+ //Some parameters
+ try {
+ String url;
+
+ if (te == MyTransL.translatorEngine.YANDEX) {
+ String key = MyTransL.getInstance(te).getYandexAPIKey();
+ url = Helper.getYandexAbsoluteUrl(contentToSend, key, toLanguage);
+ str_response = new Client().get(url, this.timeout);
+ } else if (te == MyTransL.translatorEngine.DEEPL) {
+ String key = MyTransL.getInstance(te).getDeeplAPIKey();
+ url = Helper.getDeeplAbsoluteUrl(contentToSend, toLanguage, params, key);
+ str_response = new Client().get(url, this.timeout);
+ } else if (te == MyTransL.translatorEngine.SYSTRAN) {
+ String key = MyTransL.getInstance(te).getSystranAPIKey();
+ url = Helper.getSystranAbsoluteUrl(contentToSend, key, toLanguage);
+ str_response = new Client().get(url, this.timeout);
+ } else if (te == MyTransL.translatorEngine.LIBRETRANSLATE) {
+ String key = MyTransL.getInstance(te).getLibreTranslateAPIKey();
+ JSONObject params = new JSONObject();
+ try {
+ params.put("source", this.params.getSource_lang());
+ params.put("target", toLanguage);
+ params.put("q", contentToSend);
+ params.put("format", format);
+ if (key != null) {
+ params.put("key", key);
+ }
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ str_response = new Client().post(MyTransL.getLibreTranslateUrl(), this.timeout, params);
+ }
+ } catch (IOException | NoSuchAlgorithmException | KeyManagementException err) {
+ this.e = new HttpsConnectionException(-1, err.getMessage());
+ err.printStackTrace();
+ } catch (HttpsConnectionException e) {
+ this.e = e;
+ }
+ return str_response;
+ }
+
+ protected void onPostExecute(String result) {
+ if (this.e == null) {
+ //Yandex response
+ if (this.te == MyTransL.translatorEngine.YANDEX) {
+ translate.parseYandexResult(result, listener);
+ } else if (this.te == MyTransL.translatorEngine.DEEPL) {
+ translate.parseDeeplResult(result, listener);
+ } else if (this.te == MyTransL.translatorEngine.SYSTRAN) {
+ translate.parseSystranlResult(result, listener);
+ } else if (this.te == MyTransL.translatorEngine.LIBRETRANSLATE) {
+ translate.parseLibreTranslateResult(result, listener);
+ }
+ //Obfuscation if asked
+ if (obfuscation) {
+ translate.deobfuscate();
+ }
+ listener.onSuccess(translate);
+ } else {
+ listener.onFail(this.e);
+ }
+ }
+
+}