Added fail safes

pull/194/merge
M66B 4 years ago
parent 0f07b6a4d8
commit 56d7d6d951

@ -743,15 +743,18 @@ class Core {
Message[] imessages = findMsgId(context, account, ifolder, msgid); Message[] imessages = findMsgId(context, account, ifolder, msgid);
if (imessages != null) if (imessages != null)
for (Message iexisting : imessages) { for (Message iexisting : imessages)
long muid = ifolder.getUID(iexisting); try {
if (muid < 0) long muid = ifolder.getUID(iexisting);
continue; if (muid < 0)
Log.i(name + " found uid=" + muid + " for msgid=" + msgid); continue;
// RFC3501: Unique identifiers are assigned in a strictly ascending fashion Log.i(name + " found uid=" + muid + " for msgid=" + msgid);
if (uid == null || muid > uid) // RFC3501: Unique identifiers are assigned in a strictly ascending fashion
uid = muid; if (uid == null || muid > uid)
} uid = muid;
} catch (MessageRemovedException ex) {
Log.w(ex);
}
Log.i(name + " got uid=" + uid + " for msgid=" + msgid); Log.i(name + " got uid=" + uid + " for msgid=" + msgid);
return uid; return uid;
@ -1131,32 +1134,38 @@ class Core {
if (imessages != null) { if (imessages != null) {
Long found = null; Long found = null;
for (Message iexisting : imessages) { for (Message iexisting : imessages)
long muid = ifolder.getUID(iexisting); try {
if (muid < 0) long muid = ifolder.getUID(iexisting);
continue; if (muid < 0)
Log.i(folder.name + " found added uid=" + muid + " msgid=" + message.msgid); continue;
if (found == null || muid > found) Log.i(folder.name + " found added uid=" + muid + " msgid=" + message.msgid);
found = muid; if (found == null || muid > found)
} found = muid;
} catch (MessageRemovedException ex) {
Log.w(ex);
}
if (found != null) { if (found != null) {
if (newuid == null || found > newuid) if (newuid == null || found > newuid)
newuid = found; newuid = found;
List<Message> delete = new ArrayList<>(); List<Message> delete = new ArrayList<>();
for (Message iexisting : imessages) { for (Message iexisting : imessages)
long muid = ifolder.getUID(iexisting); try {
if (muid < 0) long muid = ifolder.getUID(iexisting);
continue; if (muid < 0)
if (muid < newuid) continue;
try { if (muid < newuid)
iexisting.setFlag(Flags.Flag.DELETED, true); try {
delete.add(iexisting); iexisting.setFlag(Flags.Flag.DELETED, true);
} catch (MessagingException ex) { delete.add(iexisting);
Log.w(ex); } catch (MessagingException ex) {
} Log.w(ex);
} }
} catch (MessageRemovedException ex) {
Log.w(ex);
}
expunge(context, ifolder, delete); expunge(context, ifolder, delete);
} }
@ -1598,30 +1607,28 @@ class Core {
(!found || EntityFolder.DRAFTS.equals(folder.type))) (!found || EntityFolder.DRAFTS.equals(folder.type)))
try { try {
Message[] imessages = findMsgId(context, account, ifolder, message.msgid); Message[] imessages = findMsgId(context, account, ifolder, message.msgid);
if (imessages == null) if (imessages != null)
Log.w(folder.name + " search for msgid=" + message.msgid + " returned null"); for (Message iexisting : imessages)
else try {
for (Message iexisting : imessages) { long muid = ifolder.getUID(iexisting);
long muid = ifolder.getUID(iexisting); if (found && muid == message.uid)
if (found && muid == message.uid) continue;
continue;
MessageHelper helper = new MessageHelper((MimeMessage) iexisting, context); // Fail safe
if (!message.msgid.equals(helper.getMessageID())) MessageHelper helper = new MessageHelper((MimeMessage) iexisting, context);
continue; if (!message.msgid.equals(helper.getMessageID()))
continue;
Log.i(folder.name + " deleting uid=" + muid); Log.i(folder.name + " deleting uid=" + muid);
try {
if (perform_expunge) if (perform_expunge)
iexisting.setFlag(Flags.Flag.DELETED, true); iexisting.setFlag(Flags.Flag.DELETED, true);
else else
iexisting.setFlag(Flags.Flag.DELETED, message.ui_deleted); iexisting.setFlag(Flags.Flag.DELETED, message.ui_deleted);
deleted.add(iexisting); deleted.add(iexisting);
} catch (MessageRemovedException ignored) { } catch (MessageRemovedException ex) {
Log.w(folder.name + " existing gone uid=" + muid); Log.w(ex);
} }
}
} catch (MessagingException ex) { } catch (MessagingException ex) {
Log.w(ex); Log.w(ex);
} }
@ -2372,11 +2379,14 @@ class Core {
ifolder.fetch(imessages, fp); ifolder.fetch(imessages, fp);
List<Message> idelete = new ArrayList<>(); List<Message> idelete = new ArrayList<>();
for (Message imessage : imessages) { for (Message imessage : imessages)
long uid = ifolder.getUID(imessage); try {
if (!busy.contains(uid)) long uid = ifolder.getUID(imessage);
idelete.add(imessage); if (!busy.contains(uid))
} idelete.add(imessage);
} catch (MessageRemovedException ex) {
Log.w(ex);
}
EntityLog.log(context, folder.name + " purging=" + idelete.size() + "/" + imessages.length); EntityLog.log(context, folder.name + " purging=" + idelete.size() + "/" + imessages.length);
if (account.isYahooJp()) { if (account.isYahooJp()) {

Loading…
Cancel
Save