From 3c9fb0da26aa9777cbd2dbdbf48c0da6fa2155c2 Mon Sep 17 00:00:00 2001
From: 0xd9a <0xd9a@noreply.codeberg.org>
Date: Mon, 25 Oct 2021 20:30:37 +0530
Subject: [PATCH] Support scribe.rip
---
.../android/client/Entities/Status.java | 16 +++++++
.../fragments/ContentSettingsFragment.java | 48 +++++++++++++++++++
.../fedilab/android/helper/BaseHelper.java | 11 +++++
.../res/layout/fragment_settings_privacy.xml | 46 ++++++++++++++++++
app/src/main/res/values/strings.xml | 4 ++
5 files changed, 125 insertions(+)
diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Status.java b/app/src/main/java/app/fedilab/android/client/Entities/Status.java
index e00399538..fc163b56b 100644
--- a/app/src/main/java/app/fedilab/android/client/Entities/Status.java
+++ b/app/src/main/java/app/fedilab/android/client/Entities/Status.java
@@ -355,6 +355,22 @@ public class Status implements Parcelable {
}
}
+ matcher = Helper.mediumPattern.matcher(content);
+ boolean medium = Helper.getSharedValue(context, Helper.REPLACE_MEDIUM);
+ if (medium) {
+ while (matcher.find()) {
+ String path = matcher.group(2);
+ String user = matcher.group(1);
+ if (user != null && user.length() > 0 & !user.equals("www")) {
+ path = user + "/" + path;
+ }
+
+ String mediumReplaceHost = sharedpreferences.getString(Helper.REPLACE_MEDIUM_HOST, Helper.DEFAULT_REPLACE_MEDIUM_HOST).toLowerCase();
+ content = content.replaceAll("https://" + Pattern.quote(matcher.group()), Matcher.quoteReplacement("https://" + mediumReplaceHost + "/" + path));
+ content = content.replaceAll(">" + Pattern.quote(matcher.group()), Matcher.quoteReplacement(">" + mediumReplaceHost + "/" + path));
+ }
+ }
+
Pattern aLink = Pattern.compile("]*(((?!");
Matcher matcherALink = aLink.matcher(content);
int count = 0;
diff --git a/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java b/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java
index b4c400203..d4ddc8666 100644
--- a/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java
+++ b/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java
@@ -2256,6 +2256,54 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot
editor.apply();
}
});
+
+ EditText replace_medium_host_edit_text = rootView.findViewById(R.id.replace_medium_host);
+ boolean replace_medium = Helper.getSharedValue(context, Helper.REPLACE_MEDIUM);
+ final SwitchCompat replace_medium_switch = rootView.findViewById(R.id.replace_medium);
+ replace_medium_switch.setChecked(replace_medium);
+
+ replace_medium_switch.setOnClickListener(v -> {
+ SharedPreferences.Editor editor = sharedpreferences.edit();
+ editor.putBoolean(Helper.REPLACE_MEDIUM, replace_medium_switch.isChecked());
+ editor.apply();
+ if (replace_medium_switch.isChecked()) {
+ replace_medium_host_edit_text.setVisibility(View.VISIBLE);
+ } else {
+ replace_medium_host_edit_text.setVisibility(View.GONE);
+ }
+ });
+ if (replace_medium) {
+ replace_medium_host_edit_text.setVisibility(View.VISIBLE);
+ } else {
+ replace_medium_host_edit_text.setVisibility(View.GONE);
+ }
+
+ String replaceMediumHost = sharedpreferences.getString(Helper.REPLACE_MEDIUM_HOST, null);
+ if (replaceMediumHost != null) {
+ replace_medium_host_edit_text.setText(replaceMediumHost);
+ }
+ replace_medium_host_edit_text.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ SharedPreferences.Editor editor = sharedpreferences.edit();
+ if (s.toString().trim().length() > 0) {
+ editor.putString(Helper.REPLACE_MEDIUM_HOST, s.toString().toLowerCase().trim());
+ } else {
+ editor.putString(Helper.REPLACE_MEDIUM_HOST, null);
+ }
+ editor.apply();
+ }
+ });
} else if (type == MENU) {
rootView = inflater.inflate(R.layout.fragment_settings_menu, container, false);
diff --git a/app/src/main/java/app/fedilab/android/helper/BaseHelper.java b/app/src/main/java/app/fedilab/android/helper/BaseHelper.java
index 292663f4e..fa026d0a6 100644
--- a/app/src/main/java/app/fedilab/android/helper/BaseHelper.java
+++ b/app/src/main/java/app/fedilab/android/helper/BaseHelper.java
@@ -454,6 +454,10 @@ public class BaseHelper {
public static final String SET_LIBREDDIT_HOST = "set_libreddit_host";
public static final String DEFAULT_LIBREDDIT_HOST = "libredd.it";
+ public static final String REPLACE_MEDIUM = "replace_medium";
+ public static final String REPLACE_MEDIUM_HOST = "medium_replace_host";
+ public static final String DEFAULT_REPLACE_MEDIUM_HOST = "scribe.rip";
+
public static final String SET_NOTIF_VALIDATION = "set_share_validation";
public static final String SET_NOTIF_VALIDATION_FAV = "set_share_validation_fav";
public static final String SET_WIFI_ONLY = "set_wifi_only";
@@ -538,6 +542,7 @@ public class BaseHelper {
public static final Pattern libredditPattern = Pattern.compile("(www\\.|m\\.)?(reddit\\.com|preview\\.redd\\.it|i\\.redd\\.it|redd\\.it)/(((?!([\"'<])).)*)");
public static final Pattern ouichesPattern = Pattern.compile("https?://ouich\\.es/tag/(\\w+)");
public static final Pattern xmppPattern = Pattern.compile("xmpp:[-a-zA-Z0-9+$&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]");
+ public static final Pattern mediumPattern = Pattern.compile("([\\w@-]*)?\\.?medium.com/@?([/\\w-]+)");
//Default values
public final static int DEFAULT_VIDEO_WIDTH = 640;
public final static int DEFAULT_VIDEO_BITRATE = 450000;
@@ -4464,6 +4469,12 @@ public class BaseHelper {
} else {
return sharedpreferences.getBoolean(type, false);
}
+ } else if (type.compareTo(Helper.REPLACE_MEDIUM) == 0) {
+ if (BuildConfig.lite) {
+ return true;
+ } else {
+ return sharedpreferences.getBoolean(type, false);
+ }
} else if (type.compareTo(Helper.SET_CONSOLE_MODE) == 0) {
if (BuildConfig.lite) {
return false;
diff --git a/app/src/main/res/layout/fragment_settings_privacy.xml b/app/src/main/res/layout/fragment_settings_privacy.xml
index 2290a9b88..b99d4ae32 100644
--- a/app/src/main/res/layout/fragment_settings_privacy.xml
+++ b/app/src/main/res/layout/fragment_settings_privacy.xml
@@ -224,6 +224,52 @@
android:hint="@string/set_libreddit_host"
android:inputType="textWebEditText" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Libreddit is an open source alternative Reddit front-end focused on privacy.
Enter your custom host or leave blank for using libredd.it
+ Replace Medium links
+ Replace medium.com link with an open source alternative front-end focused on privacy.
+ Default: scribe.rip
+
Hide Fedilab notification bar
For hiding the remaining notification in the status bar, tap on the eye icon button then uncheck: \"Display in status bar\"
Use a push notifications system for getting notifications in real time.