From 2c5bb5aa58b21847a76dd327c70aafb0710f6649 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 1 Dec 2020 13:35:01 +0100 Subject: [PATCH] Support teddit --- .../activities/InstanceActivity.java | 23 ++++++++++++++++ .../nitterizeme/entities/Instance.java | 3 ++- .../fedilab/nitterizeme/helpers/Utils.java | 26 ++++++++++++------- .../viewmodels/SearchInstanceVM.java | 18 +++++++++++++ .../res/layout/activity_popup_instance.xml | 13 ++++++++++ app/src/main/res/layout/drawer_instance.xml | 4 +-- app/src/main/res/values/strings.xml | 1 + 7 files changed, 76 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/app/fedilab/nitterizeme/activities/InstanceActivity.java b/app/src/main/java/app/fedilab/nitterizeme/activities/InstanceActivity.java index 624ce03..fc38166 100644 --- a/app/src/main/java/app/fedilab/nitterizeme/activities/InstanceActivity.java +++ b/app/src/main/java/app/fedilab/nitterizeme/activities/InstanceActivity.java @@ -63,13 +63,16 @@ public class InstanceActivity extends AppCompatActivity { String invidiousHost = sharedpreferences.getString(MainActivity.SET_INVIDIOUS_HOST, MainActivity.DEFAULT_INVIDIOUS_HOST); String nitterHost = sharedpreferences.getString(MainActivity.SET_NITTER_HOST, MainActivity.DEFAULT_NITTER_HOST); String bibliogramHost = sharedpreferences.getString(MainActivity.SET_BIBLIOGRAM_HOST, MainActivity.DEFAULT_BIBLIOGRAM_HOST); + String tedditHost = sharedpreferences.getString(MainActivity.SET_TEDDIT_HOST, MainActivity.DEFAULT_TEDDIT_HOST); ArrayList invidiousInstances = new ArrayList<>(); ArrayList nitterInstances = new ArrayList<>(); ArrayList bibliogramInstances = new ArrayList<>(); + ArrayList tedditInstances = new ArrayList<>(); boolean customInvidiousInstance = true; boolean customNitterInstance = true; boolean customBibliogramInstance = true; + boolean customTedditInstance = true; for (Instance instance : result) { if (instance.getType() == Instance.instanceType.INVIDIOUS) { invidiousInstances.add(instance); @@ -86,6 +89,11 @@ public class InstanceActivity extends AppCompatActivity { if (bibliogramHost != null && bibliogramHost.trim().toLowerCase().compareTo(instance.getDomain()) == 0) { customBibliogramInstance = false; } + } else if (instance.getType() == Instance.instanceType.TEDDIT) { + tedditInstances.add(instance); + if (tedditHost != null && tedditHost.trim().toLowerCase().compareTo(instance.getDomain()) == 0) { + customTedditInstance = false; + } } } //Check if custom instances are also added @@ -110,6 +118,13 @@ public class InstanceActivity extends AppCompatActivity { instance.setLocale("--"); bibliogramInstances.add(0, instance); } + if (customTedditInstance) { + Instance instance = new Instance(); + instance.setChecked(true); + instance.setDomain(tedditHost); + instance.setLocale("--"); + tedditInstances.add(0, instance); + } binding.instanceContainer.setVisibility(View.VISIBLE); binding.loader.setVisibility(View.GONE); @@ -132,6 +147,14 @@ public class InstanceActivity extends AppCompatActivity { binding.bibliogramInstances.setLayoutManager(bLayoutManager); binding.bibliogramInstances.setNestedScrollingEnabled(false); + + final LinearLayoutManager tLayoutManager = new LinearLayoutManager(this); + InstanceAdapter tedditAdapter = new InstanceAdapter(tedditInstances); + binding.tedditInstances.setAdapter(tedditAdapter); + binding.tedditInstances.setLayoutManager(tLayoutManager); + binding.tedditInstances.setNestedScrollingEnabled(false); + + binding.latencyTest.setOnClickListener(v -> { invidiousAdapter.evalLatency(); nitterAdapter.evalLatency(); diff --git a/app/src/main/java/app/fedilab/nitterizeme/entities/Instance.java b/app/src/main/java/app/fedilab/nitterizeme/entities/Instance.java index 767f4a5..3a7ddbf 100644 --- a/app/src/main/java/app/fedilab/nitterizeme/entities/Instance.java +++ b/app/src/main/java/app/fedilab/nitterizeme/entities/Instance.java @@ -74,6 +74,7 @@ public class Instance { public enum instanceType { INVIDIOUS, NITTER, - BIBLIOGRAM + BIBLIOGRAM, + TEDDIT } } diff --git a/app/src/main/java/app/fedilab/nitterizeme/helpers/Utils.java b/app/src/main/java/app/fedilab/nitterizeme/helpers/Utils.java index ae70c2a..d95176e 100644 --- a/app/src/main/java/app/fedilab/nitterizeme/helpers/Utils.java +++ b/app/src/main/java/app/fedilab/nitterizeme/helpers/Utils.java @@ -673,6 +673,21 @@ public class Utils { return timeDifference; } + + /** + * Remove unwanted redirects from Google - recursive removal + * + * @param url String initial url + * @return String url without Google redirects + */ + private static String removeGoogleRedirects(String url) { + Matcher matcher = googleRedirect.matcher(url); + if (matcher.find()) { + return remove_tracking_param(matcher.group(5)); + } + return url; + } + /** * Clean URLs from utm parameters * @@ -689,14 +704,7 @@ public class Utils { url = url.replaceAll("#" + utm + "=" + urlRegex, ""); } try { - Matcher matcher = googleRedirect.matcher(url); - if (matcher.find()) { - url = matcher.group(5); - } - matcher = googleRedirect.matcher(url); - if (matcher.find()) { - url = matcher.group(5); - } + url = removeGoogleRedirects(url); URL redirectURL = new URL(url); String host = redirectURL.getHost(); if (host != null) { @@ -984,7 +992,7 @@ public class Utils { if (Objects.requireNonNull(matcher.group(2)).compareTo("preview.redd.it") == 0 || Objects.requireNonNull(matcher.group(2)).compareTo("i.redd.it") == 0 ) { - newUrlFinal = scheme + tedditHost + "/pics/w:null_" + redditPath.split("\\?")[0]; + newUrlFinal = scheme + tedditHost + "/pics/w:null_" + (redditPath != null ? redditPath.split("\\?|%26")[0] : "null"); } else { newUrlFinal = scheme + tedditHost + "/" + redditPath; } diff --git a/app/src/main/java/app/fedilab/nitterizeme/viewmodels/SearchInstanceVM.java b/app/src/main/java/app/fedilab/nitterizeme/viewmodels/SearchInstanceVM.java index d2711d1..164193a 100644 --- a/app/src/main/java/app/fedilab/nitterizeme/viewmodels/SearchInstanceVM.java +++ b/app/src/main/java/app/fedilab/nitterizeme/viewmodels/SearchInstanceVM.java @@ -42,9 +42,11 @@ import static app.fedilab.nitterizeme.activities.MainActivity.APP_PREFS; import static app.fedilab.nitterizeme.activities.MainActivity.DEFAULT_BIBLIOGRAM_HOST; import static app.fedilab.nitterizeme.activities.MainActivity.DEFAULT_INVIDIOUS_HOST; import static app.fedilab.nitterizeme.activities.MainActivity.DEFAULT_NITTER_HOST; +import static app.fedilab.nitterizeme.activities.MainActivity.DEFAULT_TEDDIT_HOST; import static app.fedilab.nitterizeme.activities.MainActivity.SET_BIBLIOGRAM_HOST; import static app.fedilab.nitterizeme.activities.MainActivity.SET_INVIDIOUS_HOST; import static app.fedilab.nitterizeme.activities.MainActivity.SET_NITTER_HOST; +import static app.fedilab.nitterizeme.activities.MainActivity.SET_TEDDIT_HOST; public class SearchInstanceVM extends AndroidViewModel { private MutableLiveData> instancesMLD; @@ -100,12 +102,14 @@ public class SearchInstanceVM extends AndroidViewModel { SharedPreferences sharedpreferences = getApplication().getApplicationContext().getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE); String defaultInvidious = sharedpreferences.getString(SET_INVIDIOUS_HOST, DEFAULT_INVIDIOUS_HOST); String defaultNitter = sharedpreferences.getString(SET_NITTER_HOST, DEFAULT_NITTER_HOST); + String defaultTeddit = sharedpreferences.getString(SET_TEDDIT_HOST, DEFAULT_TEDDIT_HOST); if (response != null) { try { JSONObject jsonObject = new JSONObject(response); JSONArray jsonArrayInvidious = jsonObject.getJSONArray("invidious"); JSONArray jsonArrayNitter = jsonObject.getJSONArray("nitter"); + JSONArray jsonArrayTeddit = jsonObject.getJSONArray("teddit"); for (int i = 0; i < jsonArrayInvidious.length(); i++) { Instance instance = new Instance(); String domain = jsonArrayInvidious.getJSONObject(i).getString("domain"); @@ -134,6 +138,20 @@ public class SearchInstanceVM extends AndroidViewModel { } instances.add(instance); } + for (int i = 0; i < jsonArrayTeddit.length(); i++) { + Instance instance = new Instance(); + String domain = jsonArrayTeddit.getJSONObject(i).getString("domain"); + boolean cloudFlare = jsonArrayTeddit.getJSONObject(i).getBoolean("cloudflare"); + String locale = jsonArrayTeddit.getJSONObject(i).getString("locale"); + instance.setDomain(domain); + instance.setCloudflare(cloudFlare); + instance.setLocale(locale); + instance.setType(Instance.instanceType.TEDDIT); + if (defaultTeddit != null && domain.compareTo(defaultTeddit) == 0) { + instance.setChecked(true); + } + instances.add(instance); + } } catch (JSONException e) { e.printStackTrace(); } diff --git a/app/src/main/res/layout/activity_popup_instance.xml b/app/src/main/res/layout/activity_popup_instance.xml index b94875e..35e4f6f 100644 --- a/app/src/main/res/layout/activity_popup_instance.xml +++ b/app/src/main/res/layout/activity_popup_instance.xml @@ -62,6 +62,19 @@ android:id="@+id/bibliogram_instances" android:layout_width="match_parent" android:layout_height="wrap_content" /> + + + + diff --git a/app/src/main/res/layout/drawer_instance.xml b/app/src/main/res/layout/drawer_instance.xml index f162bdd..c9372cc 100644 --- a/app/src/main/res/layout/drawer_instance.xml +++ b/app/src/main/res/layout/drawer_instance.xml @@ -44,8 +44,8 @@ android:id="@+id/locale" android:layout_width="wrap_content" android:layout_height="0dp" - android:layout_marginEnd="2dp" - android:layout_marginRight="2dp" + android:layout_marginEnd="5dp" + android:layout_marginRight="5dp" android:gravity="center_vertical" android:textAllCaps="true" app:layout_constraintBottom_toTopOf="@id/barrier_latency_top" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a4cb96a..24e3ae2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -64,6 +64,7 @@ Invidious instances Nitter instances Bibliogram instances + Teddit instances Latency Check your Internet connection Instance: