From 7f5fa181d3a46ceebd3679e178ea76dbb6efb6d7 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 8 Nov 2022 09:01:19 +0100 Subject: [PATCH] LT: get languages via API --- app/src/main/assets/lt.json | 317 ------------------ .../java/eu/faircode/email/LanguageTool.java | 40 ++- 2 files changed, 35 insertions(+), 322 deletions(-) delete mode 100644 app/src/main/assets/lt.json diff --git a/app/src/main/assets/lt.json b/app/src/main/assets/lt.json deleted file mode 100644 index 13895f31bf..0000000000 --- a/app/src/main/assets/lt.json +++ /dev/null @@ -1,317 +0,0 @@ -[ - { - "name": "Arabic", - "code": "ar", - "longCode": "ar" - }, - { - "name": "Asturian", - "code": "ast", - "longCode": "ast-ES" - }, - { - "name": "Belarusian", - "code": "be", - "longCode": "be-BY" - }, - { - "name": "Breton", - "code": "br", - "longCode": "br-FR" - }, - { - "name": "Catalan", - "code": "ca", - "longCode": "ca-ES" - }, - { - "name": "Catalan (Valencian)", - "code": "ca", - "longCode": "ca-ES-valencia" - }, - { - "name": "Chinese", - "code": "zh", - "longCode": "zh-CN" - }, - { - "name": "Danish", - "code": "da", - "longCode": "da-DK" - }, - { - "name": "Dutch", - "code": "nl", - "longCode": "nl" - }, - { - "name": "Dutch", - "code": "nl", - "longCode": "nl" - }, - { - "name": "Dutch (Belgium)", - "code": "nl", - "longCode": "nl-BE" - }, - { - "name": "English", - "code": "en", - "longCode": "en" - }, - { - "name": "English", - "code": "en", - "longCode": "en" - }, - { - "name": "English (Australian)", - "code": "en", - "longCode": "en-AU" - }, - { - "name": "English (Australian)", - "code": "en", - "longCode": "en-AU" - }, - { - "name": "English (Canadian)", - "code": "en", - "longCode": "en-CA" - }, - { - "name": "English (Canadian)", - "code": "en", - "longCode": "en-CA" - }, - { - "name": "English (GB)", - "code": "en", - "longCode": "en-GB" - }, - { - "name": "English (GB)", - "code": "en", - "longCode": "en-GB" - }, - { - "name": "English (New Zealand)", - "code": "en", - "longCode": "en-NZ" - }, - { - "name": "English (New Zealand)", - "code": "en", - "longCode": "en-NZ" - }, - { - "name": "English (South African)", - "code": "en", - "longCode": "en-ZA" - }, - { - "name": "English (South African)", - "code": "en", - "longCode": "en-ZA" - }, - { - "name": "English (US)", - "code": "en", - "longCode": "en-US" - }, - { - "name": "English (US)", - "code": "en", - "longCode": "en-US" - }, - { - "name": "Esperanto", - "code": "eo", - "longCode": "eo" - }, - { - "name": "French", - "code": "fr", - "longCode": "fr" - }, - { - "name": "French", - "code": "fr", - "longCode": "fr" - }, - { - "name": "Galician", - "code": "gl", - "longCode": "gl-ES" - }, - { - "name": "German", - "code": "de", - "longCode": "de" - }, - { - "name": "German", - "code": "de", - "longCode": "de" - }, - { - "name": "German (Austria)", - "code": "de", - "longCode": "de-AT" - }, - { - "name": "German (Austria)", - "code": "de", - "longCode": "de-AT" - }, - { - "name": "German (Germany)", - "code": "de", - "longCode": "de-DE" - }, - { - "name": "German (Germany)", - "code": "de", - "longCode": "de-DE" - }, - { - "name": "German (Swiss)", - "code": "de", - "longCode": "de-CH" - }, - { - "name": "German (Swiss)", - "code": "de", - "longCode": "de-CH" - }, - { - "name": "Greek", - "code": "el", - "longCode": "el-GR" - }, - { - "name": "Irish", - "code": "ga", - "longCode": "ga-IE" - }, - { - "name": "Italian", - "code": "it", - "longCode": "it" - }, - { - "name": "Japanese", - "code": "ja", - "longCode": "ja-JP" - }, - { - "name": "Khmer", - "code": "km", - "longCode": "km-KH" - }, - { - "name": "Norwegian (Bokmål)", - "code": "nb", - "longCode": "nb" - }, - { - "name": "Norwegian (Bokmål)", - "code": "no", - "longCode": "no" - }, - { - "name": "Persian", - "code": "fa", - "longCode": "fa" - }, - { - "name": "Polish", - "code": "pl", - "longCode": "pl-PL" - }, - { - "name": "Portuguese", - "code": "pt", - "longCode": "pt" - }, - { - "name": "Portuguese (Angola preAO)", - "code": "pt", - "longCode": "pt-AO" - }, - { - "name": "Portuguese (Brazil)", - "code": "pt", - "longCode": "pt-BR" - }, - { - "name": "Portuguese (Moçambique preAO)", - "code": "pt", - "longCode": "pt-MZ" - }, - { - "name": "Portuguese (Portugal)", - "code": "pt", - "longCode": "pt-PT" - }, - { - "name": "Romanian", - "code": "ro", - "longCode": "ro-RO" - }, - { - "name": "Russian", - "code": "ru", - "longCode": "ru-RU" - }, - { - "name": "Simple German", - "code": "de-DE-x-simple-language", - "longCode": "de-DE-x-simple-language" - }, - { - "name": "Slovak", - "code": "sk", - "longCode": "sk-SK" - }, - { - "name": "Slovenian", - "code": "sl", - "longCode": "sl-SI" - }, - { - "name": "Spanish", - "code": "es", - "longCode": "es" - }, - { - "name": "Spanish", - "code": "es", - "longCode": "es" - }, - { - "name": "Spanish (voseo)", - "code": "es", - "longCode": "es-AR" - }, - { - "name": "Swedish", - "code": "sv", - "longCode": "sv" - }, - { - "name": "Tagalog", - "code": "tl", - "longCode": "tl-PH" - }, - { - "name": "Tamil", - "code": "ta", - "longCode": "ta-IN" - }, - { - "name": "Ukrainian", - "code": "uk", - "longCode": "uk-UA" - } -] \ No newline at end of file diff --git a/app/src/main/java/eu/faircode/email/LanguageTool.java b/app/src/main/java/eu/faircode/email/LanguageTool.java index 04860ebd9e..6fab8ba19c 100644 --- a/app/src/main/java/eu/faircode/email/LanguageTool.java +++ b/app/src/main/java/eu/faircode/email/LanguageTool.java @@ -53,6 +53,8 @@ public class LanguageTool { static final String LT_URI_PLUS = "https://api.languagetoolplus.com/v2/"; private static final int LT_TIMEOUT = 20; // seconds + private static JSONArray jlanguages = null; + static boolean isEnabled(Context context) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); return prefs.getBoolean("lt_enabled", false); @@ -65,6 +67,37 @@ public class LanguageTool { return (lt_enabled && lt_auto); } + static JSONArray getLanguages(Context context) throws IOException, JSONException { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + String lt_uri = prefs.getString("lt_uri", LT_URI_PLUS); + + // https://languagetool.org/http-api/swagger-ui/#!/default/get_words + Uri uri = Uri.parse(lt_uri).buildUpon().appendPath("languages").build(); + Log.i("LT uri=" + uri); + + URL url = new URL(uri.toString()); + HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.setDoOutput(false); + connection.setReadTimeout(LT_TIMEOUT * 1000); + connection.setConnectTimeout(LT_TIMEOUT * 1000); + ConnectionHelper.setUserAgent(context, connection); + connection.setRequestProperty("Accept", "application/json"); + connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + connection.connect(); + + try { + checkStatus(connection); + + String response = Helper.readStream(connection.getInputStream()); + Log.i("LT response=" + response); + + return new JSONArray(response); + } finally { + connection.disconnect(); + } + } + static List getSuggestions(Context context, CharSequence text) throws IOException, JSONException { if (TextUtils.isEmpty(text)) return new ArrayList<>(); @@ -82,11 +115,8 @@ public class LanguageTool { .appendQueryParameter("language", "auto"); // curl -X GET --header 'Accept: application/json' 'https://api.languagetool.org/v2/languages' - JSONArray jlanguages; - try (InputStream is = context.getAssets().open("lt.json")) { - String json = Helper.readStream(is); - jlanguages = new JSONArray(json); - } + if (jlanguages == null) + jlanguages = getLanguages(context); List locales = new ArrayList<>(); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N)