From ba2499ca77b3dcd3e67e07183779b973c2911b31 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 7 Mar 2025 07:47:47 +0100 Subject: [PATCH] Added fail-safe --- .../faircode/email/FragmentDialogSearch.java | 202 +++++++++--------- 1 file changed, 103 insertions(+), 99 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogSearch.java b/app/src/main/java/eu/faircode/email/FragmentDialogSearch.java index c95e8873a4..f0944137b3 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogSearch.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogSearch.java @@ -456,116 +456,120 @@ public class FragmentDialogSearch extends FragmentDialogBase { .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - BoundaryCallbackMessages.SearchCriteria criteria = new BoundaryCallbackMessages.SearchCriteria(); - - criteria.query = etQuery.getText().toString().trim(); - if (TextUtils.isEmpty(criteria.query)) - criteria.query = null; - - criteria.fts = (cbSearchIndex.isChecked() && cbSearchIndex.isEnabled()); - criteria.in_senders = cbSenders.isChecked(); - criteria.in_recipients = cbRecipients.isChecked(); - criteria.in_subject = cbSubject.isChecked(); - criteria.in_keywords = cbKeywords.isChecked(); - criteria.in_message = cbMessage.isChecked(); - criteria.in_notes = cbNotes.isChecked(); - criteria.in_filenames = cbFileNames.isChecked(); - criteria.in_headers = cbHeaders.isChecked(); - criteria.in_html = cbHtml.isChecked(); - criteria.with_unseen = cbUnseen.isChecked(); - criteria.with_flagged = cbFlagged.isChecked(); - criteria.with_hidden = cbHidden.isChecked(); - criteria.with_encrypted = cbEncrypted.isChecked(); - criteria.with_attachments = cbAttachments.isChecked(); - - if (!criteria.fts) { - int pos = spMessageSize.getSelectedItemPosition(); - if (pos > 0) { - int[] sizes = getResources().getIntArray(R.array.sizeValues); - criteria.with_size = sizes[pos]; + try { + BoundaryCallbackMessages.SearchCriteria criteria = new BoundaryCallbackMessages.SearchCriteria(); + + criteria.query = etQuery.getText().toString().trim(); + if (TextUtils.isEmpty(criteria.query)) + criteria.query = null; + + criteria.fts = (cbSearchIndex.isChecked() && cbSearchIndex.isEnabled()); + criteria.in_senders = cbSenders.isChecked(); + criteria.in_recipients = cbRecipients.isChecked(); + criteria.in_subject = cbSubject.isChecked(); + criteria.in_keywords = cbKeywords.isChecked(); + criteria.in_message = cbMessage.isChecked(); + criteria.in_notes = cbNotes.isChecked(); + criteria.in_filenames = cbFileNames.isChecked(); + criteria.in_headers = cbHeaders.isChecked(); + criteria.in_html = cbHtml.isChecked(); + criteria.with_unseen = cbUnseen.isChecked(); + criteria.with_flagged = cbFlagged.isChecked(); + criteria.with_hidden = cbHidden.isChecked(); + criteria.with_encrypted = cbEncrypted.isChecked(); + criteria.with_attachments = cbAttachments.isChecked(); + + if (!criteria.fts) { + int pos = spMessageSize.getSelectedItemPosition(); + if (pos > 0) { + int[] sizes = getResources().getIntArray(R.array.sizeValues); + criteria.with_size = sizes[pos]; + } } - } - - criteria.in_trash = cbSearchTrash.isChecked(); - criteria.in_junk = cbSearchJunk.isChecked(); - Object after = tvAfter.getTag(); - Object before = tvBefore.getTag(); + criteria.in_trash = cbSearchTrash.isChecked(); + criteria.in_junk = cbSearchJunk.isChecked(); - if (after != null) - criteria.after = ((Calendar) after).getTimeInMillis(); - if (before != null) - criteria.before = ((Calendar) before).getTimeInMillis(); + Object after = tvAfter.getTag(); + Object before = tvBefore.getTag(); - boolean device = (cbSearchDevice.isChecked() || !cbSearchDevice.isEnabled()); + if (after != null) + criteria.after = ((Calendar) after).getTimeInMillis(); + if (before != null) + criteria.before = ((Calendar) before).getTimeInMillis(); - if (criteria.query != null) { - List searches = new ArrayList<>(); - for (int i = 1; i <= 3; i++) - if (prefs.contains("last_search" + i)) { - String search = prefs.getString("last_search" + i, null); - searches.add(search); - } - - searches.remove(criteria.query); - searches.add(0, criteria.query); + boolean device = (cbSearchDevice.isChecked() || !cbSearchDevice.isEnabled()); - SharedPreferences.Editor editor = prefs.edit(); - for (int i = 1; i <= Math.min(3, searches.size()); i++) - editor.putString("last_search" + i, searches.get(i - 1)); - editor.apply(); - } + if (criteria.query != null) { + List searches = new ArrayList<>(); + for (int i = 1; i <= 3; i++) + if (prefs.contains("last_search" + i)) { + String search = prefs.getString("last_search" + i, null); + searches.add(search); + } - Helper.hideKeyboard(etQuery); + searches.remove(criteria.query); + searches.add(0, criteria.query); - if (criteria.query != null && criteria.query.startsWith("raw:")) - new SimpleTask() { - @Override - protected EntityFolder onExecute(Context context, Bundle args) { - long aid = args.getLong("account", -1); + SharedPreferences.Editor editor = prefs.edit(); + for (int i = 1; i <= Math.min(3, searches.size()); i++) + editor.putString("last_search" + i, searches.get(i - 1)); + editor.apply(); + } - DB db = DB.getInstance(context); - EntityAccount account = null; - if (aid < 0) { - List accounts = db.account().getSynchronizingAccounts(EntityAccount.TYPE_IMAP); - if (accounts == null) + Helper.hideKeyboard(etQuery); + + if (criteria.query != null && criteria.query.startsWith("raw:")) + new SimpleTask() { + @Override + protected EntityFolder onExecute(Context context, Bundle args) { + long aid = args.getLong("account", -1); + + DB db = DB.getInstance(context); + EntityAccount account = null; + if (aid < 0) { + List accounts = db.account().getSynchronizingAccounts(EntityAccount.TYPE_IMAP); + if (accounts == null) + return null; + for (EntityAccount a : accounts) + if (a.isGmail()) + if (account == null) + account = a; + else + return null; + } else + account = db.account().getAccount(aid); + + if (account == null || !account.isGmail()) return null; - for (EntityAccount a : accounts) - if (a.isGmail()) - if (account == null) - account = a; - else - return null; - } else - account = db.account().getAccount(aid); - - if (account == null || !account.isGmail()) - return null; - - return db.folder().getFolderByType(account.id, EntityFolder.ARCHIVE); - } - - @Override - protected void onExecuted(Bundle args, EntityFolder archive) { - FragmentMessages.search( - context, getViewLifecycleOwner(), getParentFragmentManager(), - account, - archive == null ? folder : archive.id, - archive != null || !device, - criteria); - } - @Override - protected void onException(Bundle args, Throwable ex) { - Log.e(ex); - } - }.execute(context, getViewLifecycleOwner(), getArguments(), "search:raw"); - else - FragmentMessages.search( - context, getViewLifecycleOwner(), getParentFragmentManager(), - account, folder, - !device, - criteria); + return db.folder().getFolderByType(account.id, EntityFolder.ARCHIVE); + } + + @Override + protected void onExecuted(Bundle args, EntityFolder archive) { + FragmentMessages.search( + context, getViewLifecycleOwner(), getParentFragmentManager(), + account, + archive == null ? folder : archive.id, + archive != null || !device, + criteria); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.e(ex); + } + }.execute(context, getViewLifecycleOwner(), getArguments(), "search:raw"); + else + FragmentMessages.search( + context, getViewLifecycleOwner(), getParentFragmentManager(), + account, folder, + !device, + criteria); + } catch (Throwable ex) { + Log.e(ex); + } } }) .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {