mirror of https://github.com/M66B/FairEmail.git
Added option to filter messages of unknown senders
This commit is contained in:
parent
9e7c2ddcec
commit
8c2850ffe4
|
@ -41,6 +41,7 @@ public interface DaoMessage {
|
|||
|
||||
String is_drafts = "folder.type = '" + EntityFolder.DRAFTS + "'";
|
||||
String is_outbox = "folder.type = '" + EntityFolder.OUTBOX + "'";
|
||||
String is_sent = "folder.type = '" + EntityFolder.SENT + "'";
|
||||
|
||||
@Query("SELECT message.*" +
|
||||
", account.pop AS accountProtocol, account.name AS accountName, COALESCE(identity.color, folder.color, account.color) AS accountColor" +
|
||||
|
@ -77,6 +78,7 @@ public interface DaoMessage {
|
|||
" ELSE SUM(CASE WHEN folder.type = :type THEN 1 ELSE 0 END) > 0 END)" +
|
||||
" AND (NOT :filter_seen OR SUM(1 - message.ui_seen) > 0)" +
|
||||
" AND (NOT :filter_unflagged OR COUNT(message.id) - SUM(1 - message.ui_flagged) > 0)" +
|
||||
" AND (NOT :filter_unknown OR (message.avatar IS NOT NULL AND message.sender <> identity.email))" +
|
||||
" AND (NOT :filter_snoozed OR message.ui_snoozed IS NULL OR " + is_drafts + ")" +
|
||||
" ORDER BY -IFNULL(MAX(message.importance), 1)" +
|
||||
", CASE" +
|
||||
|
@ -96,7 +98,7 @@ public interface DaoMessage {
|
|||
String type,
|
||||
boolean threading,
|
||||
String sort, boolean ascending,
|
||||
boolean filter_seen, boolean filter_unflagged, boolean filter_snoozed,
|
||||
boolean filter_seen, boolean filter_unflagged, boolean filter_unknown, boolean filter_snoozed,
|
||||
boolean found,
|
||||
boolean debug);
|
||||
|
||||
|
@ -130,6 +132,8 @@ public interface DaoMessage {
|
|||
" HAVING SUM(CASE WHEN folder.id = :folder THEN 1 ELSE 0 END) > 0" +
|
||||
" AND (NOT :filter_seen OR SUM(1 - message.ui_seen) > 0 OR " + is_outbox + ")" +
|
||||
" AND (NOT :filter_unflagged OR COUNT(message.id) - SUM(1 - message.ui_flagged) > 0 OR " + is_outbox + ")" +
|
||||
" AND (NOT :filter_unknown OR (message.avatar IS NOT NULL AND message.sender <> identity.email)" +
|
||||
" OR " + is_outbox + " OR " + is_drafts + " OR " + is_sent + ")" +
|
||||
" AND (NOT :filter_snoozed OR message.ui_snoozed IS NULL OR " + is_outbox + " OR " + is_drafts + ")" +
|
||||
" ORDER BY -IFNULL(MAX(message.importance), 1)" +
|
||||
", CASE" +
|
||||
|
@ -148,7 +152,7 @@ public interface DaoMessage {
|
|||
DataSource.Factory<Integer, TupleMessageEx> pagedFolder(
|
||||
long folder, boolean threading,
|
||||
String sort, boolean ascending,
|
||||
boolean filter_seen, boolean filter_unflagged, boolean filter_snoozed,
|
||||
boolean filter_seen, boolean filter_unflagged, boolean filter_unknown, boolean filter_snoozed,
|
||||
boolean found,
|
||||
boolean debug);
|
||||
|
||||
|
|
|
@ -116,7 +116,7 @@ public class EntityMessage implements Serializable {
|
|||
public Boolean dmarc;
|
||||
public Boolean mx = null;
|
||||
public String avatar; // lookup URI from sender
|
||||
public String sender; // sort key
|
||||
public String sender; // sort key: from email address
|
||||
public Address[] submitter;
|
||||
public Address[] from;
|
||||
public Address[] to;
|
||||
|
|
|
@ -3066,6 +3066,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
|||
viewType == AdapterMessage.ViewType.THREAD ? "ascending_thread" : "ascending_list", false);
|
||||
boolean filter_seen = prefs.getBoolean("filter_seen", false);
|
||||
boolean filter_unflagged = prefs.getBoolean("filter_unflagged", false);
|
||||
boolean filter_unknown = prefs.getBoolean("filter_unknown", false);
|
||||
boolean filter_snoozed = prefs.getBoolean("filter_snoozed", true);
|
||||
boolean filter_duplicates = prefs.getBoolean("filter_duplicates", true);
|
||||
boolean compact = prefs.getBoolean("compact", false);
|
||||
|
@ -3129,10 +3130,12 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
|||
menu.findItem(R.id.menu_filter).setVisible(viewType != AdapterMessage.ViewType.SEARCH && !outbox);
|
||||
menu.findItem(R.id.menu_filter_seen).setVisible(viewType != AdapterMessage.ViewType.THREAD);
|
||||
menu.findItem(R.id.menu_filter_unflagged).setVisible(viewType != AdapterMessage.ViewType.THREAD);
|
||||
menu.findItem(R.id.menu_filter_unknown).setVisible(viewType != AdapterMessage.ViewType.THREAD);
|
||||
menu.findItem(R.id.menu_filter_snoozed).setVisible(viewType != AdapterMessage.ViewType.THREAD && canSnooze);
|
||||
menu.findItem(R.id.menu_filter_duplicates).setVisible(viewType == AdapterMessage.ViewType.THREAD);
|
||||
menu.findItem(R.id.menu_filter_seen).setChecked(filter_seen);
|
||||
menu.findItem(R.id.menu_filter_unflagged).setChecked(filter_unflagged);
|
||||
menu.findItem(R.id.menu_filter_unknown).setChecked(filter_unknown);
|
||||
menu.findItem(R.id.menu_filter_snoozed).setChecked(filter_snoozed);
|
||||
menu.findItem(R.id.menu_filter_duplicates).setChecked(filter_duplicates);
|
||||
|
||||
|
@ -3226,6 +3229,10 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
|||
onMenuFilter("filter_unflagged", !item.isChecked());
|
||||
return true;
|
||||
|
||||
case R.id.menu_filter_unknown:
|
||||
onMenuFilter("filter_unknown", !item.isChecked());
|
||||
return true;
|
||||
|
||||
case R.id.menu_filter_snoozed:
|
||||
onMenuFilter("filter_snoozed", !item.isChecked());
|
||||
return true;
|
||||
|
@ -4137,7 +4144,8 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
|||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
boolean filter_seen = prefs.getBoolean("filter_seen", false);
|
||||
boolean filter_unflagged = prefs.getBoolean("filter_unflagged", false);
|
||||
return (filter_seen || filter_unflagged);
|
||||
boolean filter_unknown = prefs.getBoolean("filter_unknown", false);
|
||||
return (filter_seen || filter_unflagged || filter_unknown);
|
||||
}
|
||||
|
||||
private ActivityBase.IKeyPressedListener onBackPressedListener = new ActivityBase.IKeyPressedListener() {
|
||||
|
|
|
@ -93,7 +93,10 @@ public class ViewModelMessages extends ViewModel {
|
|||
args.type,
|
||||
args.threading,
|
||||
args.sort, args.ascending,
|
||||
args.filter_seen, args.filter_unflagged, args.filter_snoozed,
|
||||
args.filter_seen,
|
||||
args.filter_unflagged,
|
||||
args.filter_unknown,
|
||||
args.filter_snoozed,
|
||||
false,
|
||||
args.debug),
|
||||
LOCAL_PAGE_SIZE);
|
||||
|
@ -109,7 +112,10 @@ public class ViewModelMessages extends ViewModel {
|
|||
db.message().pagedFolder(
|
||||
args.folder, args.threading,
|
||||
args.sort, args.ascending,
|
||||
args.filter_seen, args.filter_unflagged, args.filter_snoozed,
|
||||
args.filter_seen,
|
||||
args.filter_unflagged,
|
||||
args.filter_unknown,
|
||||
args.filter_snoozed,
|
||||
false,
|
||||
args.debug),
|
||||
configFolder);
|
||||
|
@ -136,7 +142,7 @@ public class ViewModelMessages extends ViewModel {
|
|||
null,
|
||||
args.threading,
|
||||
"time", false,
|
||||
false, false, false,
|
||||
false, false, false, false,
|
||||
true,
|
||||
args.debug),
|
||||
configSearch);
|
||||
|
@ -145,7 +151,7 @@ public class ViewModelMessages extends ViewModel {
|
|||
db.message().pagedFolder(
|
||||
args.folder, args.threading,
|
||||
"time", false,
|
||||
false, false, false,
|
||||
false, false, false, false,
|
||||
true,
|
||||
args.debug),
|
||||
configSearch);
|
||||
|
@ -311,6 +317,7 @@ public class ViewModelMessages extends ViewModel {
|
|||
private boolean ascending;
|
||||
private boolean filter_seen;
|
||||
private boolean filter_unflagged;
|
||||
private boolean filter_unknown;
|
||||
private boolean filter_snoozed;
|
||||
private boolean debug;
|
||||
|
||||
|
@ -335,6 +342,7 @@ public class ViewModelMessages extends ViewModel {
|
|||
viewType == AdapterMessage.ViewType.THREAD ? "ascending_thread" : "ascending_list", false);
|
||||
this.filter_seen = prefs.getBoolean("filter_seen", false);
|
||||
this.filter_unflagged = prefs.getBoolean("filter_unflagged", false);
|
||||
this.filter_unknown = prefs.getBoolean("filter_unknown", false);
|
||||
this.filter_snoozed = prefs.getBoolean("filter_snoozed", true);
|
||||
this.debug = prefs.getBoolean("debug", false);
|
||||
}
|
||||
|
@ -356,6 +364,7 @@ public class ViewModelMessages extends ViewModel {
|
|||
this.ascending == other.ascending &&
|
||||
this.filter_seen == other.filter_seen &&
|
||||
this.filter_unflagged == other.filter_unflagged &&
|
||||
this.filter_unknown == other.filter_unknown &&
|
||||
this.filter_snoozed == other.filter_snoozed &&
|
||||
this.debug == other.debug);
|
||||
} else
|
||||
|
@ -370,7 +379,10 @@ public class ViewModelMessages extends ViewModel {
|
|||
" query=" + query + ":" + server + "" +
|
||||
" threading=" + threading +
|
||||
" sort=" + sort + ":" + ascending +
|
||||
" filter seen=" + filter_seen + " unflagged=" + filter_unflagged + " snoozed=" + filter_snoozed +
|
||||
" filter seen=" + filter_seen +
|
||||
" unflagged=" + filter_unflagged +
|
||||
" unknown=" + filter_unknown +
|
||||
" snoozed=" + filter_snoozed +
|
||||
" debug=" + debug;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,6 +73,11 @@
|
|||
android:checkable="true"
|
||||
android:title="@string/title_filter_unflagged" />
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_filter_unknown"
|
||||
android:checkable="true"
|
||||
android:title="@string/title_filter_unknown" />
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_filter_snoozed"
|
||||
android:checkable="true"
|
||||
|
|
|
@ -836,6 +836,7 @@
|
|||
<string name="title_filter">Filter out</string>
|
||||
<string name="title_filter_seen">Read</string>
|
||||
<string name="title_filter_unflagged">Unstarred</string>
|
||||
<string name="title_filter_unknown">Unknown senders</string>
|
||||
<string name="title_filter_hidden">Hidden</string>
|
||||
<string name="title_filter_duplicates">Duplicates</string>
|
||||
|
||||
|
|
Loading…
Reference in New Issue