Mark contacts as not junk

This commit is contained in:
M66B 2021-09-04 17:28:15 +02:00
parent 4d89cfa8cd
commit 712e96c5e0
4 changed files with 75 additions and 2 deletions

View File

@ -126,6 +126,9 @@ public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHold
} else if (contact.type == EntityContact.TYPE_TO) {
ivType.setImageResource(R.drawable.twotone_call_made_24);
ivType.setContentDescription(context.getString(R.string.title_accessibility_to));
} else if (contact.type == EntityContact.TYPE_NO_JUNK) {
ivType.setImageResource(R.drawable.twotone_report_off_24);
ivType.setContentDescription(context.getString(R.string.title_no_junk));
} else {
ivType.setImageDrawable(null);
ivType.setContentDescription(null);

View File

@ -1282,11 +1282,43 @@ class Core {
imessage.setFlag(Flags.Flag.FLAGGED, false);
// Mark not spam
if (EntityFolder.JUNK.equals(folder.type)
&& ifolder.getPermanentFlags().contains(Flags.Flag.USER)) {
if (EntityFolder.JUNK.equals(folder.type) &&
ifolder.getPermanentFlags().contains(Flags.Flag.USER)) {
Flags notJunk = new Flags(MessageHelper.FLAG_NOT_JUNK);
imessage.setFlags(notJunk, true);
}
EntityMessage message = map.get(imessage);
if (message != null && message.from != null) {
for (Address from : message.from) {
String email = ((InternetAddress) from).getAddress();
if (TextUtils.isEmpty(email))
continue;
if (EntityFolder.JUNK.equals(folder.type)) {
// From junk
long now = new Date().getTime();
EntityContact contact = db.contact().getContact(message.account, EntityContact.TYPE_NO_JUNK, email);
if (contact == null) {
contact = new EntityContact();
contact.account = message.account;
contact.name = ((InternetAddress) from).getPersonal();
contact.email = email;
contact.type = EntityContact.TYPE_NO_JUNK;
contact.first_contacted = now;
contact.last_contacted = now;
contact.times_contacted = 1;
db.contact().insertContact(contact);
} else {
contact.times_contacted++;
contact.last_contacted = now;
db.contact().updateContact(contact);
}
} else if (EntityFolder.JUNK.equals(target.type)) {
// To junk
int count = db.contact().deleteContact(message.account, EntityContact.TYPE_NO_JUNK, email);
}
}
}
}
// https://tools.ietf.org/html/rfc6851
@ -3543,6 +3575,21 @@ class Core {
message.warning = Log.formatThrowable(ex, false);
}
boolean notJunk = false;
if (message.from != null)
for (Address from : message.from) {
String email = ((InternetAddress) from).getAddress();
if (TextUtils.isEmpty(email))
continue;
EntityContact contact = db.contact().getContact(message.account, EntityContact.TYPE_NO_JUNK, email);
if (contact != null) {
contact.times_contacted++;
contact.last_contacted = new Date().getTime();
db.contact().updateContact(contact);
notJunk = true;
}
}
boolean check_blocklist = prefs.getBoolean("check_blocklist", false);
if (check_blocklist &&
!have &&
@ -3550,6 +3597,7 @@ class Core {
!EntityFolder.ARCHIVE.equals(folder.type) &&
!EntityFolder.TRASH.equals(folder.type) &&
!EntityFolder.JUNK.equals(folder.type) &&
!notJunk &&
!Arrays.asList(message.keywords).contains(MessageHelper.FLAG_NOT_JUNK))
try {
message.blocklist = DnsBlockList.isJunk(context,

View File

@ -68,6 +68,7 @@ public class EntityContact implements Serializable {
static final int TYPE_TO = 0;
static final int TYPE_FROM = 1;
static final int TYPE_NO_JUNK = 3;
static final int STATE_DEFAULT = 0;
static final int STATE_FAVORITE = 1;

View File

@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M19,9.1L14.9,5H9.1l-0.22,0.22L11,7.33V7h2v2.33l5.78,5.79 0.22,-0.22zM6.05,8.04L5,9.1v5.8L9.1,19h5.8l1.05,-1.05 -9.9,-9.91zM13,16c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1 0.45,-1 1,-1 1,0.45 1,1z"
android:strokeAlpha="0.3"
android:fillAlpha="0.3"/>
<path
android:fillColor="@android:color/white"
android:pathData="M9.1,5h5.8L19,9.1v5.8l-0.22,0.22 1.42,1.41 0.8,-0.8V8.27L15.73,3H8.27l-0.8,0.8 1.41,1.42z"/>
<path
android:fillColor="@android:color/white"
android:pathData="M12,16m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"/>
<path
android:fillColor="@android:color/white"
android:pathData="M13,7h-2v0.33l2,2zM2.41,1.58L1,2.99l3.64,3.64L3,8.27v7.46L8.27,21h7.46l1.64,-1.64L21.01,23l1.41,-1.41L2.41,1.58zM14.9,19H9.1L5,14.9V9.1l1.05,-1.05 9.9,9.9L14.9,19z"/>
</vector>