mirror of https://github.com/M66B/FairEmail.git
Added search by size
This commit is contained in:
parent
2fd9d02810
commit
e69f29abda
|
@ -71,6 +71,7 @@ import javax.mail.search.OrTerm;
|
|||
import javax.mail.search.ReceivedDateTerm;
|
||||
import javax.mail.search.RecipientStringTerm;
|
||||
import javax.mail.search.SearchTerm;
|
||||
import javax.mail.search.SizeTerm;
|
||||
import javax.mail.search.SubjectTerm;
|
||||
|
||||
import io.requery.android.database.sqlite.SQLiteDatabase;
|
||||
|
@ -239,6 +240,7 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback<TupleMe
|
|||
criteria.with_hidden,
|
||||
criteria.with_encrypted,
|
||||
criteria.with_attachments,
|
||||
criteria.with_size,
|
||||
criteria.after,
|
||||
criteria.before,
|
||||
SEARCH_LIMIT, state.offset);
|
||||
|
@ -617,6 +619,7 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback<TupleMe
|
|||
boolean with_hidden;
|
||||
boolean with_encrypted;
|
||||
boolean with_attachments;
|
||||
Integer with_size = null;
|
||||
Long after = null;
|
||||
Long before = null;
|
||||
|
||||
|
@ -642,7 +645,8 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback<TupleMe
|
|||
with_flagged ||
|
||||
with_hidden ||
|
||||
with_encrypted ||
|
||||
with_attachments);
|
||||
with_attachments ||
|
||||
with_size != null);
|
||||
}
|
||||
|
||||
SearchTerm getTerms(boolean utf8, Flags flags, String[] keywords) {
|
||||
|
@ -685,6 +689,9 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback<TupleMe
|
|||
if (with_flagged && flags.contains(Flags.Flag.FLAGGED))
|
||||
and.add(new FlagTerm(new Flags(Flags.Flag.FLAGGED), true));
|
||||
|
||||
if (with_size != null)
|
||||
and.add(new SizeTerm(ComparisonTerm.GT, with_size));
|
||||
|
||||
if (after != null)
|
||||
and.add(new ReceivedDateTerm(ComparisonTerm.GE, new Date(after)));
|
||||
if (before != null)
|
||||
|
@ -716,6 +723,9 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback<TupleMe
|
|||
flags.add(context.getString(R.string.title_search_flag_encrypted));
|
||||
if (with_attachments)
|
||||
flags.add(context.getString(R.string.title_search_flag_attachments));
|
||||
if (with_size != null)
|
||||
flags.add(context.getString(R.string.title_search_flag_size,
|
||||
Helper.humanReadableByteCount(with_size, true)));
|
||||
return (query == null ? "" : query)
|
||||
+ (flags.size() > 0 ? " +" : "")
|
||||
+ TextUtils.join(",", flags);
|
||||
|
@ -736,6 +746,7 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback<TupleMe
|
|||
this.with_hidden == other.with_hidden &&
|
||||
this.with_encrypted == other.with_encrypted &&
|
||||
this.with_attachments == other.with_attachments &&
|
||||
Objects.equals(this.with_size, other.with_size) &&
|
||||
Objects.equals(this.after, other.after) &&
|
||||
Objects.equals(this.before, other.before));
|
||||
} else
|
||||
|
@ -756,6 +767,7 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback<TupleMe
|
|||
" hidden=" + with_hidden +
|
||||
" encrypted=" + with_encrypted +
|
||||
" attachments=" + with_attachments +
|
||||
" size=" + with_size +
|
||||
" after=" + (after == null ? "" : new Date(after)) +
|
||||
" before=" + (before == null ? "" : new Date(before));
|
||||
}
|
||||
|
|
|
@ -320,6 +320,7 @@ public interface DaoMessage {
|
|||
" AND (NOT :hidden OR NOT ui_snoozed IS NULL)" +
|
||||
" AND (NOT :encrypted OR ui_encrypt > 0)" +
|
||||
" AND (NOT :attachments OR attachments > 0)" +
|
||||
" AND (NOT :size OR total > :size)" +
|
||||
" AND (:after IS NULL OR received > :after)" +
|
||||
" AND (:before IS NULL OR received < :before)" +
|
||||
" ORDER BY received DESC" +
|
||||
|
@ -328,6 +329,7 @@ public interface DaoMessage {
|
|||
Long account, Long folder, String find,
|
||||
boolean senders, boolean recipients, boolean subject, boolean keywords, boolean message,
|
||||
boolean unseen, boolean flagged, boolean hidden, boolean encrypted, boolean attachments,
|
||||
Integer size,
|
||||
Long after, Long before,
|
||||
int limit, int offset);
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ import android.widget.CompoundButton;
|
|||
import android.widget.DatePicker;
|
||||
import android.widget.FilterQueryProvider;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
@ -73,6 +74,7 @@ public class FragmentDialogSearch extends FragmentDialogBase {
|
|||
final CheckBox cbHidden = dview.findViewById(R.id.cbHidden);
|
||||
final CheckBox cbEncrypted = dview.findViewById(R.id.cbEncrypted);
|
||||
final CheckBox cbAttachments = dview.findViewById(R.id.cbAttachments);
|
||||
final Spinner spMessageSize = dview.findViewById(R.id.spMessageSize);
|
||||
final Button btnBefore = dview.findViewById(R.id.btnBefore);
|
||||
final Button btnAfter = dview.findViewById(R.id.btnAfter);
|
||||
final TextView tvBefore = dview.findViewById(R.id.tvBefore);
|
||||
|
@ -97,7 +99,6 @@ public class FragmentDialogSearch extends FragmentDialogBase {
|
|||
new int[]{android.R.id.text1},
|
||||
0);
|
||||
|
||||
|
||||
adapter.setFilterQueryProvider(new FilterQueryProvider() {
|
||||
public Cursor runQuery(CharSequence typed) {
|
||||
Log.i("Search suggest=" + typed);
|
||||
|
@ -156,6 +157,7 @@ public class FragmentDialogSearch extends FragmentDialogBase {
|
|||
cbHidden.setEnabled(!isChecked);
|
||||
cbEncrypted.setEnabled(!isChecked);
|
||||
cbAttachments.setEnabled(!isChecked);
|
||||
spMessageSize.setEnabled(!isChecked);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -255,6 +257,12 @@ public class FragmentDialogSearch extends FragmentDialogBase {
|
|||
criteria.with_hidden = cbHidden.isChecked();
|
||||
criteria.with_encrypted = cbEncrypted.isChecked();
|
||||
criteria.with_attachments = cbAttachments.isChecked();
|
||||
|
||||
int pos = spMessageSize.getSelectedItemPosition();
|
||||
if (pos > 0) {
|
||||
int[] sizes = getResources().getIntArray(R.array.sizeValues);
|
||||
criteria.with_size = sizes[pos];
|
||||
}
|
||||
}
|
||||
|
||||
Object after = tvAfter.getTag();
|
||||
|
|
|
@ -281,6 +281,43 @@
|
|||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/cbEncrypted" />
|
||||
|
||||
<eu.faircode.email.FixedTextView
|
||||
android:id="@+id/tvMessageSize"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:text="@string/title_search_with_size"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/cbAttachments" />
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/spMessageSize"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:entries="@array/sizeNames"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvMessageSize" />
|
||||
|
||||
<eu.faircode.email.FixedTextView
|
||||
android:id="@+id/tvSizeHint"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginTop="6dp"
|
||||
android:text="@string/title_search_size_hint"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||
android:textStyle="italic"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/spMessageSize" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnAfter"
|
||||
style="?android:attr/buttonStyleSmall"
|
||||
|
@ -291,7 +328,7 @@
|
|||
android:text="@string/title_search_with_after"
|
||||
app:layout_constraintEnd_toStartOf="@id/btnBefore"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/cbAttachments" />
|
||||
app:layout_constraintTop_toBottomOf="@id/tvSizeHint" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnBefore"
|
||||
|
@ -303,7 +340,7 @@
|
|||
android:text="@string/title_search_with_before"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/btnAfter"
|
||||
app:layout_constraintTop_toBottomOf="@id/cbAttachments" />
|
||||
app:layout_constraintTop_toBottomOf="@id/tvSizeHint" />
|
||||
|
||||
<eu.faircode.email.FixedTextView
|
||||
android:id="@+id/tvAfter"
|
||||
|
@ -334,6 +371,7 @@
|
|||
app:constraint_referenced_ids="
|
||||
cbSearchIndex,tvSearchIndexHint,cbSenders,cbRecipients,cbSubject,cbKeywords,cbMessage,tvSearchTextHint,
|
||||
tvAnd,cbUnseen,cbFlagged,cbHidden,cbEncrypted,cbAttachments,
|
||||
tvMessageSize,spMessageSize,
|
||||
btnAfter,btnBefore,tvBefore,tvAfter" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</eu.faircode.email.ScrollViewEx>
|
|
@ -945,7 +945,8 @@
|
|||
To search the server too, tap on the \'search again\' button.
|
||||
</string>
|
||||
<string name="title_search_index_hint">Searching via the search index is fast, but will only find whole words</string>
|
||||
<string name="title_search_text_hint">Some email servers have trouble finding text in many messages</string>
|
||||
<string name="title_search_text_hint">Searching for text in messages, when there are a large number of messages, might not work on some servers</string>
|
||||
<string name="title_search_size_hint">Searching for messages by size, when there are a large number of messages, might not work on some servers</string>
|
||||
<string name="title_search_more">More options</string>
|
||||
<string name="title_search_use_index">Use search index</string>
|
||||
<string name="title_search_in_senders">In senders (from)</string>
|
||||
|
@ -959,6 +960,7 @@
|
|||
<string name="title_search_with_hidden">Hidden (on device only)</string>
|
||||
<string name="title_search_with_encrypted">Encrypted (on device only)</string>
|
||||
<string name="title_search_with_attachments">With attachments (on device only)</string>
|
||||
<string name="title_search_with_size">Message size larger than</string>
|
||||
<string name="title_search_with_before">Before</string>
|
||||
<string name="title_search_with_after">After</string>
|
||||
<string name="title_search_flag_unseen">unread</string>
|
||||
|
@ -966,6 +968,7 @@
|
|||
<string name="title_search_flag_hidden">hidden</string>
|
||||
<string name="title_search_flag_encrypted">encrypted</string>
|
||||
<string name="title_search_flag_attachments">attachments</string>
|
||||
<string name="title_search_flag_size">size > %1$s</string>
|
||||
|
||||
<string name="title_search_device">Search on device</string>
|
||||
<string name="title_search_server">Search on server</string>
|
||||
|
@ -1533,6 +1536,30 @@
|
|||
<item>3</item>
|
||||
</integer-array>
|
||||
|
||||
<string-array name="sizeNames">
|
||||
<item>0 B</item>
|
||||
<item>256 KB</item>
|
||||
<item>512 KB</item>
|
||||
<item>1 MB</item>
|
||||
<item>2 MB</item>
|
||||
<item>5 MB</item>
|
||||
<item>10 MB</item>
|
||||
<item>20 MB</item>
|
||||
<item>50 MB</item>
|
||||
</string-array>
|
||||
|
||||
<integer-array name="sizeValues" translatable="false">
|
||||
<item>0</item>
|
||||
<item>250000</item>
|
||||
<item>500000</item>
|
||||
<item>1000000</item>
|
||||
<item>2000000</item>
|
||||
<item>5000000</item>
|
||||
<item>10000000</item>
|
||||
<item>20000000</item>
|
||||
<item>50000000</item>
|
||||
</integer-array>
|
||||
|
||||
<string name="fingerprint" translatable="false">17BA15C1AF55D925F98B99CEA4375D4CDF4C174B</string>
|
||||
<string name="public_key" translatable="false">MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtFbxEbzL8u5accPGgBw/XdyiSS5BBE6ZQ9ELpKyJ/OQN+kdYniCAOw3lsQ/GuJScy4Y2HobqbBgLL8GLHG+Yu2EHC9dLjA3v2Mc25vvnfn86BsrpQvz1poN2n+roTBdq09FWbtebJ8m0hDBVmtfRi7RhTKIL4No3kodLhksdnucKjcFheubebWKgpmvbmw7NwuELhaZmyhw8WTtnQ4rZPMhjY1JJZgzwNExXgD7zzg4pJPkuQlfkuRkkvBpHpi3C7VDnYjrBlLHngI4wv3wxQBVwJqlvAT9PmX8dOVnTsWWdJdLQBZVWphuqVY54kjBIovN+o8w03WjsV9QiOQq+XwIDAQAB</string>
|
||||
</resources>
|
||||
|
|
Loading…
Reference in New Issue