From a0038c41dacff6c34a04ca06e836e349d3c944fe Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 11 Apr 2019 17:12:20 +0200 Subject: [PATCH] Monitor hidden messages --- .../main/java/eu/faircode/email/DaoMessage.java | 9 +++++++++ .../java/eu/faircode/email/FragmentMessages.java | 14 ++++++++++++++ .../java/eu/faircode/email/ServiceSynchronize.java | 3 ++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index ecafe5fed8..3cae3958ba 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -147,6 +147,12 @@ public interface DaoMessage { ", CASE WHEN folder.type = '" + EntityFolder.ARCHIVE + "' THEN 1 ELSE 0 END") DataSource.Factory pagedThread(long account, String thread, Long id, boolean debug); + @Query("SELECT id FROM message" + + " WHERE account = :account" + + " AND thread = :thread" + + " AND ui_hide") + LiveData> liveHidden(long account, String thread); + @Query("SELECT COUNT(id)" + " FROM message" + " WHERE id = :id") @@ -309,6 +315,9 @@ public interface DaoMessage { @Query("UPDATE message SET ui_hide = :ui_hide WHERE id = :id") int setMessageUiHide(long id, boolean ui_hide); + @Query("UPDATE message SET ui_hide = :ui_hide WHERE folder = :folder AND uid = :uid") + int setMessageUiHide(long folder, long uid, boolean ui_hide); + @Query("UPDATE message SET ui_ignored = :ui_ignored WHERE id = :id") int setMessageUiIgnored(long id, boolean ui_ignored); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 8c82bb29bc..15c01d8a9b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -1798,6 +1798,20 @@ public class FragmentMessages extends FragmentBase { setSubtitle(getString(R.string.title_folder_thread, account == null ? "" : account.name)); } }); + db.message().liveHidden(account, thread).observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List ids) { + if (ids != null) + for (long id : ids) { + Log.i("Hidden id=" + id); + for (String key : values.keySet()) + values.get(key).remove(id); + bodies.remove(id); + html.remove(id); + attachments.remove(id); + } + } + }); break; case SEARCH: diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index a45829e784..7755f94941 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -744,7 +744,8 @@ public class ServiceSynchronize extends LifecycleService { long uid = ifolder.getUID(imessage); DB db = DB.getInstance(ServiceSynchronize.this); - int count = db.message().deleteMessage(folder.id, uid); + int count = db.message().setMessageUiHide(folder.id, uid, true); + // Will be deleted on next sync Log.i(folder.name + " deleted uid=" + uid + " count=" + count); } catch (MessageRemovedException ex) {