From 19757af886e44e8096cebfe47086ac752dfe8846 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 31 May 2020 14:27:09 +0200 Subject: [PATCH] Monitor deleted selected messages --- .../eu/faircode/email/AdapterMessage.java | 41 +++++++++++++++++++ .../java/eu/faircode/email/DaoMessage.java | 11 ++--- .../eu/faircode/email/FragmentMessages.java | 16 -------- 3 files changed, 45 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 5e891e86c2..ff25b36b06 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -130,6 +130,7 @@ import androidx.paging.AsyncPagedListDiffer; import androidx.paging.PagedList; import androidx.preference.PreferenceManager; import androidx.recyclerview.selection.ItemDetailsLookup; +import androidx.recyclerview.selection.Selection; import androidx.recyclerview.selection.SelectionTracker; import androidx.recyclerview.widget.AdapterListUpdateCallback; import androidx.recyclerview.widget.AsyncDifferConfig; @@ -5143,6 +5144,46 @@ public class AdapterMessage extends RecyclerView.Adapter selection = selectionTracker.getSelection(); + + long[] ids = new long[selection.size()]; + int i = 0; + for (Long id : selection) + ids[i++] = id; + + Bundle args = new Bundle(); + args.putLongArray("ids", ids); + + new SimpleTask>() { + @Override + protected List onExecute(Context context, Bundle args) throws Throwable { + long[] ids = args.getLongArray("ids"); + + List removed = new ArrayList<>(); + + DB db = DB.getInstance(context); + for (long id : ids) + if (db.message().countVisible(id) == 0) + removed.add(id); + + return removed; + } + + @Override + protected void onExecuted(Bundle args, List removed) { + Log.i("Selection removed=" + removed.size()); + for (long id : removed) + selectionTracker.deselect(id); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(parentFragment.getParentFragmentManager(), ex); + } + }.execute(context, owner, args, "selection:update"); + } } }); diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 04f482cf81..65193ddc24 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -244,13 +244,6 @@ public interface DaoMessage { " GROUP BY account.id") LiveData liveThreadStats(long account, String thread, Long id, boolean filter_archive); - @Query("SELECT message.id FROM folder" + - " JOIN message ON message.folder = folder.id" + - " WHERE ((:folder IS NULL AND :type IS NULL AND folder.unified)" + - " OR folder.type = :type OR folder.id = :folder)" + - " AND ui_hide") - LiveData> liveHiddenFolder(Long folder, String type); - @Query("SELECT id FROM message" + " WHERE account = :account" + " AND thread = :thread" + @@ -366,6 +359,10 @@ public interface DaoMessage { " AND msgid = :msgid") int countMessageByMsgId(long folder, String msgid); + @Query("SELECT COUNT(*) FROM message" + + " WHERE id = :id AND NOT ui_hide") + int countVisible(long id); + @Query("SELECT message.*" + ", account.pop AS accountProtocol, account.name AS accountName, identity.color AS accountColor" + ", account.notify AS accountNotify, account.auto_seen AS accountAutoSeen" + diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 805f014520..b1dea79f44 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -3111,14 +3111,6 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. updateState(folders); } }); - db.message().liveHiddenFolder(null, type).observe(getViewLifecycleOwner(), new Observer>() { - @Override - public void onChanged(List ids) { - if (ids != null && selectionTracker != null) - for (long id : ids) - selectionTracker.deselect(id); - } - }); break; case FOLDER: @@ -3132,14 +3124,6 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. updateState(folders); } }); - db.message().liveHiddenFolder(folder, null).observe(getViewLifecycleOwner(), new Observer>() { - @Override - public void onChanged(List ids) { - if (ids != null && selectionTracker != null) - for (long id : ids) - selectionTracker.deselect(id); - } - }); break; case THREAD: