Allow undoing delete

pull/194/head
M66B 4 years ago
parent 54d806d3ed
commit 59f09ce624

@ -1330,7 +1330,7 @@ class Core {
} }
try { try {
boolean deleted = false; boolean found = false;
if (message.uid != null) { if (message.uid != null) {
Message iexisting = ifolder.getMessageByUID(message.uid); Message iexisting = ifolder.getMessageByUID(message.uid);
@ -1339,14 +1339,17 @@ class Core {
else else
try { try {
Log.i(folder.name + " deleting uid=" + message.uid); Log.i(folder.name + " deleting uid=" + message.uid);
iexisting.setFlag(Flags.Flag.DELETED, true); if (perform_expunge)
deleted = true; iexisting.setFlag(Flags.Flag.DELETED, true);
else
iexisting.setFlag(Flags.Flag.DELETED, message.ui_deleted);
found = true;
} catch (MessageRemovedException ignored) { } catch (MessageRemovedException ignored) {
Log.w(folder.name + " existing gone uid=" + message.uid); Log.w(folder.name + " existing gone uid=" + message.uid);
} }
} }
if (!TextUtils.isEmpty(message.msgid) && !deleted) if (!found && !TextUtils.isEmpty(message.msgid))
try { try {
Message[] imessages = ifolder.search(new MessageIDTerm(message.msgid)); Message[] imessages = ifolder.search(new MessageIDTerm(message.msgid));
if (imessages == null) if (imessages == null)
@ -1356,8 +1359,11 @@ class Core {
long muid = ifolder.getUID(iexisting); long muid = ifolder.getUID(iexisting);
Log.i(folder.name + " deleting uid=" + muid); Log.i(folder.name + " deleting uid=" + muid);
try { try {
iexisting.setFlag(Flags.Flag.DELETED, true); if (perform_expunge)
deleted = true; iexisting.setFlag(Flags.Flag.DELETED, true);
else
iexisting.setFlag(Flags.Flag.DELETED, message.ui_deleted);
found = true;
} catch (MessageRemovedException ignored) { } catch (MessageRemovedException ignored) {
Log.w(folder.name + " existing gone uid=" + muid); Log.w(folder.name + " existing gone uid=" + muid);
} }
@ -1367,10 +1373,14 @@ class Core {
} }
if (perform_expunge) { if (perform_expunge) {
if (deleted) if (found)
ifolder.expunge(); // NO EXPUNGE failed. ifolder.expunge(); // NO EXPUNGE failed.
db.message().deleteMessage(message.id); db.message().deleteMessage(message.id);
} else {
if (found)
db.message().setMessageDeleted(message.id, message.ui_deleted);
} }
} finally { } finally {
int count = MessageHelper.getMessageCount(ifolder); int count = MessageHelper.getMessageCount(ifolder);
db.folder().setFolderTotal(folder.id, count < 0 ? null : count); db.folder().setFolderTotal(folder.id, count < 0 ? null : count);

@ -628,6 +628,9 @@ public interface DaoMessage {
@Query("UPDATE message SET flagged = :flagged WHERE id = :id AND NOT (flagged IS :flagged)") @Query("UPDATE message SET flagged = :flagged WHERE id = :id AND NOT (flagged IS :flagged)")
int setMessageFlagged(long id, boolean flagged); int setMessageFlagged(long id, boolean flagged);
@Query("UPDATE message SET deleted = :deleted WHERE id = :id AND NOT (deleted IS :deleted)")
int setMessageDeleted(long id, boolean deleted);
@Query("UPDATE message SET answered = :answered WHERE id = :id AND NOT (answered IS :answered)") @Query("UPDATE message SET answered = :answered WHERE id = :id AND NOT (answered IS :answered)")
int setMessageAnswered(long id, boolean answered); int setMessageAnswered(long id, boolean answered);

@ -346,8 +346,10 @@ public class EntityOperation {
boolean perform_expunge = prefs.getBoolean("perform_expunge", true); boolean perform_expunge = prefs.getBoolean("perform_expunge", true);
if (perform_expunge) if (perform_expunge)
db.message().setMessageUiHide(message.id, true); db.message().setMessageUiHide(message.id, true);
else else {
db.message().setMessageUiDeleted(message.id, true); message.ui_deleted = !message.ui_deleted;
db.message().setMessageUiDeleted(message.id, message.ui_deleted);
}
/* /*
if (message.hash != null) { if (message.hash != null) {
List<EntityMessage> sames = db.message().getMessagesByHash(message.account, message.hash); List<EntityMessage> sames = db.message().getMessagesByHash(message.account, message.hash);

Loading…
Cancel
Save