From 44b0a3367a1e6e920ba7db1677ced31c80c897ef Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 11 Jan 2025 09:07:39 +0100 Subject: [PATCH] Added body parameter to URL rule --- .../java/eu/faircode/email/EntityRule.java | 12 +++++---- .../java/eu/faircode/email/FragmentRule.java | 25 +++++++++++++++++++ app/src/main/res/layout/fragment_rule.xml | 17 +++++++++++-- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java index b7476e1700..ed3fe6f055 100644 --- a/app/src/main/java/eu/faircode/email/EntityRule.java +++ b/app/src/main/java/eu/faircode/email/EntityRule.java @@ -1514,6 +1514,7 @@ public class EntityRule { private boolean onActionUrl(Context context, EntityMessage message, JSONObject jargs, String html) throws JSONException, IOException { String url = jargs.getString("url"); String method = jargs.optString("method"); + String body = (jargs.isNull("body") ? null : jargs.optString("body")); if (TextUtils.isEmpty(method)) method = "GET"; @@ -1534,11 +1535,12 @@ public class EntityRule { url = url.replace("$" + EXTRA_SUBJECT + "$", Uri.encode(message.subject == null ? "" : message.subject)); url = url.replace("$" + EXTRA_RECEIVED + "$", Uri.encode(DTF.format(message.received))); - String body = null; - if ("POST".equals(method) || "PUT".equals(method)) { - Uri u = Uri.parse(url); - body = u.getQuery(); - url = u.buildUpon().clearQuery().build().toString(); + if (!TextUtils.isEmpty(body)) { + body = body.replace("$" + EXTRA_RULE + "$", name == null ? "" : name); + body = body.replace("$" + EXTRA_SENDER + "$", address == null ? "" : address); + body = body.replace("$" + EXTRA_NAME + "$", personal == null ? "" : personal); + body = body.replace("$" + EXTRA_SUBJECT + "$", message.subject == null ? "" : message.subject); + body = body.replace("$" + EXTRA_RECEIVED + "$", DTF.format(message.received)); } Log.i("GET " + url); diff --git a/app/src/main/java/eu/faircode/email/FragmentRule.java b/app/src/main/java/eu/faircode/email/FragmentRule.java index c9771686bd..eb6074a2c0 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRule.java +++ b/app/src/main/java/eu/faircode/email/FragmentRule.java @@ -184,6 +184,7 @@ public class FragmentRule extends FragmentBase { private Spinner spUrlMethod; private EditText etUrl; + private EditText etContent; private TextView tvUrlHint; private BottomNavigationView bottom_navigation; @@ -392,6 +393,7 @@ public class FragmentRule extends FragmentBase { spUrlMethod = view.findViewById(R.id.spUrlMethod); etUrl = view.findViewById(R.id.etUrl); + etContent = view.findViewById(R.id.etContent); tvUrlHint = view.findViewById(R.id.tvUrlHint); bottom_navigation = view.findViewById(R.id.bottom_navigation); @@ -896,6 +898,27 @@ public class FragmentRule extends FragmentBase { } }); + etContent.setEnabled(false); + spUrlMethod.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + String method = null; + try { + String[] methods = getResources().getStringArray(R.array.httpMethodNames); + if (position >= 0 && position < methods.length) + method = methods[position]; + } catch (Throwable ex) { + Log.e(ex); + } + etContent.setEnabled("POST".equals(method) || "PUT".equals(method)); + } + + @Override + public void onNothingSelected(AdapterView parent) { + etContent.setEnabled(false); + } + }); + List extras = new ArrayList<>(); for (String extra : EntityRule.EXTRA_ALL) extras.add("$" + extra + "$"); @@ -1475,6 +1498,7 @@ public class FragmentRule extends FragmentBase { case EntityRule.TYPE_URL: etUrl.setText(jaction.getString("url")); + etContent.setText(jaction.getString("body")); String method = jaction.optString("method"); if (TextUtils.isEmpty(method)) method = "GET"; @@ -1911,6 +1935,7 @@ public class FragmentRule extends FragmentBase { case EntityRule.TYPE_URL: jaction.put("url", etUrl.getText().toString().trim()); + jaction.put("body", etContent.getText().toString()); int pos = spUrlMethod.getSelectedItemPosition(); String[] methods = getResources().getStringArray(R.array.httpMethodNames); if (pos >= 0 && pos < methods.length) diff --git a/app/src/main/res/layout/fragment_rule.xml b/app/src/main/res/layout/fragment_rule.xml index ad5cde450e..be6881dec6 100644 --- a/app/src/main/res/layout/fragment_rule.xml +++ b/app/src/main/res/layout/fragment_rule.xml @@ -1449,12 +1449,25 @@ android:id="@+id/etUrl" android:layout_width="0dp" android:layout_height="wrap_content" + android:hint="https://..." android:inputType="textUri" android:textAppearance="@style/TextAppearance.AppCompat.Medium" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/spUrlMethod" /> + + + app:layout_constraintTop_toBottomOf="@+id/etContent" /> + app:constraint_referenced_ids="tvUrl,spUrlMethod,etUrl,etContent,tvUrlHint" />