Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package org.spacegram.translator;

import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;

import org.json.JSONObject;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.Utilities;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URI;
import java.nio.charset.StandardCharsets;

public class SimplyTranslateTranslator implements BaseTranslator {

private static final String API_URL = "https://simplytranslate.org/api/translate";
private final String engine;

public SimplyTranslateTranslator(String engine) {
this.engine = engine;
}

@Override
public void translate(String text, String fromLang, String toLang, Utilities.Callback2<String, Boolean> done) {
if (TextUtils.isEmpty(text) || done == null) {
return;
}

new Thread(() -> {
HttpURLConnection connection = null;
try {
String sourceLang = TextUtils.isEmpty(fromLang) ? "auto" : fromLang;
String url = API_URL + "?engine=" + Uri.encode(engine)
+ "&from=" + Uri.encode(sourceLang)
+ "&to=" + Uri.encode(toLang)
+ "&text=" + Uri.encode(text);

connection = (HttpURLConnection) new URI(url).toURL().openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(10000);
connection.setReadTimeout(10000);

int responseCode = connection.getResponseCode();
if (responseCode != 200) {
boolean rateLimit = responseCode == 429;
AndroidUtilities.runOnUIThread(() -> done.run(null, rateLimit));
return;
}

StringBuilder resultBuilder = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
String line;
while ((line = reader.readLine()) != null) {
resultBuilder.append(line);
}
}

JSONObject response = new JSONObject(resultBuilder.toString());
String translatedText = response.optString("translated_text", null);
AndroidUtilities.runOnUIThread(() -> done.run(translatedText, false));

} catch (Exception e) {
Log.e("SimplyTranslate", "Translation failed", e);
AndroidUtilities.runOnUIThread(() -> done.run(null, false));
} finally {
if (connection != null) {
connection.disconnect();
}
}
}).start();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,21 @@ public class SpaceGramTranslator {

// Provider constants
public static final int PROVIDER_GOOGLE = 1;
public static final int PROVIDER_DEEPL = 2;
public static final int PROVIDER_YANDEX = 3;
public static final int PROVIDER_MICROSOFT = 4;
public static final int PROVIDER_LIBRETRANSLATE = 5;
public static final int PROVIDER_MYMEMORY = 6;
public static final int PROVIDER_MYMEMORY = 2;
public static final int PROVIDER_BING = 3;
public static final int PROVIDER_BAIDU = 4;
public static final int PROVIDER_YANDEX = 5;

private static final SpaceGramTranslator INSTANCE = new SpaceGramTranslator();
private final LruCache<String, String> cache = new LruCache<>(200);
private final Map<Integer, BaseTranslator> providers = new HashMap<>();

private SpaceGramTranslator() {
providers.put(PROVIDER_GOOGLE, new GoogleTranslator());
providers.put(PROVIDER_DEEPL, new DeepLTranslator());
providers.put(PROVIDER_YANDEX, new YandexTranslator());
providers.put(PROVIDER_MICROSOFT, new MicrosoftTranslator());
providers.put(PROVIDER_LIBRETRANSLATE, new LibreTranslateTranslator());
providers.put(PROVIDER_MYMEMORY, new MyMemoryTranslator());
providers.put(PROVIDER_BING, new SimplyTranslateTranslator("bing"));
providers.put(PROVIDER_BAIDU, new SimplyTranslateTranslator("baidu"));
providers.put(PROVIDER_YANDEX, new SimplyTranslateTranslator("yandex"));
}

public static SpaceGramTranslator getInstance() {
Expand All @@ -37,16 +35,14 @@ public static String getProviderName(int provider) {
switch (provider) {
case PROVIDER_GOOGLE:
return "Google Translate";
case PROVIDER_DEEPL:
return "DeepL";
case PROVIDER_YANDEX:
return "Yandex";
case PROVIDER_MICROSOFT:
return "Microsoft Translator";
case PROVIDER_LIBRETRANSLATE:
return "LibreTranslate";
case PROVIDER_MYMEMORY:
return "MyMemory";
case PROVIDER_BING:
return "Bing";
case PROVIDER_BAIDU:
return "Baidu (CN)";
case PROVIDER_YANDEX:
return "Yandex (RU)";
default:
return "Google Translate";
}
Expand All @@ -55,22 +51,20 @@ public static String getProviderName(int provider) {
public static String[] getAllProviderNames() {
return new String[]{
"Google Translate",
"DeepL",
"Yandex",
"Microsoft Translator",
"LibreTranslate",
"MyMemory"
"MyMemory",
"Bing",
"Baidu (CN)",
"Yandex (RU)"
};
}

public static int[] getAllProviderIds() {
return new int[]{
PROVIDER_GOOGLE,
PROVIDER_DEEPL,
PROVIDER_YANDEX,
PROVIDER_MICROSOFT,
PROVIDER_LIBRETRANSLATE,
PROVIDER_MYMEMORY
PROVIDER_MYMEMORY,
PROVIDER_BING,
PROVIDER_BAIDU,
PROVIDER_YANDEX
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9594,7 +9594,7 @@ private void createTranslateButton() {
translateButton = new TranslateButton(getContext(), this, themeDelegate) {
@Override
protected void onButtonClick() {
if (getUserConfig().isPremium() || currentChat != null && currentChat.autotranslation) {
if (getUserConfig().isPremium() || currentChat != null && currentChat.autotranslation || SpaceGramConfig.translateProvider != 0) {
getMessagesController().getTranslateController().toggleTranslatingDialog(getDialogId());
} else {
MessagesController.getNotificationsSettings(currentAccount).edit().putInt("dialog_show_translate_count" + getDialogId(), 140).commit();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
import org.telegram.ui.Stories.recorder.HintView2;

import org.spacegram.SpaceGramConfig;
import org.spacegram.translator.SpaceGramTranslator;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -352,7 +353,7 @@ protected void dispatchDraw(Canvas canvas) {

ActionBarMenuSubItem providerButton = new ActionBarMenuSubItem(getContext(), true, false, resourcesProvider);
providerButton.setTextAndIcon(getString(R.string.SettingsSpaceGramTranslatorProvider), R.drawable.msg_customize);
providerButton.setSubtext(SpaceGramConfig.translateProvider == 0 ? "Telegram" : "Google");
providerButton.setSubtext(SpaceGramConfig.translateProvider == 0 ? "Telegram" : SpaceGramTranslator.getProviderName(SpaceGramConfig.translateProvider));
providerButton.setItemHeight(56);
popupLayout.addView(providerButton);

Expand All @@ -376,16 +377,21 @@ protected void dispatchDraw(Canvas canvas) {
});
providerSwipeBack.addView(telegramProvider);

ActionBarMenuSubItem googleProvider = new ActionBarMenuSubItem(getContext(), 2, false, false, resourcesProvider);
googleProvider.setText("Google");
googleProvider.setChecked(SpaceGramConfig.translateProvider != 0);
googleProvider.setOnClickListener(e -> {
SpaceGramConfig.translateProvider = 1;
SpaceGramConfig.saveConfig();
popupWindow.dismiss();
updateText();
});
providerSwipeBack.addView(googleProvider);
int[] providerIds = SpaceGramTranslator.getAllProviderIds();
String[] providerNames = SpaceGramTranslator.getAllProviderNames();
for (int i = 0; i < providerIds.length; i++) {
final int providerId = providerIds[i];
ActionBarMenuSubItem providerItem = new ActionBarMenuSubItem(getContext(), 2, false, false, resourcesProvider);
providerItem.setText(providerNames[i]);
providerItem.setChecked(SpaceGramConfig.translateProvider == providerId);
providerItem.setOnClickListener(e -> {
SpaceGramConfig.translateProvider = providerId;
SpaceGramConfig.saveConfig();
popupWindow.dismiss();
updateText();
});
providerSwipeBack.addView(providerItem);
}

providerButton.setOnClickListener(e -> {
popupLayout.getSwipeBack().openForeground(providerSwipeBackIndex);
Expand Down