Allow deleting trash/spam of all accounts

pull/172/head
M66B 6 years ago
parent b532374c28
commit 64af3ba9b8

@ -2927,10 +2927,12 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
menu.findItem(R.id.menu_select_all).setVisible(!outbox && menu.findItem(R.id.menu_select_all).setVisible(!outbox &&
(viewType == AdapterMessage.ViewType.UNIFIED || viewType == AdapterMessage.ViewType.FOLDER)); (viewType == AdapterMessage.ViewType.UNIFIED || viewType == AdapterMessage.ViewType.FOLDER));
menu.findItem(R.id.menu_select_found).setVisible(viewType == AdapterMessage.ViewType.SEARCH); menu.findItem(R.id.menu_select_found).setVisible(viewType == AdapterMessage.ViewType.SEARCH);
menu.findItem(R.id.menu_empty_trash).setVisible( menu.findItem(R.id.menu_empty_trash).setVisible(EntityFolder.TRASH.equals(type) &&
viewType == AdapterMessage.ViewType.FOLDER && EntityFolder.TRASH.equals(type)); (viewType == AdapterMessage.ViewType.UNIFIED ||
menu.findItem(R.id.menu_empty_spam).setVisible( viewType == AdapterMessage.ViewType.FOLDER));
viewType == AdapterMessage.ViewType.FOLDER && EntityFolder.JUNK.equals(type)); menu.findItem(R.id.menu_empty_spam).setVisible(EntityFolder.JUNK.equals(type) &&
(viewType == AdapterMessage.ViewType.UNIFIED ||
viewType == AdapterMessage.ViewType.FOLDER));
menu.findItem(R.id.menu_force_sync).setVisible(viewType == AdapterMessage.ViewType.UNIFIED); menu.findItem(R.id.menu_force_sync).setVisible(viewType == AdapterMessage.ViewType.UNIFIED);
@ -3132,12 +3134,14 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
private void onMenuEmpty(String type) { private void onMenuEmpty(String type) {
Bundle aargs = new Bundle(); Bundle aargs = new Bundle();
if (EntityFolder.TRASH.equals(type)) if (EntityFolder.TRASH.equals(type))
aargs.putString("question", getString(R.string.title_empty_trash_ask)); 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)) else if (EntityFolder.JUNK.equals(type))
aargs.putString("question", getString(R.string.title_empty_spam_ask)); aargs.putString("question", getString(
account < 0 ? R.string.title_empty_spam_all_ask : R.string.title_empty_spam_ask));
else else
throw new IllegalArgumentException("Invalid folder type=" + type); throw new IllegalArgumentException("Invalid folder type=" + type);
aargs.putLong("folder", folder); aargs.putLong("account", account);
aargs.putString("type", type); aargs.putString("type", type);
FragmentDialogAsk ask = new FragmentDialogAsk(); FragmentDialogAsk ask = new FragmentDialogAsk();
@ -5349,25 +5353,36 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
new SimpleTask<Void>() { new SimpleTask<Void>() {
@Override @Override
protected Void onExecute(Context context, Bundle args) { protected Void onExecute(Context context, Bundle args) {
long fid = args.getLong("folder"); long aid = args.getLong("account");
String type = args.getString("type"); String type = args.getString("type");
DB db = DB.getInstance(context); DB db = DB.getInstance(context);
try { try {
db.beginTransaction(); db.beginTransaction();
EntityFolder folder = db.folder().getFolder(fid); List<EntityAccount> accounts;
if (folder == null) if (account < 0)
return null; accounts = db.account().getSynchronizingAccounts();
else {
EntityAccount account = db.account().getAccount(aid);
if (account == null)
return null;
accounts = Arrays.asList(account);
}
if (!folder.type.equals(type)) for (EntityAccount account : accounts) {
throw new IllegalStateException("Invalid folder type=" + type); EntityFolder folder = db.folder().getFolderByType(account.id, type);
if (folder == null)
continue;
List<Long> ids = db.message().getMessageByFolder(folder.id); List<Long> ids = db.message().getMessageByFolder(folder.id);
for (Long id : ids) { for (Long id : ids) {
EntityMessage message = db.message().getMessage(id); EntityMessage message = db.message().getMessage(id);
if (message.uid != null || !TextUtils.isEmpty(message.msgid)) if (message.uid != null || !TextUtils.isEmpty(message.msgid)) {
EntityOperation.queue(context, message, EntityOperation.DELETE); Log.i("Deleting account=" + account.id + " folder=" + folder.id + " message=" + message.id);
EntityOperation.queue(context, message, EntityOperation.DELETE);
}
}
} }
db.setTransactionSuccessful(); db.setTransactionSuccessful();

@ -529,6 +529,8 @@
<string name="title_empty_trash_ask">Delete all trashed messages permanently?</string> <string name="title_empty_trash_ask">Delete all trashed messages permanently?</string>
<string name="title_empty_spam_ask">Delete all spam messages permanently?</string> <string name="title_empty_spam_ask">Delete all spam messages permanently?</string>
<string name="title_empty_trash_all_ask">Delete all trashed messages of all accounts permanently?</string>
<string name="title_empty_spam_all_ask">Delete all spam messages of all accounts permanently?</string>
<string name="title_delete_operation">Delete operations with an error message?</string> <string name="title_delete_operation">Delete operations with an error message?</string>
<string name="title_delete_contacts">Delete all local contacts?</string> <string name="title_delete_contacts">Delete all local contacts?</string>
<string name="title_no_operations">No pending operations</string> <string name="title_no_operations">No pending operations</string>

Loading…
Cancel
Save