diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java
index 36a43e9338..e439531fbb 100644
--- a/app/src/main/java/eu/faircode/email/EntityRule.java
+++ b/app/src/main/java/eu/faircode/email/EntityRule.java
@@ -200,6 +200,13 @@ public class EntityRule {
return false;
}
+ // Attachments
+ if (jcondition.optBoolean("attachments")) {
+ DB db = DB.getInstance(context);
+ if (db.attachment().getAttachments(message.id).size() == 0)
+ return false;
+ }
+
// Header
JSONObject jheader = jcondition.optJSONObject("header");
if (jheader != null && imessage != null) {
@@ -238,7 +245,12 @@ public class EntityRule {
}
// Safeguard
- if (jsender == null && jrecipient == null && jsubject == null && jheader == null && jschedule == null)
+ if (jsender == null &&
+ jrecipient == null &&
+ jsubject == null &&
+ !jcondition.optBoolean("attachments") &&
+ jheader == null &&
+ jschedule == null)
return false;
} catch (JSONException ex) {
Log.e(ex);
diff --git a/app/src/main/java/eu/faircode/email/FragmentRule.java b/app/src/main/java/eu/faircode/email/FragmentRule.java
index ae039c5539..2dcc0a0346 100644
--- a/app/src/main/java/eu/faircode/email/FragmentRule.java
+++ b/app/src/main/java/eu/faircode/email/FragmentRule.java
@@ -97,6 +97,8 @@ public class FragmentRule extends FragmentBase {
private EditText etSubject;
private CheckBox cbSubject;
+ private CheckBox cbAttachments;
+
private EditText etHeader;
private CheckBox cbHeader;
@@ -201,6 +203,8 @@ public class FragmentRule extends FragmentBase {
etSubject = view.findViewById(R.id.etSubject);
cbSubject = view.findViewById(R.id.cbSubject);
+ cbAttachments = view.findViewById(R.id.cbAttachments);
+
etHeader = view.findViewById(R.id.etHeader);
cbHeader = view.findViewById(R.id.cbHeader);
@@ -643,6 +647,8 @@ public class FragmentRule extends FragmentBase {
etSubject.setText(jsubject == null ? args.getString("subject") : jsubject.getString("value"));
cbSubject.setChecked(jsubject != null && jsubject.getBoolean("regex"));
+ cbAttachments.setChecked(jcondition.optBoolean("attachments"));
+
etHeader.setText(jheader == null ? null : jheader.getString("value"));
cbHeader.setChecked(jheader != null && jheader.getBoolean("regex"));
@@ -837,7 +843,12 @@ public class FragmentRule extends FragmentBase {
JSONObject jheader = jcondition.optJSONObject("header");
JSONObject jschedule = jcondition.optJSONObject("schedule");
- if (jsender == null && jrecipient == null && jsubject == null && jheader == null && jschedule == null)
+ if (jsender == null &&
+ jrecipient == null &&
+ jsubject == null &&
+ !jcondition.optBoolean("attachments") &&
+ jheader == null &&
+ jschedule == null)
throw new IllegalArgumentException(context.getString(R.string.title_rule_condition_missing));
if (TextUtils.isEmpty(order))
@@ -916,6 +927,8 @@ public class FragmentRule extends FragmentBase {
jcondition.put("subject", jsubject);
}
+ jcondition.put("attachments", cbAttachments.isChecked());
+
String header = etHeader.getText().toString();
if (!TextUtils.isEmpty(header)) {
JSONObject jheader = new JSONObject();
diff --git a/app/src/main/res/layout/fragment_rule.xml b/app/src/main/res/layout/fragment_rule.xml
index 430d81e309..837fdfb9c9 100644
--- a/app/src/main/res/layout/fragment_rule.xml
+++ b/app/src/main/res/layout/fragment_rule.xml
@@ -303,13 +303,41 @@
app:layout_constraintTop_toBottomOf="@+id/etSubject" />
+
+
+
+
+
+
Sender is a contact
Recipient contains
Subject contains
+ Has attachments
Header contains
Time between
Regex