From 19a94ee7f48423123cf5818934fda6590c580833 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 1 Feb 2022 20:54:30 +0100 Subject: [PATCH] Permanent delete? --- .../eu/faircode/email/FragmentMessages.java | 79 +++++++++++++++---- 1 file changed, 62 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index b7d5dd4a98..703b873440 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -4940,24 +4940,69 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. } private void onMenuEmpty(String type) { - Bundle aargs = new Bundle(); - if (EntityFolder.TRASH.equals(type)) - aargs.putString("question", getString( - account < 0 ? R.string.title_empty_trash_all_ask : R.string.title_empty_trash_ask)); - else if (EntityFolder.JUNK.equals(type)) - aargs.putString("question", getString( - account < 0 ? R.string.title_empty_spam_all_ask : R.string.title_empty_spam_ask)); - else - throw new IllegalArgumentException("Invalid folder type=" + type); - aargs.putBoolean("warning", true); - aargs.putString("remark", getString(R.string.title_empty_all)); - aargs.putLong("account", account); - aargs.putString("type", type); + Bundle args = new Bundle(); + args.putLong("account", account); - FragmentDialogAsk ask = new FragmentDialogAsk(); - ask.setArguments(aargs); - ask.setTargetFragment(this, REQUEST_EMPTY_FOLDER); - ask.show(getParentFragmentManager(), "messages:empty"); + new SimpleTask>() { + @Override + protected List onExecute(Context context, Bundle args) { + long aid = args.getLong("account"); + + List result = new ArrayList<>(); + + DB db = DB.getInstance(context); + if (aid < 0) { + List accounts = db.account().getSynchronizingAccounts(null); + if (accounts != null) + result.addAll(accounts); + } else { + EntityAccount account = db.account().getAccount(aid); + if (account != null) + result.add(account); + } + + return result; + } + + @Override + protected void onExecuted(Bundle args, List accounts) { + boolean permanent = false; + for (EntityAccount account : accounts) + if (account.protocol == EntityAccount.TYPE_IMAP || !account.leave_deleted) { + permanent = true; + break; + } + + Bundle aargs = new Bundle(); + + if (EntityFolder.TRASH.equals(type)) + aargs.putString("question", getString( + accounts.size() > 1 ? R.string.title_empty_trash_all_ask : R.string.title_empty_trash_ask)); + else if (EntityFolder.JUNK.equals(type)) + aargs.putString("question", getString( + accounts.size() > 1 ? R.string.title_empty_spam_all_ask : R.string.title_empty_spam_ask)); + else + throw new IllegalArgumentException("Invalid folder type=" + type); + + aargs.putBoolean("warning", true); + + if (permanent) + aargs.putString("remark", getString(R.string.title_empty_all)); + + aargs.putLong("account", args.getLong("account")); + aargs.putString("type", type); + + FragmentDialogAsk ask = new FragmentDialogAsk(); + ask.setArguments(aargs); + ask.setTargetFragment(FragmentMessages.this, REQUEST_EMPTY_FOLDER); + ask.show(getParentFragmentManager(), "messages:empty"); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(this, args, "folder:empty"); } private void onMenuSort(String sort) {